Отклонение файлов с окончаниями строк Windows с использованием триггеров Perforce - PullRequest
2 голосов
/ 21 июня 2010

Используя Perforce, я хотел бы иметь возможность отклонять отправку, которая содержит файлы с окончаниями строк Windows (\ r \ n IIRC, может быть, просто где-то \ r, поскольку на самом деле нам нужны только файлы с окончаниями строк Unix).

Вместо того, чтобы входящие файлы dos2unix или аналогичные, чтобы отслеживать случаи, когда пользователи пытаются отправить файлы с окончаниями строк Windows, я бы хотел добавить триггер, чтобы отклонять текстовые сообщения, содержащие файлы с окончаниями строк не-Unix. 1003 *

Может ли кто-нибудь продемонстрировать, как можно написать сам триггер, возможно, с помощью bash или python?

Спасибо

1 Ответ

4 голосов
/ 21 июня 2010

Вот минимальное редактирование, которое я могу использовать для примера bash, найденного в документах p4 :

#!/bin/sh
# Set target string, files to search, location of p4 executable...
TARGET='\r\n'
DEPOT_PATH="//depot/src/..."
CHANGE=$1
P4CMD="/usr/local/bin/p4 -p 1666 -c copychecker"
XIT=0
echo ""
# For each file, strip off #version and other non-filename info
# Use sed to swap spaces w/"%" to obtain single arguments for "for"
for FILE in `$P4CMD files $DEPOT_PATH@=$CHANGE | \
  sed -e 's/\(.*\)\#[0-9]* - .*$/\1/' -e 's/ /%/g'`
do
  # Undo the replacement to obtain filename...
  FILE="`echo $FILE | sed -e 's/%/ /g'`"
# ...and use @= specifier to access file contents:
  # p4 print -q //depot/src/file.c@=12345
  if $P4CMD print -q "$FILE@=$CHANGE" | fgrep "$TARGET" > /dev/null
  then 
      echo "Submit fails: '$TARGET' not found in $FILE"
      XIT=1
  else
      echo ""

  fi
done
exit $XIT

Исходный пример терпит неудачу, если цель отсутствует, этот провал, если она присутствует - просто переключение ветвей then и else if. Конечно, вы можете отредактировать его и дальше (например, присвоив grep или fgrep флаг -q для подавления вывода, если ваш grep поддерживает его, как, например, в GNU).

...