Добрый вечер!
Я рад вам сообщить о ряде улучшений, касающихся подпроекта Codeforces::Тренировки. При подготовке соревнований в данном разделе многие сталкивались со следующей проблемой: для добавления задачи или внесения небольшой правки в существующую тренировку было необходимо распарсить и пересобрать всё соревнование в Wizard'е с нуля. Другим вариантом было ручное редактирование файлов на FTP. Оба этих способа создавали дополнительные необоснованные трудности.
Сейчас в Wizard'е появилась возможность создавать патчи для соревнования. Хотите добавить задачу? Не нужно пересобирать весь контест. Обновить результаты, добавить ресурсы, условия? Нет ничего проще. Достаточно запустить Wizard в режиме редактирования и внести лишь те изменения, которые действительно необходимы. Wizard соберёт пакет contest.zip и пометит его как патч. Закачка пакета в Taskbook происходит обычным образом.
Рассмотрим подробнее, каким образом патч обновляет соревнование.
Задача из патча полностью заменяет существующую задачу соревнования с таким же индексом, иначе добавляется как новая задача. Задачи из sandbox'а соревнования, не присутствующие в патче, остаются неизменными. Для добавления задач в соревнование необходимо запустить Wizard, создать и распарсить одну или несколько задач и собрать пакет.
Таким же образом заменяются условия и ресурсы соревнования. Условие замещает существующее для этого языка независимо от имени файла, ресурс заменяет существующий при совпадении имён файлов, иначе добавляется новый.
Сведения о положении призрачных участников (contest.dat) заменяют существующие, если в новых содержится информация хотя бы об одной посылке. Если посылок нет и задачи патча являются подмножеством уже существующих задач соревнования (в sandbox'е), то contest.dat остаётся неизменным. В противном случае сгенерируется новый contest.dat (без посылок) с объединением множества задач соревнования и патча. Для обновления результатов призрачных участников необходимо распарсить новые результаты в Wizard'е, пропустить все задачи, нажав кнопку Skip problem, и собрать пакет.
Применение патча предполагает, что данные патча и текущее состояние sandbox'а являются консистентными. Для этого и патч, и sandbox подвергаются валидации, аналогичной той, что происходит при обновлении тренировки, но немного упрощённой (при закачке полного пакета соревнования подобной валидации не происходит, архив распаковывается "as is" и проверяется только при выпуске релиза контеста). Лишь в случае успешного завершения обеих валидаций происходит применение патча. В противном случае патч просто удаляется, а в error.log тренировки добавляется запись, из которой вы можете узнать, что же всё-таки пошло не так.
Улучшения коснулись и Taskbook'а, а именно системы валидации: если задача не менялась с момента последнего релиза соревнования, то её валидация производиться не будет. Это значительно ускорит процесс обновления тренировки в случае небольших правок. Если же ни один файл тренировки не менялся, то обновления в принципе не произойдёт, а пользователю будет показано соответствующее сообщение.
В качестве небольшого бонуса мы сделали много улучшений в интерфейсе Wizard'а. В частности, для большинства действий появились горячие клавиши (подробнее во всплывающих подсказках к кнопкам), также были усовершенствованы многие диалоги:
Ускорен запуск диалога выбора множества файлов в операционной системе Windows засчёт сокрытия элемента Network. Элемент можно вернуть, нажав специальную кнопку.
Добавлена кнопка, позволяющая сохранить contest.dat, не собирая полный пакет.
Изменён механизм запуска диалогов выбора и сохранения файлов. Это почти не повлияло на внешний вид, однако позволило добавить ряд усовершенствований, таких, как установка имени файла по-умолчанию и сохранение текущего каталога при последующих использованиях диалога.
В случае неудачи сохранения пакета соревнования пользователю будет предложено попробовать сделать это ещё раз. Не нужно будет заново валидировать соревнование и собирать пакет.
Полный текст и комментарии »