2008-10-08 3 views
14

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

+0

Я помещаю это здесь, так что я могу найти его в будущем :) – 2008-10-08 18:35:21

+1

Цена @ Matt - Я считаю, что это то, что любимый вопрос особенность для :). – swilliams 2008-10-08 20:04:11

ответ

20

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

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

Вы найдете их документации сценариев API, чтобы быть полезным:

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

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

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

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

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 
2

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

4

Perforce's P4 Python module упоминалось в другой ответ является путь, но при установке этого модуля не вариант вы можете использовать флаг -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

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

  • скачать и извлечь как в p4python и p4api
  • FixUp в setup.cfg для p4python до точки в каталог p4api.

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

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

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

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

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

2

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

apt-get install python2.6-dev 

Или

apt-get install python3.1-dev