2009-10-16 4 views
6

Je me demandais quel pourrait être le but d'essayer de supprimer des listes changelistes, car une liste changeliste n'est pas censée être vide. Mais alors je joue avec le dépôt tutoriel, et en utilisant la commande obliterate sur une branche entière, je peux voir qu'il y a une situation où vous pouvez vous retrouver avec des changelists validés vides (qui doivent être supprimés avec l'option -f).Comment trouver/supprimer rapidement toutes les listes de modifications vides dans Perforce?

Cependant, je ne sais pas comment les trouver avec la ligne de commande, car je ne sais pas comment rechercher les listes de modifications sans fichiers associés.

Existe-t-il un moyen facile de faire cela?

Merci,

Thomas

Répondre

0

Comme je suis sous Windows, j'ai créé un petit script faire exactement la même chose à PERL, plutôt que Shell, ou 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; 

Notez que, en fait, , dans tous les cas, ce n'est pas un script très intelligent: Il essaie de supprimer absolument toutes les listes de modifications soumises, et il est empêché par forcément de le faire, car si des fichiers sont associés, vous obtiendrez une erreur.

Je suppose que le résultat du script doit être envoyé à un journal, et analyser, de sorte que seules les lignes pertinentes sont en surbrillance.

L'exécution du script produira une sortie similaire à:

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!

Je aurais dû parcourir plus de documentation avant de demander ce ...

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

Description: Supprimer tous les changelists vides soumis.
Commande shell: p4 changements -s soumis | coupe -d "" -f 2 | xargs -n1 p4 change -d -f
Powershell: p4 changements -s soumis | % {p4 changer -d -f $ _. split() [1]}
px: px -F% changement% changements -soumis | px X- changer -d -f
collaborateurs: Sam Stafford, Philip Kania, Shawn Hladky

Duh.

Thomas

+0

Vous devez accepter votre propre réponse (pour marquer la réponse). :-) – PhiLho

+0

Je ne pouvais pas utiliser les réponses proposées sur mon PC Windows, j'ai donc écrit un petit script PERL pour faire la même chose. :-) –

0

Voici un DOS CMD seule version. Remplacez simplement% 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 
     ) 
    ) 

Je suis sur un ordinateur Windows 7. Cela fonctionnera sur plusieurs autres versions de Windows/DOS.

1

Pour simplement trouver tous changelists vides soumis sans les supprimer, vous pouvez comparer la sortie de ces deux commandes:

  • p4 changes -s submitted - tous changelists
  • p4 changes -s submitted //... - tous changelists avec les fichiers associés

Dans Windows PowerShell, par exemple, exécutez

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

Bon tour! Merci ! :) –

Questions connexes