2009-10-16 11 views
6

Me preguntaba cuál podría ser el objetivo al tratar de eliminar listas de cambios comprometidas, porque se supone que una lista de cambios comprometida no está vacía.¿Cómo puede encontrar/eliminar rápidamente todas las listas de cambios vacías en Perforce?

Pero luego estoy jugando con el depósito tutorial, y usando el comando de borrado en una rama completa, puedo ver que hay situaciones en las que puede terminar listas de cambios vacías (que necesitan borrarse con el indicador -f).

Sin embargo, no sé cómo encontrarlos con la línea de comandos, ya que no sé cómo buscar listas de cambios sin archivos asociados.

¿Hay alguna manera fácil de hacerlo?

Gracias,

Thomas

Respuesta

0

Como estoy en Windows, he creado un pequeño script que hace exactamente lo mismo en Perl, en lugar de Shell, o PowerShell px :):

#******************************************************************************* 
# Module: delete_empty_changelist.pl 
# Purpose: A script to delete empty changelist 
# 

@list = `p4 changes -s submitted`; 

foreach $chg (@list) 
{ 
$chgnbr = (split /\s+/, $chg)[1]; 
print `p4 change -d -f $chgnbr`; 
}  
exit 0; 

Tenga en cuenta que, de hecho, , en todos los casos, no es un guión muy inteligente: se trata de eliminar absolutamente todas las listas de cambios presentado, y se evita mediante forzosamente para hacerlo, ya que si los archivos están asociados con ella, obtendrá un error.

supongo que el resultado de la secuencia de comandos debe ser enviada a un registro, y analizar, de manera que sólo las líneas relevantes se destacan.

La ejecución del script producirá una salida similar a:

Change 857 has 1 files associated with it and can't be deleted. 
Change 856 has 1 fixes associated with it and can't be deleted. 
Change 855 has 1 fixes associated with it and can't be deleted. 
Change 854 deleted. 
Change 853 has 1 fixes associated with it and can't be deleted. 
Change 852 has 8 files associated with it and can't be deleted. 
Change 851 has 1 files associated with it and can't be deleted. 
Change 850 has 2 files associated with it and can't be deleted. 
Change 849 has 2 files associated with it and can't be deleted. 
Change 846 deleted. 
Change 845 has 2 files associated with it and can't be deleted. 

Cheers,

Thomas

6

Ah!

Debería haber navegar más documentación antes de preguntar esto ...

http://public.perforce.com/wiki/Perforce_Command_Line_Recipes

Descripción: Eliminar todas las listas de cambios presentados vacías.
Comando de shell: p4 cambios -s enviados | cut -d "" -f 2 | xargs n1 p4 cambian -d -f
Powershell: cambios p4 -s presentarse | % {P4 cambio -d -f $ _ split() [1].}
PX: px -F% de cambio% -s cambios presentados | -X- px cambiar -d -f
colaboradores: Sam Stafford, Philip Kania, Shawn Hladky

Duh.

Thomas

+0

Debe aceptar su propia respuesta (para marcar la pregunta como respondida). :-) – PhiLho

+0

No pude usar las respuestas propuestas en mi PC con Windows, así que escribí un pequeño script PERL para hacer lo mismo. :-) –

0

Aquí hay una única versión DOS CMD. Simplemente reemplace% p4streamsUser%.

for /f "tokens=* delims=" %%i in ('p4 changes -u %p4streamsUser% -s pending') do (
     for /f "tokens=1-7*" %%a in ("%%i") do (
      echo Deleting CL %%b %%h %%f 
      p4 change -d -f %%b 
     ) 
    ) 

Estoy en una máquina con Windows 7. Esto funcionará en varias otras versiones de Windows/DOS.

1

Para simplemente encuentran todas las listas de cambios presentados vacíos sin eliminarlos, se puede comparar la salida de estos dos comandos:

  • p4 changes -s submitted - todas las listas de cambios
  • p4 changes -s submitted //... - todas las listas de cambios con archivos asociados

En Windows PowerShell, por ejemplo, ejecute

diff -ReferenceObject (p4 changes -s submitted) -DifferenceObject (p4 changes -s submitted //...) 
+0

Buen truco! Gracias ! :) –

Cuestiones relacionadas