summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Rahmatullin <wrar@wrar.name>2012-09-21 22:04:28 +0600
committerAndrey Rahmatullin <wrar@wrar.name>2012-09-21 22:04:28 +0600
commiteaa901653fc08a69d577e44f5aa78f746533d5d5 (patch)
treea9b536862b5d6b182ea16e51ac003b83177b3a19
parent4a2dd3b83b40d7882987073f7f07fc573155ce0e (diff)
downloadhg-fast-export-eaa901653fc08a69d577e44f5aa78f746533d5d5.tar.gz
Update debian/git-hg from https://github.com/cosmin/git-hg/tree/c1fabd7b9ae5f557e61206aec9774019cf670f4a
-rwxr-xr-xdebian/git-hg92
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