P4 Python не проверяет файл в Perforce - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть следующий кусок кода. Я пытаюсь проверить два файла от Perforce и поместить их в список изменений. Но run_add не проверяет файлы. Единственное, что я вижу в Perforce - это пустой список изменений без файлов в нем.

""" Checks out files from workspace using P4"""
files = ['analyse-location.cfg', 'CMakeLists.txt']
p4 = P4()

# Connect and disconnect
if (p4.connected()):
    p4.disconnect()

p4.port = portp4
p4.user = usernameP4
p4.password = passwordP4
p4.client = clientP4
try:
    p4.connect()
    if p4.connected():
        change = p4.fetch_change()
        change['Description'] = "Auto"
        change['Files'] = []
        changeList = p4.save_change(change)[0].split()[1]

        for items in files:
            abs_path = script_dir + "\\" + items
            p4.run_add("-c", changeList, items)
            print("Adding file "+ abs_path + " to "+ changeList)

    # Done! Disconnect!
    p4.disconnect()

except P4Exception:
    print("Something went wrong in P4 connection. The errors are: ")
    for e in p4.errors:
        print(e)
    p4.disconnect()

Однако, когда я вместо этого p4.run("edit", items) помещает файлы в список изменений по умолчанию. Это действительно действует мне на нервы. Я не знаю, что я делаю это неправильно. Список изменений также создан. Я использую python 3,7 32 бит на Windows

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Ваш скрипт отбрасывает вывод вызова run_add. Попробуйте изменить это:

    for items in files:
        abs_path = script_dir + "\\" + items
        p4.run_add("-c", changeList, items)
        print("Adding file "+ abs_path + " to "+ changeList)

на:

    for items in files:
        abs_path = script_dir + "\\" + items
        output = p4.run_add("-c", changeList, items)
        print("Adding file "+ abs_path + " to "+ changeList)
        if output:
            print(output)

if p4.errors:
    print(p4.errors)
if p4.warnings:
    print(p4.warnings)

Это покажет вам результаты команд p4 add, которые вы выполняете. Основываясь на том факте, что p4 edit открывает файлы, я ожидаю, что вы найдете следующее сообщение:

C:\Perforce\test>p4 add foo
//stream/main/foo - can't add existing file

Команды p4 add и p4 edit не являются синонимами; один для добавления нового файла, один для редактирования существующего файла. Если ваш скрипт редактирует существующие файлы, он должен вызывать run_edit, а не run_add.

0 голосов
/ 21 февраля 2020

Я изменил свой вопрос на следующий, и он сработал.

p4.port = portp4
p4.user = usernameP4
p4.password = passwordP4
p4.client = clientP4

try:
    p4.connect()
    if p4.connected():
        change = p4.fetch_change()
        change['Description'] = "Auto"
        change['Files'] = []
        changeList = p4.save_change(change)[0].split()[1]

        for items in files:
            abs_path = script_dir + "\\" + items
            output = p4.run_edit("-c", changeList, items)
            print("Adding file "+ abs_path + " to "+ changeList)
            if output:
                print(output)

    if p4.errors:
        print(p4.errors)
    if p4.warnings:
        print(p4.warnings)

    p4.disconnect()
except P4Exception:
    print("Something went wrong in P4 connection. The errors are: ")
    for e in p4.errors:
        print(e)
    p4.disconnect()

Спасибо @Sam Stafford за подсказку. Теперь это работает как шарм. Ключ должен был изменить p4.run_add("-c", changelist, items) на p4.run_edit("-c", changelist, items)

...