Как я могу проверить файл из списка изменений на сервере perforce, используя Perforce Python API (p4python)

Первоначально я пытаюсь реализовать настраиваемый линтер на основе Python, чтобы помочь мне с лексическим анализом кода. Этот линтер требует, чтобы я указал каталог, в котором находятся скрипты или файлы кода (которые нужно было проанализировать). Исходный код (который нужно было проанализировать) присутствует на сервере perforce.

То, что я хочу сделать, это иметь возможность получить все файлы, отложенные пользователем на принудительной основе. Как я могу использовать номер списка изменений, чтобы получить эти отложенные файлы с сервера perforce на мой локальный компьютер, и я хочу сделать это в своем приложении на основе python, предпочтительно с использованием API p4python.

Вся помощь приветствуется. Спасибо


person Tayyab Tahir    schedule 05.06.2020    source источник


Ответы (1)


Есть два варианта получения файлов из отложенного списка изменений; один из них прост, но требует управления более постоянным состоянием на сервере, а другой более не имеет состояния, но требует большей логики на стороне клиента.


Стандартный рабочий процесс (т. е. то, что сделали бы большинство пользователей Perforce) заключается в том, чтобы извлечь файлы из полки в рабочее пространство клиента:

p4 unshelve -s CHANGE

Файлы в отложенном списке изменений будут автоматически синхронизированы с вашей рабочей областью (в соответствии с вашим представлением клиента) и открыты в вашем списке изменений по умолчанию. Это простой вариант, потому что вам просто нужно запустить эту одну команду, чтобы все файлы были в предопределенном локальном расположении. Оттуда вы можете свободно изменять их и либо отправлять, либо переносить в другой список изменений (или в тот же список изменений, если вы изменяете его, чтобы сделать себя владельцем).

Для этого требуется, чтобы у вас уже было настроено рабочее пространство и чтобы файлы там еще не были открыты, поэтому, если вы делаете это в сценарии, сценарий необходимо заранее настроить с подходящим рабочим пространством, и ему потребуется чтобы убедиться, что в какой-то момент он либо отправит, либо отменит изменения, или ему нужно будет знать, как создать собственное рабочее пространство, запустив p4 client, выбрав уникальный корень клиента и т. д.


Вариант без сохранения состояния — использовать p4 print для получения содержимого отложенного списка изменений:

p4 print @=CHANGE

Это приведет к потоковой передаче файлов на стандартный вывод, а заголовки между ними будут указывать путь к хранилищу. Если ваш линтер может обрабатывать потоковые данные, это может быть простым вариантом; если ему нужно прочитать файлы с диска, вам придется реализовать логику, необходимую для размещения файлов в подходящем месте, и очистить их, когда вы закончите.


Перевод любого из вышеперечисленного на p4python довольно прост (я бы попытался сделать пример кода, но установщик p4python в настоящее время не работает в Windows, поэтому я некоторое время не мог использовать p4python), но я рекомендую сначала ознакомьтесь с приведенными выше командами на терминале в тестовой среде, чтобы вы могли лучше понять интерфейс и требования к настройке рабочей области, аутентификации и т. д., прежде чем реализовывать эту логику в сценарии.

person Samwise    schedule 05.06.2020