Различия между версиями 11 и 12
Версия 11 от 2023-03-06 19:48:30
Размер: 8158
Редактор: hbd
Комментарий:
Версия 12 от 2023-05-27 22:10:07
Размер: 8171
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 38: Строка 38:
== Д/З ==

03.06 Git: трёхстороннее слияние; приложения с командной строкой

Напоминание: все работы ведутся на ветке ⑂ work:

  • git clone репозиторий -b work

Трёхстороннее слияние

  • Повторение: интерференция коммитов в git
    • diff3 и ему подобные

    • ручное вмешательство при merge или rebase (правка, коммит, continue) — или abort

    • формат 3way diff файла
  • B) упражнение из лекции: merge интерферирующих веток, разрешение конфликтов:

    • Создаём общий коммит — длинный файл
    • Создаём ветку second

    • (⑂ work) Делаем коммит — изменения начала и середины файла

    • (⑂ second) Делаем коммит — середины (в том же месте) и конца файла

    • ( /!\ отличие от лекции) Мержим second в work

  • Использование mergetool (kdiff3 / [g]vimdiff / …)

    • Удалим merge commit — ветки снова можно мержить или ребейзить!
    • {i} упражнение: rebase интерферирующих веток c kdiff3, gvimdiff или meld

      • Rebase ⑂ second поверх ⑂ work

Создание приложения с командной строкой

  • cmd

    • принцип организации:
      • do_*()

      • complete_*()

      • docstring-и и help_*()

    • {OK} TODO пример do_()

    • {i} Сделать командную строку для TextCalendar

      • Методы prmonth (два параметра) и pryear (один параметр)

      • как всегда, поможет shlex

      • Не забыть про Help (скопипастить ☺)
    • Принцип работы complete_*()

    • {OK} TODO пример

    • {i} Сделать подстановку для второго параметра команды prmonth

Д/З

<!> Задача_1: переход на cmd, разработка на ветке с конфликтом объединения

  • Скопируйте решение Задачи_1 с предыдущего занятия. Сделайте коммит.

  • Продолжите историю на ветке work:

  • Реорганизуйте уже имеющиеся команды с помощью cmd и do_команда()

    • При этом "из коробки" приедет автодополнение частично введенного имени команды по нажатию TAB
    • Решение оформить в виде серии коммитов
  • Реализуйте поддержку базовой команды attack (без параметров). Обработка команды:

    • Если в позиции, где находится игрок, нет монстра, вывести "No monster here" и завершить обработку команды

    • Атака наносит урон монстру в 10 очков здоровья, если у монстра не менее 10 о.з., в противном случае урон равен количеству о.з. монстра
    • Вывести: "Attacked <имя монстра>,  damage <урон> hp", где <имя монстра> - имя монстра в одной позиции с игроком (таких монстров ровно один), <урон> - число списанных о.з.

    • После корректировки здоровья монстра (как принято говорить, "отрицательного выздоровления") вывести:
      • если о.з. монстра равны 0: "<имя монстра> died"

      • в противном случае: "<имя монстра> now has <очки здоровья>", где <очки здоровья> - количество оставшихся о.з. у монстра

    • Если у монстра 0 о.з., удалить монстра с позиции
  • Далее последний коммит в реализации базовой команды attack обозначен как {1}

  • Создайте ветку weapon_name на базе коммита {1} и переключитесь на неё (проверьте!)

  • Реализуйте на ветке weapon_name атаку разными видами оружия, с указанием оружия в параметре with команды attack

    • синтаксис команды: attack with <имя оружия>

    • варианты для <имя оружия>: sword, spear, axe; наносимый урон, соответственно: 10, 15, 20

      • при указании неизвестного оружия выводить: "Unknown weapon", и завершать обработку команды

    • параметр with необязательный, значение по умолчанию: sword

    • для имени оружия должно работать автодополнение, а также пролистывание имен через TAB (используйте complete_команда())

    • если имя оружия указано правильно, продолжать обработку как для базовой команды attack, но с соответствующим оружию значением урона

  • Создайте ветку attack_by_name на базе коммита {1} и переключитесь на неё (проверьте!)

  • Реализуйте на ветке attack_by_name атаку с обязательным указанием имени монстра

    • синтаксис команды: attack <имя монстра>

    • если монстра с данным именем нет в позиции, где находится игрок, вывести "No <имя монстра> here" и завершить обработку команды

    • в противном случае (т.е. монстр с данным именем есть), продолжить обработку как для базовой команды attack

    • для имени монстра должно работать автодополнение, а также пролистывание имен через TAB (используйте complete_команда()); пролистываться должны имена ДОСТУПНЫХ В ИГРЕ монстров, т.е. тех, которые могут быть добавлены через команду addmon

  • сделайте merge ветки weapon_name на ветку work, он будет бесконфликтным (т.к. на work история не продвинулась дальше {1} )

  • сделайте merge ветки attack_by_name на ветку work, при этом разрешите конфликты из-за разных доработок команды attack

    • в результате должна появиться поддержка команды с синтаксисом "attack <имя монстра> with <имя оружия>", с поддержкой автодополнения и пролистывания как по имени монстра, так и по имени оружия

LecturesCMC/PythonDevelopment2023/Prac/04_MergetoolCommandline (последним исправлял пользователь FrBrGeorge 2023-05-27 22:10:07)