首页 > 解决方案 > P4Python 不会在 Perforce 中签出文件

问题描述

我有以下代码。我正在尝试从 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)将文件放在默认更改列表中时。它真的让我很紧张。我不知道我这样做是错误的。还创建了更改列表。我在 Windows 上使用 python 3.7 32 位

标签: python-3.7perforcep4python

解决方案


您的脚本会丢弃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正在运行的命令的结果。基于 ap4 edit打开文件的事实,我希望您会找到这样的消息:

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

和命令不是同义词p4 addp4 edit一种用于添加新文件,一种用于编辑现有文件。如果您的脚本正在编辑现有文件,它应该调用run_edit,而不是run_add.


推荐阅读