[gitfame] Improve description.
This commit is contained in:
parent
0d45ba2f34
commit
952fcab12a
1 changed files with 32 additions and 21 deletions
|
@ -2,6 +2,27 @@
|
|||
|
||||
В этом задании нужно реализовать консольную утилиту для подсчёта статистик авторов git репозитория.
|
||||
|
||||
```
|
||||
gitfame --repository=. --extensions='.go,.md' --order-by=lines
|
||||
Name Lines Commits Files
|
||||
Joe Tsai 12154 92 49
|
||||
colinnewell 130 1 1
|
||||
Roger Peppe 59 1 2
|
||||
A. Ishikawa 36 1 1
|
||||
Tobias Klauser 33 1 2
|
||||
178inaba 11 2 4
|
||||
Kyle Lemons 11 1 1
|
||||
Dmitri Shuralyov 8 1 2
|
||||
ferhat elmas 7 1 4
|
||||
Christian Muehlhaeuser 6 3 4
|
||||
k.nakada 5 1 3
|
||||
LMMilewski 5 1 2
|
||||
Ernest Galbrun 3 1 1
|
||||
Ross Light 2 1 1
|
||||
Chris Morrow 1 1 1
|
||||
Fiisio 1 1 1
|
||||
```
|
||||
|
||||
### Статистики
|
||||
|
||||
* Количество строк
|
||||
|
@ -10,6 +31,15 @@
|
|||
|
||||
Все статистики считаются для состояния репозитория на момент конкретного коммита.
|
||||
|
||||
### Интерфейс
|
||||
|
||||
Утилита должна печатать результат в stdout.
|
||||
При использовании невалидного значения флага или любой другой ошибке программа должна завершаться с ненулевым кодом возврата.
|
||||
|
||||
Расчёт может занимать довольно длительное время.
|
||||
Хорошим качеством подобной утилиты является отображение прогресса (вынесенное за флаг).
|
||||
Прогресс можно печатать в stderr в произвольном формате.
|
||||
|
||||
#### Расчёт
|
||||
|
||||
Каждой строке интересующего подмножества файлов репозитория сопоставляется последний коммит, модифицировавший эту строку.
|
||||
|
@ -41,15 +71,6 @@ f4640df4 (Fedor Korotkiy 2020-02-26 20:28:52 +0000 5) Задача считае
|
|||
В процессе работы скрипт не должен менять состояние репозитория ни в какой момент,
|
||||
поскольку с репозиторием могут параллельно работать.
|
||||
|
||||
### Интерфейс
|
||||
|
||||
Утилита должна печатать результат в stdout.
|
||||
При использовании невалидного значения флага или любой другой ошибке программа должна завершаться с ненулевым кодом возврата.
|
||||
|
||||
Расчёт может занимать довольно длительное время.
|
||||
Хорошим качеством подобной утилиты является отображение прогресса (вынесенное за флаг).
|
||||
Прогресс можно печатать в stderr в произвольном формате.
|
||||
|
||||
### Флаги
|
||||
|
||||
Утилита должна поддерживать следующий набор флагов:
|
||||
|
@ -124,7 +145,7 @@ go test -v ./gitfame/test/integration/...
|
|||
В [/tests/integration/testdata/bundles](test/integration/testdata/bundles) лежат запакованные git репозитории.
|
||||
Каждый интеграционный тест ссылается на какой-нибудь бандл.
|
||||
|
||||
Как создать bundle? Находясь в git репозитории выполнить
|
||||
Как создать свой bundle? Находясь в git репозитории выполнить
|
||||
```
|
||||
git bundle create my.bundle --all
|
||||
```
|
||||
|
@ -164,6 +185,7 @@ export PATH=$GOPATH/bin:$PATH
|
|||
|
||||
В небольших проектах нет ничего плохого в том, чтобы весь код лежал плоско в корне.
|
||||
Здесь же, для ознакомления предлагаем изучить общепринятый подход.
|
||||
В частности, писать реализацию в internal или pkg (в чём разница?).
|
||||
|
||||
#### Cli
|
||||
|
||||
|
@ -176,17 +198,6 @@ export PATH=$GOPATH/bin:$PATH
|
|||
`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