Perforce: encuentra una list de cambios de origen para una sucursal

Version corta:

Después de ramificar en P4, ¿cómo puedo averiguar la list de cambios de "origen" de la sucursal?

Versión larga:

Digamos que tengo una twig principal de mi proyecto en

//project/main/... 

La última list de cambios presentada aquí es @ 123, cuando decido crear una twig para la versión 1.0 en

 //project/1.0/... 

Desde P4V, se crea una nueva list de cambios (digamos @ 130), se resuelve y se envía.

Desde la CLI, se vería algo como esto:

 p4 integrate -c 123 -o //project/main/... //project/1.0/... p4 submit 

Más tarde, miro las //project/1.0 en //project/1.0 , y veo la list de //project/1.0 @ 130 que contiene muchos files ramificados. ¿Cómo puedo averiguar la list de cambios no? que esto fue originalmente ramificado de (es decir, @ 123)?

p4 changes mostrarán una list de lists de p4 changes enviadas, opcionalmente filtradas a una ruta específica.

 p4 changes //project/main/... Change 123 ... 'Very last change.' Change 122 ... 'Next-to-last change.' Change 100 ... 'Only two changes to go...' ... 

No sorprende, pero, como ha descubierto, los p4 changes son less útiles cuando integra todos esos cambios en un solo cambio:

 p4 changes //project/1.0/... Change 130 ... 'Integrated everything from main.' 

El truco es usar la opción -i que incluye cualquier list de cambios integrada en los files especificados .

 p4 changes -i //project/1.0/... Change 130 ... 'Integrated everything from main.' Change 123 ... 'Very last change.' Change 122 ... 'Next-to-last change.' Change 100 ... 'Only two changes to go...' ... 

Para get exactamente lo que desea ( 123 ), tendrá que escribir un script que filtre los resultados de p4 changes -i //project/1.0/... para eliminar cualquier cambio enumerado por p4 changes //project/1.0/... (y luego tomar el cambio restante más reciente).

(Al explorar, frecuentemente también me resulta útil la opción -m max . Esto limita los cambios al 'máximo' más reciente . Esto ayuda a que su salida no fluya fuera de la pantalla cuando hay muchos cambios).

No conozco ningún command simple que realice lo que le gustaría hacer. Si está dispuesto a realizar un script un poco y el command no tiene que ejecutarse rápidamente, tal vez podría tratar de escribir algo como el siguiente para todos los files ramificados:

  1. Encuentra el file fuente / revisión para un file objective.

    loglog p4 //project/1.1/foo.bar#1
    //project/1.1/foo.bar
    … # 1 cambio 6416 branch en 2009/07/10 por foo @ bar (text) 'Release 1.1'
    … … twig de //project/main/foo.bar # 1, # 2

  2. Obtenga la list de cambios en la que se envió el file / revisión de origen.

    p4 fstat //project/main/foo.bar#2
    … depotFile //project/main/foo.bar
    … headAction editar
    … text de headType
    … headTime 1201771167
    … headRev 2
    … headChange 5353
    … headModTime 1201770971

  3. Repita para todos los files en la twig y select el cambio más alto no (headChange anterior), que debe ser el último cambio enviado al padre antes de la bifurcación para ese file específico. Puede get una list completa de todos los files bifurcados utilizando, por ejemplo, "files p4 //proyecto/1.0/…#1".

(o tal vez tomar el path más fácil y pedir soporte a Perforce)

Dado que ninguna de las respuestas hasta ahora proporciona el código para encontrar la fuente o la list de cambios raíz de una sucursal, pensé que proporcionaría una línea para hacer precisamente eso. Este enfoque se basa en la sugerencia de @Cwan e imprimirá la list de cambios "principal" a partir de la cual se creó la twig. El argumento FIRST_BRANCH_CL debe replacese con la list de FIRST_BRANCH_CL creación de twigs (es decir, la primera list de cambios enviada a la nueva sucursal). Como ejemplo concreto, reemplazando FIRST_BRANCH_CL con 130 de la pregunta original, este one-liner generaría 123 .

 p4 describe -s FIRST_BRANCH_CL | perl -lne 'if(/^\.\.\. (.+#[0-9]+) .+$/) {print quotemeta $1}' | xargs p4 filelog -m1 | perl -lne 'if(/^\.\.\. \.\.\. branch from (.+#[0-9]+)/) {print quotemeta $1}' | xargs p4 fstat | perl -lne 'if(/^\.\.\. headChange (\d+)/) {$MaxCL=$1 if($1 > $MaxCL)} END {print $MaxCL}' 

Respuesta corta :

Usar el gráfico de revisión en P4V es un paso atrás en el time e investigar el historial de integración. Video en el website de Perforce .

He utilizado con éxito el gráfico de revisión en las twigs con miles de files para seguir cuando un cambio en particular se integró en una twig. Es por eso que lo recomendé y lo vinculé a un video de capacitación ya que la mayoría de la gente lo subestima porque no saben cómo usarlo.

Larga respuesta :

… [Eliminado]

ACTUALIZACIÓN: como el gráfico de revisión aparentemente no es factible, quizás pueda resolver esto usando un process / política, es decir, cuando realice la integración, agregue una nota en la descripción "Ramificado @ CL 123". Usamos este enfoque nosotros mismos al integrar desde un troncal a líneas de liberación.

Si usa la pestaña del historial en p4v, le mostrará todas las lists de cambios enviadas en una sucursal, así que mire esto para

 //project/1.0/... 

una vez que haya encontrado la list de cambios enviada más antigua, en cualquiera de los files de la list de cambios verá el gráfico de revisión correspondiente, esto le mostrará la twig desde la que se integró el file (y el rest de los files).

Veré si puedo volver con los commands p4 para hacer lo mismo.

Respuesta actualizada: creo que esto funcionará. Prueba esto:

 p4 interchanges from_branch to_branch 

Esto mostrará los cambios no integrados de su twig principal a su twig de lanzamiento. Creo que puedes usar el número de list de cambios superior less 1 para encontrar tu list de cambios de origen. interchanges es una característica CLI de Perforce no documentada. Para get más información, escriba p4 help interchanges para get más información sobre este command.

Nuevamente, creo que esto funcionará. Puede haber algunos casos especiales en los que no será así, pero creo que es un problema difícil e importante.

"p4 integrado" funcionó para mí. Busque "copyr desde" en la descripción