Bug 6268

Summary: Откатывать патч из всех репозиториев, если он не приложился хотя бы в один из них
Product: [Свободные проекты (Open source projects)] WINE-tests Reporter: Виталий Перов <vitperov>
Component: ОбщееAssignee: Виталий Перов <vitperov>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: baraka, lav
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 6467    
Bug Blocks: 6264    

Description Виталий Перов 2010-10-22 16:30:42 MSD
Сейчас в функции apply_with_tests() присутствует небольшая ошибка:

Допустим патч должен быть приложен в 2 репозитория.
В первый репозиторий он проходит.
Во второй репозиторий он не проходит.
При этом автору посылается сообщение о том, что патч провалился, и ни один репозиторий не публикуется.

Проблема в том, что в первый репозиторий он приложен, но не опубликован.
Следующий патч может приложится и опубликовать изменения.
Таким образом патч вроде отвергается, но на самом деле прикладывается.

Насколько мне известно, с помощью команд гита нельзя откатится до удалённого репозитория.
Возможно проблема может решится созданием временной ветки. В конце ветка в любом случае удаляется, но если патч был приложен, то перед удалением ветки мержатся с главной
Comment 1 Виталий Перов 2010-11-03 18:02:24 MSK
Реализовал добавление и удаление временной ветки.
Пока не понятно как её мержить (для сохранения результата)
Comment 2 Виталий Перов 2010-11-03 18:13:18 MSK
Проверил через gitk. Создаётся реальная ветка.

После её удаления (через скрипт) ветка исчезает не оставляя никаких следов.

Мержить можно непосредственно через комманду git.
Проблема только в том, что надо знать название ветки в которую мержить.
Comment 3 Виталий Перов 2010-11-08 15:38:45 MSK
Разобрался. Имя ветки можно получать с помощью:
 this_name = self.head.reference.name
 master_name = self.master_branch.name

Реализовал мерж временной ветки.
Надо проверить работает ли это и как результат отражается на дереве git
Comment 4 Виталий Перов 2010-11-08 16:31:01 MSK
Локально протестировал при указании одного репозитория.
Сделал патч.
Можно тестировать на реальных патчах
Comment 5 Виталий Перов 2010-11-10 15:53:01 MSK
Встретил новую проблему:
Если возникает исключение в момент тестирования, то временная ветка tmp не удаляется.
При этом возникает исключение при попытке создать уже существующую ветку tmp.

Пока вижу 2 возможных решения:
1)Принудительно удалять ветку tmp при создании
2)Корректно обрабатывать исключения при запуске тестов. Заодно можно будет посылать лог с бактрейсом автору письма.
Comment 6 Виталий Перов 2010-11-10 15:58:18 MSK
Для воспроизведения проблемы можно добавить заведомо неработающий код в функцию helper.py: run_with_log().
При первом запуске возникает исключение, связанное с неработающим кодом
При втором запуске появится ошибка повторного создания ветки tmp
Comment 7 Виталий Перов 2010-11-15 15:44:44 MSK
Думаю сначала нужно решить багу 6467. При при возникновении падения ветка tmp сама должна удаляться.
Comment 8 Виталий Перов 2010-11-15 17:42:57 MSK
Нашёл ещё одну ошибку:
Ветка tmp не удаляется даже, если исключения не было. Текущей веткой выбирается master, но удаления почему-то не происходит.
Comment 9 Виталий Перов 2010-11-15 19:06:58 MSK
(In reply to comment #8)
> Нашёл ещё одну ошибку:
> Ветка tmp не удаляется даже, если исключения не было. Текущей веткой
> выбирается master, но удаления почему-то не происходит.
> 
Исправлено
Comment 10 Виталий Перов 2011-01-28 12:16:09 MSK
Реализовано. Теперь патчи прикладываются к временной ветке tmp. Если возникли проблемы с одним из репозиториев, то все временные ветки уничтожаются.