2009-10-16 18 views
6

Zastanawiam się, jaki może być sens w usuwaniu zatwierdzonych list zmian, ponieważ zobowiązana lista zmian nie powinna być pusta.Jak szybko znaleźć/usunąć wszystkie puste listy zmian w Perforce?

Ale ja bawię się za pomocą samouczka i używając polecenia "obliterate" na całej gałęzi, widzę sytuację, w której możesz skończyć z pustymi zatwierdzonymi listami zmian (które wymagają usunięcia z flagą -f).

Jednak nie wiem, jak znaleźć je za pomocą wiersza poleceń, ponieważ nie wiem, jak szukać listy zmian bez żadnych plików.

Czy istnieje prosty sposób na zrobienie tego?

Dzięki,

Thomas

Odpowiedz

0

Ponieważ jestem na Windows, Stworzyłem mały skrypt robi dokładnie to samo w Perl, zamiast muszli, PowerShell lub 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; 

pamiętać, że w rzeczywistości we wszystkich przypadkach nie jest to bardzo sprytny skrypt: stara się usunąć absolutnie każdą przesłaną listę zmian i uniemożliwia ją, aby to zrobić, ponieważ jeśli pliki są z nią powiązane, pojawi się błąd.

Przypuszczam, że wynik skryptu powinien zostać wysłany do dziennika i przeanalizować, aby podświetlić tylko odpowiednie wiersze.

Uruchamianie skryptu będzie produkować moc podobną do:

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. 

Wiwaty,

Thomas

6

Ach!

powinienem przeglądać więcej dokumentacji przed pytaniem to ...

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

Opis: Usuń wszystkie puste przedstawionych list zmian.
Polecenie powłoki: zmiana p4 -s przesłana | cut -d "" -f 2 | xargs -n1 p4 change -d -f
Powershell: zmiany p4 -s złożone | % {p4 zmień -d -f $ _. split() [1]}
px:% -F% zmiana% zmian -s przesłany | px X- zmienić -d -f
Uczestników: Sam Stafford, Philip Kania, Shawn Hladký

Duh.

Thomas

+0

Powinieneś zaakceptować własną odpowiedź (aby oznaczyć pytanie jako odebrane). :-) – PhiLho

+0

Nie mogłem użyć proponowanych odpowiedzi na moim komputerze z Windows, więc napisałem mały skrypt PERL, żeby zrobić to samo. :-) –

0

Oto tylko CMD DOS wersja. Po prostu zastąp% 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 
     ) 
    ) 

Jestem na komputerze z systemem Windows 7. To zadziała w kilku innych wersjach systemu Windows/DOS.

1

po prostu znaleźć wszystkich pustych złożonych list zmian bez ich usuwania, można porównać wyjście z tych dwóch komend:

  • p4 changes -s submitted - Wszystkie list zmian
  • p4 changes -s submitted //... - Wszystkie list zmian z powiązanymi plikami

W środowisku Windows PowerShell na przykład uruchom

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

Dobra sztuczka! Dzięki ! :) –

Powiązane problemy