dev/bash/hg_scripts/hg_transplant.sh

67 lines
2.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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