Простой способ создать список изменений perforce с несколькими спецификациями файлов.

Я хочу отправить список изменений с несколькими спецификациями файлов, например. ...этот... ...файл.h ...другой... Perforce мне не позволяет. Я мог бы создать список изменений из файла, но мне нужна возможность просмотреть файлы и оставить комментарий. Это для решения командной строки.


person Brian Carlton    schedule 14.10.2009    source источник


Ответы (8)


Вы можете создать список ожидающих изменений, а затем переместить в него все нужные файлы перед отправкой. Даже из командной строки, хотя я считаю, что p4V проще использовать для этой функции.

http://www.perforce.com/perforce/doc.current/manuals/cmdref/change.html#1040665

p4 change

чтобы создать список ожидающих изменений.

p4 reopen 

для перемещения файлов в список ожидающих изменений.

person Douglas Leeder    schedule 15.10.2009
comment
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`
person Martin Probst    schedule 02.07.2010

Это бесконечно неприятная проблема. Вы должны иметь возможность создать список изменений 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

Это кажется несколько более небрежным, но может быть лучшей альтернативой решениям для сценариев.

person Michael Gilbert    schedule 21.12.2009
comment
Это немного проще: p4 изменить -o | findstr /v введите здесь описание | p4 изменить -я - person yoyo; 06.02.2015

Основываясь на ответе Майкла Гилберта, вы можете отредактировать описание в 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] }
person tenpn    schedule 30.06.2010

Я только что наткнулся на этот вопрос сегодня, и ответ @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`
person bradym    schedule 15.02.2013
comment
Это отлично сработало для меня в * NIX, bash v4.1. Я заметил одну вещь: в конце есть пробел, и я не могу сказать, откуда он взялся. «Изменение описания списка» - person undeniablyrob; 21.08.2015

Вот однострочник, который работает в командной оболочке 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.

person yoyo    schedule 05.02.2015
comment
Я пробовал с чистым списком изменений по умолчанию и работает отлично, но если у меня уже есть какие-либо файлы в списке, это дает мне следующую ошибку. Ошибка в спецификации изменения. Невозможно включить еще не открытые файлы. Открывайте новые файлы с добавлением p4, редактированием p4 и т. д. Любое предложение? - person Asier Sánchez Rodríguez; 18.01.2017
comment
Похоже, новейший интерфейс командной строки поддерживает новую опцию --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...

Надеюсь это поможет!

person Vissu    schedule 15.10.2009
comment
Я ищу реализацию командной строки для использования в скриптах. - person Brian Carlton; 15.10.2009

Вот реализация для 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;
}
person JohPie    schedule 20.05.2014