- Все присланные файлы не имеют синтаксических ошибок.
- Предоставленные в задании тесты проходят без их изменений при запуске команды
pytest
.
- Попытка является "разумной" (смотри выше)
- Команда
flake8 --max-line-length=100
(с установленнымиpep8-naming
иflake8-quotes
) не выдаёт ошибок ни в одном из файлов. - Команда
pylint --max-line-length=100 --disable=invalid-name,missing-docstring,global-statement,too-many-lines,R --enable=simplifiable-if-statement,redefined-variable-type
не выдаёт ошибок ни в одном из файлов. Это требование можно ослабить, если вы предоставите практику пример, где это команда выдаёт неразумную, на ваш взгляд, рекомендацию. - Команда
mypy --ignore-missing-imports
не выдаёт ошибок ни в одном из файлов. - Все ваши тесты запускаются командой
pytest
и проходят под Windows, Linux и Mac (используйте/
вместо\
для разделения папок в путях, а в Python можно использоватьpathlib
). - В качестве shebang в Python используется
#!/usr/bin/env python3
. - В неисполняемых файлах shebang отсутствует.
- Каждая содержательная команда в коде (не обработка ошибки и не вызов
main(sys.argv[1:])
должна вызываться хотя бы в одном тесте (неважно, юнит- или интеграционном). Проверяйте при помощиpytest-cov
. - Должны быть указаны типы всех параметров всех функций (кроме параметров тестов
test_*
) и типы их возвращаемых значений для командыmypy
. - Для каждой процедуры должен быть написан хотя бы один нетривиальный юнит-тест.
- Сделайте форк этого репозитория
*-tasks
. В дальнейшем вы будете работать с ним. - Склонируйте форк к себе на компьютер
$ git clone <your-fork-url>
- Выберите задание над которым вы собираетесь работать (если у вас уже был форк, сначала убедитесь, что вы на последней версии в ветке
master
по инструкции ниже):Конкретное название ветки указано в условии задания.$ git checkout -b <your-assignment-branch>
- Сделайте задание. Для этого перейдите в директорию с заданием и напишите свой код в предоставленных файлах. "Чистая история" очень рекомендуется, но по умолчанию она не требуется.
- Не должно быть коммитов, изменяющих какие-либо файлы, кроме явно указанных в задании, например, добавляющие папку
.idea
, файлы*.iml
или*.pyc
. Используйте.gitignore
в корне репозитория. - После того, как вы закоммитили все изменения, отправьте их на сервер.
- Для первой отправки ветки на сервер используйте команду:
$ git push -u origin <your-assignment-branch>
- В следующие используйте:
$ git push
- Для первой отправки ветки на сервер используйте команду:
- Создайте Pull Request в ветку
master
этого репозитория с нужным заголовком, указанным в условии задания.- В названии Pull Request не допускаются сокращения, перестановка слов, отсутствие запятой, пробелов, лишние пробелы, неверный регистр, написание имени транслитом, неверный порядок имени и фамилии.
- О том, как сделать Pull Request, написано здесь.
- Убедитесь, что
@yeputons-bot
добавил к вашему PR метки, соответствующие номеру задания, номеру группы, а такжеneeds-grading
и назначил review на вашего преподавателя.
- Не помечайте комментарии преподавателя как
Resolved
, если об этом нет явной договорённости. - При желании ответьте на замечания преподавателя индивидуально.
- Оставьте в PR отдельное сообщение, начинающееся со строчки
@yeputons-bot, исправлено.
- Убедитесь, что
@yeputons-bot
добавил к вашему PR меткуneeds-grading
и назначил review на вашего преподавателя.
- У вас уже должен быть форк и клон форка на комьютере. Если нет, то воспользуйтесь инструкцией выше.
- Переключитесь на ветку
master
.$ git checkout master
- Проверьте, что git настроен на синхронизацию с этим репозиторием:
Если вывод этой команды содержит
$ git remote -v
upstream https://github.com/yeputons/hse-2019-pb-tasks
, то пропустите следующий шаг (4). - Настройте git на синхронизацию с этим репозиторием:
$ git remote add upstream https://github.com/yeputons/hse-2019-pb-tasks
- Обновите свой форк:
$ git fetch upstream
- Сделайте так, чтобы ваша ветка
master
полностью совпадала с веткойmaster
из этого репозитория.Если это команда выдаёт ошибку, значит, вы как-то поменяли свою ветку$ git merge --ff-only upstream/master
master
и Pull Request гарантированно не будет чистым. - Выполните шаги, начиная с третьего, из инструкции выше.
Первым делом запустите команду git log --branches --graph --oneline --decorate
, которая
покажет полное состояние вашего репозитория.
Также сохраните куда-нибудь все файлы в состояниях untracked
, modifed
, staged
(все, кроме unmodified+committed
):
можно либо в отдельную папку, либо добавить их всех в staged
и сделать git stash
(см. главу 7.3 Инструменты Git - Прибережение и очистка).
- Скорее всего, вы увидите похожую картину:
* 64875a6 (HEAD -> task01-grep-solution, origin/task01-grep-solution) Add unit tests for process_file * bced7f9 Implement grep.py * 38c7441 (origin/task02-git-solution, task02-git-solution) largest_heads_run.py: minor reorder of computations * 8daaf24 largest_heads_run.py: get_max_run: simplify calculations * d145832 largest_heads_run.py: get rid of unnecessary variables * 6a15237 largest_heads_run.py: extract get_max_run(flips) function * 0e60d9b largest_heads_run.py: generate list of flips in advance * ada2229 largest_heads_run.py: simplify update of sum of runs * 6a69958 (origin/master, origin/HEAD, master) Merge pull request #84 from yeputons/fix-git-push |\ | * d62596e (origin/fix-git-push) common/README: add -u flag for the first 'git push' |/ * 159f19b .travis.yml: add python3-tk
- Убедитесь, что
HEAD
указывает на ветку, из которой вы делаете Pull Request. Назовём её<new-branch>
(в примере —task01-grep-solution
). Если это не так — переключитесь на эту ветку командойgit checkout <new-branch>
илиgit switch <new-branch>
. - Убедитесь, что
<new-branch>
растёт из веткиmaster
, и что в<new-branch>
есть все нужные коммиты. Лишние коммиты, скорее всего, будут в начале ветки и лежать в ветке<old-branch>
(в примере —task02-git-solution
), которая будет префиксом<new-branch>
. - Убедитесь, что в
master
последний коммит — не ваш, а из основного репозитория. - Теперь надо взять коммиты, лежащие в ветке
<new-branch>
, и не лежащие в ветке<old-branch>
, и перебазировать их поверхmaster
в ветку<new-branch>
. Это разбирается в 3.6 Ветвление в Git - Перебазирование, секция "более интересные перемещения". Есть два способа:git rebase --interactive master
и удалить строчки, соответствующие ненужным коммитам.git rebase --onto master <old-branch> <new-branch>
.
- После этого история должна выглядеть так:
* 165d1be (HEAD -> task01-grep-solution) Add unit tests for process_file * c009030 Implement grep.py | * 38c7441 (origin/task02-git-solution, task02-git-solution) largest_heads_run.py: minor reorder of computations | * 8daaf24 largest_heads_run.py: get_max_run: simplify calculations | * d145832 largest_heads_run.py: get rid of unnecessary variables | * 6a15237 largest_heads_run.py: extract get_max_run(flips) function | * 0e60d9b largest_heads_run.py: generate list of flips in advance | * ada2229 largest_heads_run.py: simplify update of sum of runs |/ * 6a69958 (origin/master, origin/HEAD, master) Merge pull request #84 from yeputons/fix-git-push |\ | * d62596e (origin/fix-git-push) common/README: add -u flag for the first 'git push' |/ * 159f19b .travis.yml: add python3-tk
- Теперь требуется запушить ветку
task01-grep-solution
. Это будет переписывание истории, так как мы стёрли из неё какие-то коммиты. Другими словами, она уже не является надмножествомorigin/task01-grep-solution
иfast-forward не сработает. Для переписывания истории вызовите командуgit push --force
.