commit 67737c32909835579e706235fd7c05c5b6cb1dc7 Author: Kolan Sh Date: Tue Apr 5 17:09:06 2011 +0400 hg_transplant diff --git a/bash/hg_scripts/hg_transplant.sh b/bash/hg_scripts/hg_transplant.sh new file mode 100755 index 0000000..7e8ffbe --- /dev/null +++ b/bash/hg_scripts/hg_transplant.sh @@ -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