Perforce - создание и редактирование списка изменений - PullRequest
0 голосов
/ 30 ноября 2018

Моя цель - автоматически создать список изменений.Я делаю это, выполняя некоторые команды редактирования и отправляя список изменений в конце последовательности кода.

Я выполняю все свои команды в следующем порядке:

//Open all files in folder for edit in default changelist
p4.run(("edit", Folder + "..."))

//Move all files from default changelist to new changelist
changespec = p4.fetch_change()
changespec["Description"] = "test"
p4.save_change(changespec)

//Get changelist number
ChangeListNum = p4.run(("changes", "-m1", Folder + "..."))[0]['change']

//Run checks on files before submitting
p4.run("reconcile", "-a", "-c", ChangeListNum, Folder + "...")
p4.run("resolve", "-at", "-c", ChangeListNum, Folder + "...")
p4.run("revert", "-a", "-c", ChangeListNum, Folder + "...")

//Submit change list
p4.run("submit", "-c", ChangeListNum, "-f", "revertunchanged")

Теперь,во время моих проверок и отправки мой регистратор сообщает об этой ошибке:

«Изменение #CL_Number уже зафиксировано».

Я уверен, что это связано с микшированием P4Pythonфункции, такие как p4.fetch_change() и p4.run().Я не уверен, как решить эту проблему, но ниже приведено одно решение, которое я попробовал.

Я попытался изменить блок кода:

changespec = p4.fetch_change()
changespec["Description"] = "test"
self.p4.save_change(changespec)

на этот:

p4.run("change", "-i", "<", "P4ChangeList.txt")

Эта команда читает в списке изменений txt, который я сделал, и создает новыйсписок изменений с этими параметрами.Однако он работает только в cmd, а не в команде python.

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 01 декабря 2018

Проблема со сценарием заключается в том, что эта команда:

//Get changelist number
ChangeListNum = p4.run(("changes", "-m1", Folder + "..."))[0]['change']

даст вам самое последнее отправленное изменение, поскольку вы указали спецификацию файла (то есть выходные данные ограничены списками изменений с отправлено ревизий, соответствующих этой спецификации).

Даже если оставить это в стороне, структурирование скрипта таким образом оставляет вас уязвимым для состояния гонки, когда другой пользователь может создать список изменений между ними, когда вы создаете свой икогда вы запускаете этот запрос.Вместо этого вам нужно было бы захватить номер списка изменений во время его сохранения (другому пользователю не будет позволено «украсть» ваш номер изменения, так что это на 100% безопасно от такого рода гонки).

Но, оставив ЭТО в стороне, ваш сценарий делает что-то очень сложное из чего-то очень простого, то есть «передает файлы, которые я изменил» - поскольку сценарий не изменяет сами файлы, я полагаю, выуже отредактировал файлы перед запуском.Выкиньте весь сценарий и замените его следующим:

# Open all changed files in the default changelist.
p4.run_reconcile(Folder + "...")
# Submit the default changelist.
p4.run_submit("-d", "test")

и все готово!

...