67 lines
2.4 KiB
Bash
Executable File
67 lines
2.4 KiB
Bash
Executable File
#!/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
|