2009-10-16 10 views
6

Mi stavo chiedendo quale potrebbe essere il punto nel tentativo di eliminare gli elenchi di modifiche impegnate, perché non si suppone che un elenco di modifiche impegnato sia vuoto.Come si trovano/cancellano rapidamente tutti gli elenchi di modifiche vuoti in Perforce?

Ma poi sto giocando con il deposito tutorial, e usando il comando obliterate su un intero ramo, vedo che ci sono situazioni in cui si può finire con gli elenchi di modifiche vuoti (che richiedono la cancellazione con il flag -f).

Tuttavia, non so come trovarli con la riga di comando, poiché non so come cercare gli elenchi di modifiche senza file associati.

C'è un modo semplice per farlo?

Grazie,

Thomas

risposta

0

Come io sono su Windows, ho creato un piccolo script fare la stessa cosa in PERL, piuttosto che Shell, PowerShell o 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; 

Si noti che in realtà , in tutti i casi, non è uno script molto intelligente: tenta di eliminare assolutamente ogni elenco di modifiche presentato, ed è impedito per forza di farlo, perché se i file sono associati con esso, si otterrà un errore.

Suppongo che il risultato dello script debba essere inviato a un log e analizzato, in modo che vengano evidenziate solo le righe pertinenti.

Esecuzione dello script produrrà un output simile 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!

avrei dovuto passare in rassegna più documentazione prima di chiedere questo ...

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

Descrizione: Eliminare tutti changelists presentati vuote.
Comando di shell: p4 changes -s submitted | cut -d "" -f 2 | xargs -n1 p4 change -d -f
PowerShell: modifiche p4 -s inviate | % {p4 cambia -d -f $ _. split() [1]}
px: px -F% cambia% cambia -s inviata | px -X- cambiare -d -f
Collaboratori: Sam Stafford, Philip Kania, Shawn Hladky

Duh.

Thomas

+0

È necessario accettare la propria risposta (per contrassegnare la domanda come risposta). :-) – PhiLho

+0

Non ho potuto utilizzare le risposte proposte sul mio PC Windows, quindi ho scritto un piccolo script PERL per fare lo stesso. :-) –

0

Ecco un solo DOS CMD versione. Sostituisci% 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 
     ) 
    ) 

Sono su una macchina Windows 7. Funzionerà su diverse altre versioni di Windows/DOS.

1

Per semplicemente trovare tutti changelists presentate vuote senza eliminarle, è possibile confrontare l'output di questi due comandi:

  • p4 changes -s submitted - tutte changelists
  • p4 changes -s submitted //... - tutti changelists con i file associati

In Windows PowerShell, ad esempio, eseguire

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

Bel trucco! Grazie ! :) –

Problemi correlati