[gitfame] Update readme.
This commit is contained in:
parent
29d4a5fa12
commit
c28729a65a
1 changed files with 48 additions and 0 deletions
|
@ -36,6 +36,11 @@ f4640df4 (Fedor Korotkiy 2020-02-26 20:28:52 +0000 5) Задача считае
|
|||
Стоит помнить, что не все файлы из директории git проекта обязательно принадлежат git репозиторию.
|
||||
Получить список файлов git репозитория можно разными способами, например с помощью `git ls-tree`.
|
||||
|
||||
Для вызова команд git можно использовать [os/exec](https://golang.org/pkg/os/exec/).
|
||||
|
||||
В процессе работы скрипт не должен менять состояние репозитория ни в какой момент,
|
||||
поскольку с репозиторием могут параллельно работать.
|
||||
|
||||
### Интерфейс
|
||||
|
||||
Утилита должна печатать результат в stdout.
|
||||
|
@ -105,10 +110,17 @@ ferhat elmas,1,1,1
|
|||
|
||||
**--exclude** — набор [Glob](https://en.wikipedia.org/wiki/Glob_(programming)) паттернов, исключающих файлы из расчёта, например `'foo/*,bar/*'`
|
||||
|
||||
Для работы с Glob'ом в стандартной библиотеке есть [path/filepath](https://golang.org/pkg/path/filepath/).
|
||||
|
||||
**--restrict-to** — набор Glob паттернов, исключающий все файлы, не удовлетворяющие ни одному из паттернов набора
|
||||
|
||||
### Тесты
|
||||
|
||||
Команда для запуска тестов
|
||||
```
|
||||
go test -v ./gitfame/test/integration/...
|
||||
```
|
||||
|
||||
В [/tests/integration/testdata/bundles](test/integration/testdata/bundles) лежат запакованные git репозитории.
|
||||
Каждый интеграционный тест ссылается на какой-нибудь бандл.
|
||||
|
||||
|
@ -122,6 +134,26 @@ git bundle create my.bundle --all
|
|||
git clone /path/to/my.bundle .
|
||||
```
|
||||
|
||||
### Сборка приложения
|
||||
|
||||
Как собрать приложение?
|
||||
```
|
||||
(cd gitfame/cmd/gitfame && go build .)
|
||||
```
|
||||
В `gitfame/cmd/gitfame` появится исполняемый файл с именем `gitfame`.
|
||||
|
||||
Как собрать приложение и установить его в `GOPATH/bin`?
|
||||
```
|
||||
go install ./gitfame/cmd/gitfame/...
|
||||
```
|
||||
|
||||
Чтобы вызывать установленный бинарь без указания полного пути, нужно добавить `GOPATH/bin` в `PATH`.
|
||||
```
|
||||
export PATH=$GOPATH/bin:$PATH
|
||||
```
|
||||
|
||||
После этого `gitfame` будет доступен всюду.
|
||||
|
||||
### Ненавязчивые предложения
|
||||
|
||||
#### Project layout
|
||||
|
@ -139,6 +171,22 @@ git clone /path/to/my.bundle .
|
|||
популярной библиотекой для написания [cli](https://en.wikipedia.org/wiki/Command-line_interface).
|
||||
В этой задаче cobra поможет распарсить аргументы, написать подробный help message, сделать алиасы для флагов.
|
||||
|
||||
В cobra используется библиотека [pflag](https://pkg.go.dev/github.com/spf13/pflag) для работы с флагами.
|
||||
Библиотеку можно использовать и отдельно от cobra.
|
||||
`pflag` может побольше, чем стандартный [flag](https://golang.org/pkg/flag/),
|
||||
в частости, в `pflag` есть полезные для решаемой задачи флаги для работы с аргументами-массивами.
|
||||
|
||||
Помимо библиотеки, в cobra есть ещё и бинарь (с именем cobra) для кодогенерации основы проекта.
|
||||
|
||||
Его можно установить в `GOPATH` командой
|
||||
```
|
||||
go get -u github.com/spf13/cobra
|
||||
```
|
||||
|
||||
Генерируемый sample проект использует [viper](https://pkg.go.dev/github.com/spf13/viper) (библиотеку для работы с конфигами) и
|
||||
[go-homedir](https://pkg.go.dev/github.com/mitchellh/go-homedir) (кроссплатформенную библиотеку для поиска домашней директории пользователя).
|
||||
В этой задаче эти библиотеки не нужны, поэтому их нет в зависимостях проекта.
|
||||
|
||||
### Git ликбез
|
||||
|
||||
Вся информация взята из [книги](https://github.com/pluralsight/git-internals-pdf/releases/download/v2.0/peepcode-git.pdf).
|
||||
|
|
Loading…
Reference in a new issue