Bug 6656

Summary: Ошибка при создании ветки после неудачного завершения
Product: [Свободные проекты (Open source projects)] WINE-tests Reporter: Александр Морозов <amorozov>
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:    
Bug Blocks: 6264    
Attachments: Письмо с ошибкой "Cannot allocate memory"
Письмо с ошибкой создания ветки

Description Александр Морозов 2010-12-17 18:13:06 MSK
После неудачного завершения скрипта из-за того, что на builder закончилась память, патчи не прикладываются:
GitCommandError: 'git branch tmp HEAD' returned exit status 128: fatal: A branch named 'tmp' already exists.
Comment 1 Vitaly Lipatov 2010-12-17 18:15:05 MSK
Видимо, стоит добавить код удаления ветки tmp, если она есть.
Comment 2 Александр Морозов 2010-12-17 18:15:27 MSK
Created attachment 2055 [details]
Письмо с ошибкой "Cannot allocate memory"
Comment 3 Александр Морозов 2010-12-17 18:16:28 MSK
Created attachment 2056 [details]
Письмо с ошибкой создания ветки
Comment 4 Виталий Перов 2010-12-20 16:34:52 MSK
Прошу прощения за задержку.
Ко вторнику постараюсь исправить.
Comment 5 Виталий Перов 2010-12-21 13:51:00 MSK
В качестве временного решения удалил ветку tmp из локального репозитория 1.0.12
Comment 6 Виталий Перов 2011-01-12 17:30:43 MSK
Появились дополнительные сложности.
Сначала делается git pull, а уже потом для каждого патча создаётся отдельная ветка tmp.

Если же после неудачного завершения ветка tmp остаётся, то pull делается именно в эту временную ветку.

Т.е проверять наличие ветки tmp надо перед git pull
Comment 7 Виталий Перов 2011-01-12 17:47:46 MSK
(В ответ на comment #6)
> Т.е проверять наличие ветки tmp надо перед git pull

Так тоже не получается. Для того, чтобы удалить ветку tmp, надо из неё переключиться на другую ветку. А на какую ветку конктретно переключаться - не известно, в разных репозиториях она называется по-разному.
А хранить название master-ветки для каждого репозитория в настройках скрипта как-то не хочется.
Comment 8 Vitaly Lipatov 2011-01-12 18:24:33 MSK
(В ответ на comment #7)
...
> переключиться на другую ветку. А на какую ветку конктретно переключаться - не
> известно, в разных репозиториях она называется по-разному.
Нет ничего сложного перед созданием ветки tmp запоминать, где же мы были.
Comment 9 Виталий Перов 2011-01-12 20:25:27 MSK
(В ответ на comment #8)
> Нет ничего сложного перед созданием ветки tmp запоминать, где же мы были.
Так оно и делается, при применении патча:
запоминается текущая ветка -> переключаемся на tmp -> переключаемся обратно и удаляем tmp

При нормальной работе скрипта так и происходит, и tmp удаляется.
Проблема возникает когда tmp не удалилась.
А вот при повторном запуске скрипта совсем не ясно какая ветка была до переключения в tmp
Comment 10 Александр Морозов 2011-01-12 20:38:36 MSK
> При нормальной работе скрипта так и происходит, и tmp удаляется.
> Проблема возникает когда tmp не удалилась.

Может, если она есть, не удалять её, а делать в ней git reset --hard origin/нужная_ветка
Comment 11 Виталий Перов 2011-01-12 22:27:18 MSK
(В ответ на comment #10)
> Может, если она есть, не удалять её, а делать в ней git reset --hard
> origin/нужная_ветка

В том то и проблема, что нужно узнать эту "нужная_ветка".
Видимо придётся хранить в настройках скрипта это значение для каждого репозитория. Другого пути нет.
Comment 12 Александр Морозов 2011-01-12 22:52:58 MSK
> > Может, если она есть, не удалять её, а делать в ней git reset --hard
> > origin/нужная_ветка
> В том то и проблема, что нужно узнать эту "нужная_ветка".
Скрипт же узнаёт каким-то образом, к какой ветке должны быть приложены патчи.
Comment 13 Виталий Перов 2011-01-12 22:59:37 MSK
> Скрипт же узнаёт каким-то образом, к какой ветке должны быть приложены патчи.
Он каждый раз прикладывает к текущей ветке.
А текущая ветка задаётся вручную после начального клонирования репозитория.
Т.е если скрипт не вернулся после выполнения в нужную ветку, то имя нужной ветки он уже не узнает, оно нигде не хранится.
Comment 14 Виталий Перов 2011-01-14 20:00:26 MSK
Исправил.
Теперь имя нужной ветки берётся из файла настроек.
Проверил локально - работает.
Comment 15 Виталий Перов 2011-01-14 20:00:49 MSK
Решена
Comment 16 Виталий Перов 2011-01-19 14:56:49 MSK
При тестировании на реальном репозитории выявились проблемы.

переключение веток с помощью модуля git-python выполняется с помощью команды
self.head.reference = self.heads.новая_ветка

В случае с eter-1.0.12 выполняется команда:
self.head.reference = self.heads.eter-1.0.12,
что и приводит к падению
Comment 17 Виталий Перов 2011-01-19 16:12:59 MSK
Исправил
Comment 18 Виталий Перов 2011-01-19 18:25:57 MSK
Исправил проблему при публикации репозитория (использовалась несуществующая переменная с названием ветки, что приводило к падению)
Comment 19 Виталий Перов 2011-01-28 12:07:23 MSK
Бага больше не появлялась. Думаю багу можно считать исправленной