15 Stimmen

Wie kann ich eine Datei aus Perforce in Python auschecken?

Ich möchte einige Skripte in Python schreiben, die einige automatische Änderungen am Quellcode vornehmen. Wenn das Skript feststellt, dass es die Datei ändern muss, möchte ich sie zunächst aus Perforce auschecken. Ich kümmere mich nicht um das Einchecken, weil ich immer zuerst bauen und testen möchte.

0 Stimmen

Ich stelle das hier rein, damit ich in Zukunft danach suchen kann :)

1 Stimmen

@Matt Price - Ich glaube, dafür ist die Funktion "Lieblingsfrage" gedacht :).

21voto

Troy J. Farrell Punkte 1232

Perforce bietet Python-Wrapper für seine C/C++-Tools an, die in binärer Form für Windows und als Quellcode für andere Plattformen verfügbar sind:

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

Die Dokumentation der Skripting-API ist sehr hilfreich:

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

Die Verwendung der Python-API ist dem Befehlszeilen-Client sehr ähnlich:

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.']
>>> 

Ich werde es über die Befehlszeile überprüfen:

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

7voto

Matt Price Punkte 41298

Das habe ich mir ausgedacht:

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

4voto

Syeberman Punkte 1012

Das P4-Python-Modul von Perforce wie in einer anderen Antwort erwähnt, ist der richtige Weg, aber wenn die Installation dieses Moduls keine Option ist, können Sie das Flag -G verwenden, um die Ausgabe von p4.exe zu analysieren:

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.

3voto

Epu Punkte 605

Das Bauen aus den p4python-Quellen erfordert das Herunterladen und Extrahieren der für diese Version empfohlenen p4 api. Zum Beispiel, wenn Sie die Windows XP x86 Version von P4Python 2008.2 für activepython 2.5 bauen:

  • Herunterladen und Extrahieren der beiden p4python y p4api
  • die setup.cfg für p4python so korrigieren, dass sie auf das Verzeichnis p4api verweist.

Um Dateien zur Bearbeitung zu öffnen (auschecken), siehe 'p4 help open' auf der Kommandozeile.

Sie können Dateien auschecken, ohne eine Änderungsliste zu erstellen, wenn Sie die Datei zur Standard-Änderungsliste hinzufügen, aber es ist eine gute Idee, zuerst eine Änderungsliste zu erstellen.

P4Python kompiliert derzeit nicht für activepython 2.6 ohne Visual Studio 2008; die mitgelieferten Bibliotheken werden mit 2005 oder 2003 gebaut. P4Python zu zwingen, gegen mingw zu kompilieren, ist fast unmöglich, selbst mit Pexports von python26.dll und Reimp/Reassemblierung der bereitgestellten .lib-Dateien in .a-Dateien.

In diesem Fall werden Sie wahrscheinlich eher subprocess verwenden und die p4-Ergebnisse als Python-Objekte zurückgeben, die marshaled sind. Sie können Ihren eigenen Befehls-Wrapper schreiben, der ein arg-Array entgegennimmt, die Befehle konstruiert und ausführt und das Ergebniswörterbuch zurückgibt.

Sie könnten versuchen, alles zu ändern, zu testen und bei Erfolg die Dateien, die sich unterscheiden, mit etwas zu öffnen, das 'p4 diff -se //...' entspricht.

2voto

Nithin Punkte 5011

Vielleicht möchten Sie das P4Python-Modul ausprobieren. Es ist auf der Perforce-Website verfügbar und macht die Dinge sehr einfach.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X