Pregunta

Me gustaría escribir algunos scripts en python que realicen algunos cambios automáticos en el código fuente. Si el script determina que necesita cambiar el archivo, me gustaría primero verificarlo por fuerza. No me importa registrarme porque siempre querré construir y probar primero.

¿Fue útil?

Solución

Perforce tiene envoltorios de Python alrededor de sus herramientas C / C ++, disponibles en forma binaria para Windows y fuente para otras plataformas:

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

Encontrará que su documentación de la API de scripting es útil:

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

El uso de la API de Python es bastante similar al cliente de línea de comandos:

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

Lo verificaré desde la línea de comando:

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

Otros consejos

Esto es lo que se me ocurrió:

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

El módulo P4 Python de Perforce mencionado en otra respuesta es el camino a seguir , pero si instalar este módulo no es una opción, puede usar el indicador -G para ayudar a analizar la salida de 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.

Construir desde la fuente p4python requiere descargar y extraer la api p4 recomendada para esa versión. Por ejemplo, si compila la versión de Windows XP x86 de P4Python 2008.2 para activepython 2.5:

  • descargue y extraiga tanto p4python como p4api
  • arregla el setup.cfg para p4python para apunte al directorio p4api.

Para abrir archivos para editar (hacer un pago), en la línea de comando, consulte 'p4 help open'.

Puede retirar archivos sin hacer una lista de cambios si agrega el archivo a la lista de cambios predeterminada, pero es una buena idea hacer primero una lista de cambios.

P4Python actualmente no compila para activepython 2.6 sin Visual Studio 2008; las bibliotecas proporcionadas están compiladas con 2005 o 2003. Forzar a p4python a construir contra mingw es casi imposible, incluso con pexports de python26.dll y volver a armar / reensamblar los archivos .lib proporcionados en archivos .a.

En ese caso, es probable que prefiera usar el subproceso y devolver los resultados de p4 como objetos de python ordenados. Puede escribir su propio contenedor de comandos que tome una matriz arg, construya y ejecute los comandos, y devuelva el diccionario de resultados.

Puede intentar cambiar todo, probar y, en caso de éxito, abrir los archivos que son diferentes con algo equivalente a 'p4 diff -se // ...'

Es posible que desee consultar el módulo P4Python. Está disponible en el sitio de rendimiento y hace las cosas muy simples.

Recuerde que los muchachos deben instalar el paquete de desarrollo para Python para el p4api o se quejarán por la falta de encabezados. En Ubuntu 10.10, solo haz un simple:

apt-get install python2.6-dev

O

apt-get install python3.1-dev
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top