Я хочу отправить список изменений с несколькими спецификациями файлов, например. ...этот... ...файл.h ...другой... Perforce мне не позволяет. Я мог бы создать список изменений из файла, но мне нужна возможность просмотреть файлы и оставить комментарий. Это для решения командной строки.
Простой способ создать список изменений perforce с несколькими спецификациями файлов.
Ответы (8)
Вы можете создать список ожидающих изменений, а затем переместить в него все нужные файлы перед отправкой. Даже из командной строки, хотя я считаю, что p4V проще использовать для этой функции.
http://www.perforce.com/perforce/doc.current/manuals/cmdref/change.html#1040665
p4 change
чтобы создать список ожидающих изменений.
p4 reopen
для перемещения файлов в список ожидающих изменений.
p4 change -o
и p4 change -i
потребуются, чтобы избежать использования редактора -
- person Douglas Leeder; 16.10.2009
Если вы ищете решение для командной строки UNIX/*NIX, это даст вам новый, чистый список изменений и сохранит номер в $cl
:
export cl=`p4 change -o | grep '^\(Change\|Client\|User\|Description\)' | p4 change -i | cut -d ' ' -f 2`
Это бесконечно неприятная проблема. Вы должны иметь возможность создать список изменений p4 из командной строки Windows, не вызывая редактор, выполнив:
p4 change -o
| findstr /C:Description: /C:Change: /C:Client: /C:User: /C:Status:
| p4 change -i
Возвращаемая строка будет выглядеть примерно так: «Создано изменение 1500». который вы можете проанализировать для списка изменений. Затем вы можете добавить отдельные спецификации файлов, выполнив следующие действия:
p4 edit -c 1500 //depot/base/...files.c
Или что-то в этом роде. Относительно серьезной проблемой этого решения является невозможность изменить описание. Кроме того, вы можете создать временный файл с необходимыми строками Description, Change, Client и т. д. и создать список изменений с помощью:
p4 change -i < tempfile.txt
Это кажется несколько более небрежным, но может быть лучшей альтернативой решениям для сценариев.
Основываясь на ответе Майкла Гилберта, вы можете отредактировать описание в powershell следующим образом:
$newCLFormat = p4 change -o | select-string -pattern change, client, status
$newCLFormat += "Description: " + $myDescription
$newCLFormat | p4 change -i
Чтобы вывести новый номер списка изменений:
$newCLFormat | p4 change -i | select-string "\b(\d)+" | %{$_.matches[0].value}
Теперь должен быть более быстрый и аккуратный способ вытащить это число?
редактировать: рефакторинг findstr для select-string
редактировать: более аккуратный способ получить список изменений:
$newCLFormat | p4 change -i | %{ $_.split()[1] }
Я только что наткнулся на этот вопрос сегодня, и ответ @Martin был очень полезным. Я хотел создать список изменений с описанием, а не оставлять его пустым, поэтому я использовал его команду в качестве отправной точки и изменил ее так:
export cl=`p4 change -o | sed 's/<enter description here>/"Change list description"/' | sed '/^#/d' | sed '/^$/d' | p4 change -i | cut -d ' ' -f 2`
Вот однострочник, который работает в командной оболочке Windows с помощью только командной строки p4 и стандартной утилиты findstr для Windows и не требует никаких временных файлов.
(p4 change -o | findstr /v "enter description here" & echo ○My new changelist)|p4 change -i
Это будет:
- сгенерировать спецификацию списка изменений ("p4 change -o")
- удалить строку «введите описание здесь» («findstr -v»)
- добавить новое описание ("эхо")
- и, наконец, создайте новый список изменений ("p4 change -i")
Обратите внимание, что описание должно начинаться с символа табуляции, то есть с маленького «○». Если форматирование прерывается на пути к вашей оболочке, вы можете ввести символ табуляции с помощью Alt-9.
--field
, которая была бы здесь полезна. Вероятно, вы могли бы использовать это, чтобы установить описание в свой текст и список файлов, чтобы он был пуст, а затем использовать p4 reopen
для перемещения файлов в новый список изменений. Дополнительная информация: perforce.com/blog/160428/20161-command-line -сводка новостей
- person yoyo; 19.01.2017
Тип
p4 submit
Если ваш P4EDITOR - это vim, вы получите окно редактирования vim. Перейдите в командный режим и выберите все строки после строки «Файлы:», набрав
v followed by PgDown until you're done selecting all the files
Тогда сделайте
:g!/.*pattern1.*#/d
Если у вас есть несколько таких шаблонов,
:g!/.*pattern1.*#\|.*pattern2.*#\|.*pattern3.*#/d etc...
Надеюсь это поможет!
Вот реализация для Maya (MEL):
proc string jp_newChangeList()
{
//This will return the file format as a string
string $changelist = `system("p4 change -o || p4 change -i")`;
//Break up the string by line
string $breakChange[]; tokenize $changelist "\n" $breakChange;
//Find the line called "enter description here" and edit it with your text (precede text with 4 SPACES to preserve format!!!)
int $count = 0;
int $mine = 0;
for($lii in $breakChange)
{
$lii = `strip $lii`;
if($lii == "<enter description here>") $mine = $count;
$count++;
}
$breakChange[$mine] = " User enters text for description here";
//get a local dummy file location and call it "p4.txt". We will use this to generate a changelist
$exampleFileName = ( `internalVar -userTmpDir` + "p4.txt" );
$fileId=`fopen $exampleFileName "w"`;
int $printCount = 0;
//Print string array, one line at a time, until you pass the description string (leaving the "files" part unspecified)
while($printCount <= $mine)
{
fprint $fileId ($breakChange[$printCount] + "\n");
$printCount++;
}
//close the text file
fclose $fileId;
//Read the text file to return the changelist number
string $changelist = `system("p4 change -i < " + $exampleFileName)`;
//Parse return statement to isolate changelist number
string $changeNum[]; tokenize $changelist " " $changeNum;
string $changeListNumber = $changeNum[1];
return $changeListNumber;
}