Всем привет.
Сегодня наткнулся на интересный способ для автоматического добавления файлов на редакторивание в perforce, пришлось править, и потому решил сразу написать для себя и будущих поколений небольшую подсказку-памятку.
Задача очень простая. В депоте хранится клиент в распакованном виде, т.е. так как он будет лежать на машине у пользователей. При сборке новой версии нужно переписывать измененные файлы, добавлять новые, и, по-возможности, удалять старые.
Как раз третий шаг у нас и не выполнялся. Итак, что было?
Сборка шла по следующим шагам:
- Удаление локальной версии;
- Копирование на ее место новой, только собранной версии клиента;
- Добавление на чекаут измененных файлов;
- Добавление новых файлов;
- Коммит изменений на сервер.
Недолго думая я решил, что после чекаута измененных файлов необходимо вставить код, который будет удалять в депоте файлы, отсутствующие локально. Вроде все просто. Добавил команду, между 3 и 4 шагами, и... обломался. Не было удалено ни одного файла, хотя пару кандидатов на примете у меня было.
Причина оказалась банальна. На 3 шаге был вот такой вот код:
p4 edit \\depot\client\...
p4 revert -a -c
Т.е. сначала на редактирование брались тупо все файлы, а потом делался реверт тех файлов, которые не были изменены. Особенность perforce (да наверное и любой другой системы контроля версий ) такова, что при реверте локальный файл восстанавливается. Другими словами, даже если в сборке и не хватало файлов, то после этой команды они восстанавливались из депота и мой шаг по удалению ничего не находил.
Вот эту штуку и пришлось править. В perforce есть хорошая команда, которая позволяет отобрать уже только измененные файлы и взять на редактирование только их. Она же позволяет находить файлы, которые нужно удалить в депоте.
После небольшой правки скипт стал выглядеть примерно так:
echo "DELETE MISSED FILES"
p4 diff -sd \\depot\client\... | p4 -x - delete
echo "CHECKOUT CHANGED FILES"
p4 diff -se \\depot\client\... | p4 -x - edit
echo "ADD NEW FILES IN PERFORCE"
cd /d D:/p4/client
dir /b /s /a-d | p4 -x - add -f
Все просто и наглядно.
Ну а потом делаем коммит на сервер. Референс на все команды perforce можно глянуть тут: http://www.perforce.com/perforce/doc.current/manuals/cmdref/index.html
Всем доброй ночи.
хм, интересное дело... у меня была похожая задача, правда скрипт обновления был на питоне. В итоге получал сперва список файлов, локально удалял всё, подкладывал новую версию, получал опять список файлов. Потом конвертил оба списка в множества и считал их пересечение/разности.
ОтветитьУдалить