[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 репозиторию.
|
||||||
Получить список файлов 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).
|
||||||
|
|
Loading…
Reference in a new issue