p4python создать и отправить новый файл

Как создать и отправить новый файл с помощью p4python?

create_and_submit_file(full_path_in_depot, new_file_text_content):
    logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
    p4 = get_p4() # implemented
    try:  # Catch exceptions with try/except
        connect_and_login_p4(p4) # implemented

        # .. implementation here .. p4.some_call() 

        LOGGER.info('done')
    except P4Exception:
        for e in p4.errors:  # Display errors
            LOGGER.error(e)

person user2809176    schedule 02.12.2019    source источник


Ответы (1)


Если файл уже существует в локальной файловой системе в рабочей области, все, что вам нужно сделать, это p4.run_add(file) и p4.run_submit('-d', 'this is my awesome file').

Если файл не существует, вам нужно его создать, а если у вас нет рабочего пространства, вам нужно его создать. Для краткости, вот как вы бы сделали это из командной строки полностью с нуля (это напрямую отображается на P4Python, но я недостаточно знаю о вашей среде, чтобы дать вам код, который будет работать из коробки, поэтому Я не буду пытаться переводить):

echo "my awesome file content" > my_awesome_file
p4 set P4CLIENT=my_awesome_client
p4 --field "View=//depot/... //my_awesome_client/..." client -o | p4 client -i
p4 add my_awesome_file
p4 submit -d "this is my awesome file"

Посмотрите пример для p4.save_client, чтобы увидеть простой пример того, как вы можете создать / изменить спецификацию клиента с помощью P4Python и изменить поля в соответствии с вашей средой (аналогично тому, как я использовал флаг --field для установки View, чтобы корень my_awesome_client соответствует //depot/...):

https://www.perforce.com/perforce/r14.2/manuals/p4script/python.p4.html#python.p4.save_spectype

person Samwise    schedule 02.12.2019
comment
Спасибо за ответ! Теперь у меня проблемы с [Предупреждение]: «C: \\ FilePath \\ file.txt - файл (ы) не на клиенте». Вид клиента не всегда обновляется локально. Вы знаете, где ядро ​​спирали хранит исходную спецификацию? - person user2809176; 08.12.2019
comment
Он хранится на сервере. Вам нужно позвонить p4 client (или p4 client -i или p4.save_client), чтобы обновить спецификацию клиента; не существует такой вещи, как локальная копия представления клиента. - person Samwise; 08.12.2019
comment
Обратите внимание, что при типичном использовании вы не создаете / не обновляете спецификацию клиента каждый раз, когда добавляете файл! Обычно у вас есть только одна спецификация клиента для каждой рабочей области, определите ее один раз, а затем используйте эту спецификацию клиента для каждой операции в этой рабочей области. Поскольку я не знаю более широкого контекста того, что делает ваш инструмент, я не уверен, насколько это имеет смысл. - person Samwise; 08.12.2019
comment
Я пишу сервер для создания текстовых файлов в ядре спирали. Хотел создать клиента для каждого запроса пользователя с просмотром именно запрошенной папки с файлами - чтобы избежать синхронизации всего хранилища. Не могу решить, как создать потокового клиента с различными отображениями (только необходимые папки). Но после того, как я изменил представление, чтобы сопоставить весь поток с корнем клиента, он начал работать правильно. - person user2809176; 08.12.2019