[gitfame] Update readme.

This commit is contained in:
Arseny Balobanov 2021-03-06 20:54:38 +03:00
parent 29d4a5fa12
commit c28729a65a

View file

@ -36,6 +36,11 @@ f4640df4 (Fedor Korotkiy 2020-02-26 20:28:52 +0000 5) Задача считае
Стоит помнить, что не все файлы из директории git проекта обязательно принадлежат git репозиторию. Стоит помнить, что не все файлы из директории git проекта обязательно принадлежат git репозиторию.
Получить список файлов git репозитория можно разными способами, например с помощью `git ls-tree`. Получить список файлов git репозитория можно разными способами, например с помощью `git ls-tree`.
Для вызова команд git можно использовать [os/exec](https://golang.org/pkg/os/exec/).
В процессе работы скрипт не должен менять состояние репозитория ни в какой момент,
поскольку с репозиторием могут параллельно работать.
### Интерфейс ### Интерфейс
Утилита должна печатать результат в stdout. Утилита должна печатать результат в stdout.
@ -105,10 +110,17 @@ ferhat elmas,1,1,1
**--exclude** — набор [Glob](https://en.wikipedia.org/wiki/Glob_(programming)) паттернов, исключающих файлы из расчёта, например `'foo/*,bar/*'` **--exclude** — набор [Glob](https://en.wikipedia.org/wiki/Glob_(programming)) паттернов, исключающих файлы из расчёта, например `'foo/*,bar/*'`
Для работы с Glob'ом в стандартной библиотеке есть [path/filepath](https://golang.org/pkg/path/filepath/).
**--restrict-to** — набор Glob паттернов, исключающий все файлы, не удовлетворяющие ни одному из паттернов набора **--restrict-to** — набор Glob паттернов, исключающий все файлы, не удовлетворяющие ни одному из паттернов набора
### Тесты ### Тесты
Команда для запуска тестов
```
go test -v ./gitfame/test/integration/...
```
В [/tests/integration/testdata/bundles](test/integration/testdata/bundles) лежат запакованные git репозитории. В [/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 . 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 #### Project layout
@ -139,6 +171,22 @@ git clone /path/to/my.bundle .
популярной библиотекой для написания [cli](https://en.wikipedia.org/wiki/Command-line_interface). популярной библиотекой для написания [cli](https://en.wikipedia.org/wiki/Command-line_interface).
В этой задаче cobra поможет распарсить аргументы, написать подробный help message, сделать алиасы для флагов. В этой задаче 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 ликбез ### Git ликбез
Вся информация взята из [книги](https://github.com/pluralsight/git-internals-pdf/releases/download/v2.0/peepcode-git.pdf). Вся информация взята из [книги](https://github.com/pluralsight/git-internals-pdf/releases/download/v2.0/peepcode-git.pdf).