dev/bash/hg_scripts/hg_transplant.sh

67 lines
2.4 KiB
Bash
Raw Normal View History

2011-04-05 17:09:06 +04:00
#!/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