diff options
author | Andrey Rahmatullin <wrar@wrar.name> | 2012-09-21 22:04:28 +0600 |
---|---|---|
committer | Andrey Rahmatullin <wrar@wrar.name> | 2012-09-21 22:04:28 +0600 |
commit | eaa901653fc08a69d577e44f5aa78f746533d5d5 (patch) | |
tree | a9b536862b5d6b182ea16e51ac003b83177b3a19 | |
parent | 4a2dd3b83b40d7882987073f7f07fc573155ce0e (diff) | |
download | hg-fast-export-eaa901653fc08a69d577e44f5aa78f746533d5d5.tar.gz |
Update debian/git-hg from https://github.com/cosmin/git-hg/tree/c1fabd7b9ae5f557e61206aec9774019cf670f4a
-rwxr-xr-x | debian/git-hg | 92 |
1 files changed, 43 insertions, 49 deletions
diff --git a/debian/git-hg b/debian/git-hg index 4b7bf1d..5cbef34 100755 --- a/debian/git-hg +++ b/debian/git-hg @@ -20,7 +20,7 @@ fi function canonicalize { path="$1" - while [ -L "$path" ]; do + while [[ -L "$path" ]]; do dir=$(dirname "$path") path=$(ls -l "$path" | sed -e 's/.* -> //') cd "$dir" @@ -28,7 +28,7 @@ function canonicalize { dir=$(dirname "$path") file=$(basename "$path") - if [ ! -d "$dir" ]; then + if [[ ! -d "$dir" ]]; then echo "canonize: $dir: No such directory" >&2 exit 1 fi @@ -45,7 +45,8 @@ function get-gitdir { } function git-current-branch { - git branch | egrep '^[*]' | sed 's/^\* \(.\)/\1/' + local ref + ref=$(git symbolic-ref -q HEAD) && echo "${ref#refs/heads/}" } function check-hg-fast-export { @@ -55,11 +56,9 @@ function check-hg-fast-export { if type hg-fast-export > /dev/null 2>&1 ; then HG_FAST_EXPORT=hg-fast-export else - GITHG_HOME=$($canon $(dirname $($canon $0))/..) + GITHG_HOME=$($canon "$(dirname "$($canon "$0")")/..") HG_FAST_EXPORT=$GITHG_HOME/fast-export/hg-fast-export.sh - if type $HG_FAST_EXPORT > /dev/null 2>&1 ; then - echo looking good > /dev/null - else + if ! type "$HG_FAST_EXPORT" > /dev/null 2>&1 ; then echo "error: executable not found, $HG_FAST_EXPORT" echo 'Possible fixes: run "git submodule update --init" in git-hg repo, or' echo 'install hg-fast-export executable in directory on $PATH.' @@ -77,34 +76,34 @@ function git-hg-clone { fi HG_REMOTE=$1 - if [ -z "$2" ]; then - CHECKOUT=$(basename $1) + if [[ $# -lt 2 ]]; then + CHECKOUT=$(basename "${1%#*}") else CHECKOUT=$2 fi - if [ -a $CHECKOUT ]; then - echo error: $CHECKOUT exists + if [[ -a $CHECKOUT ]]; then + echo "error: $CHECKOUT exists" exit 1 fi - git init $CHECKOUT + git init "$CHECKOUT" ( - cd $CHECKOUT + cd "$CHECKOUT" get-gitdir - hg clone -U $HG_REMOTE ${GITDIR}/hgcheckout + hg clone -U "$HG_REMOTE" "${GITDIR}/hgcheckout" git init --bare ${GITDIR}/hgremote ( cd ${GITDIR}/hgremote - $HG_FAST_EXPORT -r ../hgcheckout $FORCE + "$HG_FAST_EXPORT" -r ../hgcheckout $FORCE ) git remote add hg ${GITDIR}/hgremote git fetch hg - if git branch -r | grep -q master; then + if git rev-parse --verify -q remotes/hg/master > /dev/null; then local branch="master" else local branch=$(cd ${GITDIR}/hgcheckout/ && hg tip | grep branch | awk '{print $2}') fi - git config hg.tracking.master $branch - git pull hg $branch + git config hg.tracking.master "$branch" + git pull hg "$branch" ) } @@ -118,44 +117,47 @@ function git-hg-fetch { hg -R ${GITDIR}/hgcheckout pull ( cd ${GITDIR}/hgremote - $HG_FAST_EXPORT $FORCE + "$HG_FAST_EXPORT" $FORCE ) git fetch hg } function git-hg-pull { - while [ $# -gt 0 ]; do + while [[ $# -gt 0 ]]; do case "$1" in --rebase) REBASE="--rebase" - shift ;; --force) FORCE="--force" - shift ;; esac + shift done git-hg-fetch $FORCE - local current_branch=$(git-current-branch) - local remote_branch + local current_branch remote_branch - if [ $current_branch == "master" ]; then + if ! current_branch=$(git-current-branch); then + echo "ERROR: You are not currently on a branch." + exit 1 + fi + + if [[ $current_branch == "master" ]]; then remote_branch=$(git config hg.tracking.master || true) if [[ -z $remote_branch ]]; then - if git branch -r | grep -q master; then + if git rev-parse --verify -q remotes/hg/master > /dev/null; then remote_branch="master" - git config hg.tracking.master $branch + git config hg.tracking.master master else echo "ERROR: Cannot determine remote branch. There is no remote branch called master, and hg.tracking.master not set. Merge the desired branch manually." exit 1 fi fi else - remote_branch=$(git config hg.tracking.${current_branch} || true) + remote_branch=$(git config "hg.tracking.$current_branch" || true) if [[ -z $remote_branch ]]; then echo "ERROR: Cannot determine the remote branch to pull from. Run git merge manually against the desired remote branch." echo "Alternatively, set hg.tracking.$current_branch to the name of the branch in hg the current branch should track" @@ -163,10 +165,10 @@ function git-hg-pull { fi fi - if [ "--rebase" = "$REBASE" ]; then - git rebase hg/$remote_branch + if [[ "$REBASE" == "--rebase" ]]; then + git rebase "hg/$remote_branch" else - git merge hg/$remote_branch + git merge "hg/$remote_branch" fi } @@ -176,14 +178,14 @@ function git-hg-checkout { shift fi git-hg-fetch $FORCE - git checkout hg/$1 -b $1 + git checkout "hg/$1" -b "$1" } function git-hg-push { HG_REPO=$1 get-gitdir - hg convert . ${GITDIR}/hgcheckout - hg -R ${GITDIR}/hgcheckout push $HG_REPO + hg --config extensions.convert= convert . ${GITDIR}/hgcheckout + hg -R ${GITDIR}/hgcheckout push "$HG_REPO" } function usage { @@ -201,22 +203,14 @@ function usage { echo " checkout [ --force ] branch_name checkout a mercurial branch" } -case "$1" in - clone) - git-hg-clone $2 $3 $4 - ;; - fetch) - git-hg-fetch $2 - ;; - pull) - git-hg-pull $2 $3 - ;; - checkout) - git-hg-checkout $2 $3 +FORCE= +REBASE= +CMD=$1 +shift +case "$CMD" in + clone|fetch|pull|checkout|push) + git-hg-$CMD "$@" ;; - push) - git-hg-push $2 - ;; *) usage exit 1 |