hg_transplant
This commit is contained in:
commit
67737c3290
|
@ -0,0 +1,66 @@
|
|||
#!/bin/bash
|
||||
# Скрипт, выполняющий hg transplant из текущей ветки для указанной
|
||||
# в параметре ветки. Директория .hg (а в случае, если .hg - симлинк, то
|
||||
# та директория, на которую указывает .hg) копируется во временную
|
||||
# директорию, после чего выполняется hg up -C для указанной в параметре
|
||||
# ветки и выполняется hg transplant -b из текущей ветки.
|
||||
|
||||
CURR_BRANCH=`hg branch`
|
||||
RECV_BRANCH=$1
|
||||
|
||||
# если принимающая ветвь не указана
|
||||
[ "$RECV_BRANCH" == "" ] && echo "Usage: $0 branch" && exit -1
|
||||
|
||||
# переходим в каталог, содержащий .hg
|
||||
while [[ ! -d .hg && 'pwd' != / ]]; do cd .. ; done
|
||||
|
||||
REPO=`pwd`/.hg
|
||||
|
||||
# если .hg - это симлинк
|
||||
[ -L .hg ] && REPO=`pwd`/`readlink .hg`
|
||||
|
||||
# временная директория
|
||||
TMPDIR=/tmp/hg_transplant-$RANDOM$RANDOM
|
||||
|
||||
# создаём $TMPDIR
|
||||
mkdir "$TMPDIR"
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "Не удалось создать временную директорию"
|
||||
rm -rf "$TMPDIR"
|
||||
exit -1
|
||||
else
|
||||
# запрещаем доступ всем посторонним
|
||||
chmod 700 "$TMPDIR"
|
||||
fi
|
||||
|
||||
# копируем $REPO в $TMPDIR
|
||||
cp -rf "$REPO" "$TMPDIR"
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "Не удалось скопировать репозиторий во временную директорию"
|
||||
rm -rf "$TMPDIR"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
# переходим во временную директорию
|
||||
cd "$TMPDIR"
|
||||
hg up -C $RECV_BRANCH
|
||||
|
||||
# выполняем transplant
|
||||
mergetool=`grep ^merge ~/.hgrc | cut -d= -f2 | head -n1 | sed s~[\ \t]~~g`
|
||||
transp_failed_file=`hg transplant -b $CURR_BRANCH 2>&1 1>&3 | grep hunks\ FAILED | sed "s~^.*hunks FAILED -- saving rejects to file ~~"`
|
||||
while [ "$transp_failed_file" != "" ]; do
|
||||
$mergetool "$transp_failed_file" `echo "$transp_failed_file" | sed "s~\.rej$~~"`
|
||||
transp_failed_file=`hg transplant --continue 2>&1 1>&3 | grep hunks\ FAILED | sed "s~^.*hunks FAILED -- saving rejects to file ~~"`
|
||||
done
|
||||
hg ci -m "права на вновь добавленные файлы"
|
||||
hg_automerge.sh && hg push
|
||||
|
||||
if [ "$?" == 0 ]; then
|
||||
echo "Все операции завершились успешно! :-)"
|
||||
rm -rf "$TMPDIR"
|
||||
exit 0
|
||||
else
|
||||
echo "Одна из операций потерпела неудачу :-("
|
||||
rm -rf "$TMPDIR"
|
||||
exit -1
|
||||
fi
|
Loading…
Reference in New Issue