Как мне проверить файл из Perforce в Python? - PullRequest
15 голосов
/ 08 октября 2008

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

Ответы [ 6 ]

20 голосов
/ 08 октября 2008

Perforce имеет оболочки Python для своих инструментов C / C ++, доступные в двоичном виде для Windows и исходные коды для других платформ:

http://www.perforce.com/perforce/loadsupp.html#api

Вы найдете полезную документацию по API сценариев:

http://www.perforce.com/perforce/doc.current/manuals/p4script/p4script.pdf

Использование Python API очень похоже на клиент командной строки:

PythonWin 2.5.1 (r251:54863, May  1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)] on win32.
Portions Copyright 1994-2006 Mark Hammond - see 'Help/About PythonWin' for further copyright information.
>>> import P4
>>> p4 = P4.P4()
>>> p4.connect() # connect to the default server, with the default clientspec
>>> desc = {"Description": "My new changelist description",
...         "Change": "new"
...         }
>>> p4.input = desc
>>> p4.run("changelist", "-i")
['Change 2579505 created.']
>>> 

Я проверю это из командной строки:

P:\>p4 changelist -o 2579505
# A Perforce Change Specification.
#
#  Change:      The change number. 'new' on a new changelist.
#  Date:        The date this specification was last modified.
#  Client:      The client on which the changelist was created.  Read-only.
#  User:        The user who created the changelist.
#  Status:      Either 'pending' or 'submitted'. Read-only.
#  Description: Comments about the changelist.  Required.
#  Jobs:        What opened jobs are to be closed by this changelist.
#               You may delete jobs from this list.  (New changelists only.)
#  Files:       What opened files from the default changelist are to be added
#               to this changelist.  You may delete files from this list.
#               (New changelists only.)

Change: 2579505

Date:   2008/10/08 13:57:02

Client: MYCOMPUTER-DT

User:   myusername

Status: pending

Description:
        My new changelist description
7 голосов
/ 08 октября 2008

Вот что я придумал:

import os

def CreateNewChangeList(description):
    "Create a new changelist and returns the changelist number as a string"
    p4in, p4out = os.popen2("p4 changelist -i")
    p4in.write("change: new\n")
    p4in.write("description: " + description)
    p4in.close()
    changelist = p4out.readline().split()[1]
    return changelist

def OpenFileForEdit(file, changelist = ""):
    "Open a file for edit, if a changelist is passed in then open it in that list"
    cmd = "p4 edit "
    if changelist:
        cmd += " -c " + changelist + " "
    ret = os.popen(cmd + file).readline().strip()
    if not ret.endswith("opened for edit"):
        print "Couldn't open", file, "for edit:"
        print ret
        raise ValueError
4 голосов
/ 02 ноября 2008

Модуль Pcece P4 для Perforce , упомянутый в другом ответе, - это путь, но если установка этого модуля не вариант, вы можете использовать флаг -G, чтобы помочь разобрать вывод p4.exe:

p4 [ options ] command [ arg ... ]
    options:
            -c client -C charset -d dir -H host -G -L language
            -p port -P pass -s -Q charset -u user -x file
    The -G flag causes all output (and batch input for form commands
    with -i) to be formatted as marshalled Python dictionary objects.
3 голосов
/ 21 ноября 2008

Сборка из исходного кода p4python требует загрузки и извлечения API p4, рекомендованного для этой версии. Например, при сборке Windows XP x86 версии P4Python 2008.2 для activepython 2.5:

  • скачайте и распакуйте оба p4python и p4api
  • исправьте файл setup.cfg для p4python в укажите на каталог p4api.

Чтобы открыть файлы для редактирования (выполните извлечение), в командной строке см. «P4 help open».

Вы можете извлекать файлы, не создавая список изменений, если добавляете файл в список изменений по умолчанию, но рекомендуется сначала создать список изменений.

P4Python в настоящее время не компилируется для activepython 2.6 без visual studio 2008; предоставленные библиотеки собраны с 2005 или 2003 года. Заставить p4python собрать против mingw практически невозможно, даже с pexports файла python26.dll и перекомпоновкой / повторной сборкой предоставленных файлов .lib в файлы .a.

В этом случае вы, скорее всего, будете использовать подпроцесс и возвращать результаты p4 как маршаллированные объекты python. Вы можете написать свою собственную командную оболочку, которая принимает массив arg, создает и запускает команды и возвращает словарь результатов.

Вы можете попробовать все изменить, протестировать и в случае успеха открыть файлы, которые отличаются чем-то, эквивалентным 'p4 diff -se //...'

2 голосов
/ 22 ноября 2010

Помните, ребята, чтобы установить пакет разработки для Python для p4api или он будет жаловаться на отсутствие заголовков. В Ubuntu 10.10 просто выполните:

apt-get install python2.6-dev

Или

apt-get install python3.1-dev
2 голосов
/ 08 октября 2008

Вы можете проверить модуль P4Python. Он доступен на сайте исполнителей и делает все очень просто.

...