как принудительно стереть файлы в папке с другой ревизией

У меня есть папка сборки в perforce, которая отслеживает все мои сборки, но файлы внутри нее имеют разные номера ревизий (потому что на них не влияют разные сборки), поэтому в той же папке у меня есть файлы с ревизией #1200 и другие с ревизией №2000.

Я изначально думал стереть старые ревизии из p4admin, благо там есть опция "стереть до ревизии", но в случае с этой папкой не уверен как это поведет себя.

Есть ли способ в p4 сохранить только две последние версии всех файлов в этой папке? Или единственный выполнимый способ - написать скрипт для проверки версии каждого файла перед его уничтожением?


person Max    schedule 28.02.2018    source источник
comment
Почему бы не использовать тип файла «+S2»? См. p4 help filetypes.   -  person Bryan Pendleton    schedule 01.03.2018


Ответы (1)


К сожалению, Perforce не имеет дополнительного синтаксиса относительной ревизии, поэтому вы не можете использовать #head-2 или что-то подобное.

Самый простой способ сделать что-то подобное IMO — создать метку с #head-2 ревизиями, что вы можете сделать итеративно, используя спецификатор относительной ревизии @< на самой метке:

# start by labeling #head
C:\Perforce\test>p4 tag -l minus2 ...#head
//stream/main/0.f1#3 - added
//stream/main/1.15#4 - added
//stream/main/1.16#1 - added
//stream/main/1.17#1 - added
//stream/main/1.18#2 - added
//stream/main/2.f1#5 - added
//stream/main/2.f2#4 - added

# now replace everything in the label with the previous revision
C:\Perforce\test>p4 labelsync -l minus2 "...@<minus2"
//stream/main/0.f1#2 - updated
//stream/main/1.15#3 - updated
//stream/main/1.16#1 - deleted
//stream/main/1.17#1 - deleted
//stream/main/1.18#1 - updated
//stream/main/2.f1#4 - updated
//stream/main/2.f2#3 - updated

# now do it again, bringing us to #head-2
C:\Perforce\test>p4 labelsync -l minus2 "...@<minus2"
//stream/main/0.f1#1 - updated
//stream/main/1.15#2 - updated
//stream/main/1.18#1 - deleted
//stream/main/2.f1#3 - updated
//stream/main/2.f2#2 - updated

Теперь на этикетке есть все последние ревизии, которые я хочу стереть. Я еще раз проверю p4 files -a, прежде чем делать p4 obliterate:

C:\Perforce\test>p4 files -a #1,@minus2
//stream/main/0.f1#1 - add change 72 (text)
//stream/main/1.15#2 - edit change 77 (text)
//stream/main/1.15#1 - branch change 73 (text)
//stream/main/2.f1#3 - integrate change 81 (text)
//stream/main/2.f1#2 - integrate change 78 (text)
//stream/main/2.f1#1 - branch change 74 (text)
//stream/main/2.f2#2 - integrate change 79 (text)
//stream/main/2.f2#1 - branch change 75 (text)

C:\Perforce\test>p4 obliterate -y #1,@minus2
//stream/main/0.f1#1 - purged
//stream/main/2.f1#2 - purged
//stream/main/2.f1#3 - purged
Deleted 4 label 24 integration 8 revision record(s).
person Samwise    schedule 28.02.2018