X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;ds=sidebyside;f=scripts%2Fgit-hg-sub-import;fp=scripts%2Fgit-hg-sub-import;h=0180d4f972663f32642886f0f7ed6be1961c8543;hb=2ae7cdf192035eefcbaf3732d5a5dacceb9094ad;hp=a535772e858a803b521f6a2c3e807940fdcb8598;hpb=73194482c7c58af7f010cfb8eaf85355d7c4b867;p=hvutilities.git diff --git a/scripts/git-hg-sub-import b/scripts/git-hg-sub-import index a535772..0180d4f 100755 --- a/scripts/git-hg-sub-import +++ b/scripts/git-hg-sub-import @@ -1,164 +1,22 @@ #!/bin/bash set -o errexit +SCRIPT="`readlink -e $0`" +SCRIPTPATH=$(dirname ${SCRIPT}) +source ${SCRIPTPATH}/hv-hg-functions.sh + # for use with git-remote-hg: # http://felipec.wordpress.com/2012/11/13/git-remote-hg-bzr-2/ # Uncomment to have verbose debug output #debug=1 -PROJRC_COUNT=0 -SUBPATHS_COUNT=0 - print_usage() { echo "$(basename $0) -- HG subrepository importer for git-remote-hg" echo "Usage: $(basename $0) [OPTIONS...]" } -# We parse the projrc file in the assembly (on the server), to check -# for any projrc substitutions. -# -# Arg 1: repository (path and name) -# -# Return the substitution key/values in arrays: -# PROJRC_KEY -# PROJRC_VAL -# PROJRC_COUNT will be greater than zero if any substitutions were found. -hg_parse_projrc() { - if [ ${#} -lt 1 ]; then - echo "Missing repository name" - fi - - # Repo name can have spaces in it, hence the use of ${*} - local repo="${*}" - - if [ -f "${repo}/.hg/projrc" ]; then - - TMPF="/tmp/$(basename $0).projrc-$$.tmp" - - # Create temporary copy to replace backslashes with slashes. - # Make sure to only replace path backslashes, not backslashes for - # quoting spaces. - # \\[^ ] Match a backslash, not followed by a space - cat "${repo}/.hg/projrc" | sed 's/\\\([^ ]\)/\/\1/g' > ${TMPF} - - while read p; do - if echo ${p} | grep -q "\s=\s"; then - local key=$(echo ${p} | sed 's/^\(.*\) = .*/\1/') - local val=$(echo ${p} | sed 's/.* = \(.*\)/\1/') - - PROJRC_KEY[${PROJRC_COUNT}]="${key}" - PROJRC_VAL[${PROJRC_COUNT}]="${val}" - - if [ -n "${debug}" ]; then - echo "Parsing PROJRC entry: ${p}" - echo " key: ${key}" - echo " val: ${val}" - fi - - PROJRC_COUNT=$((PROJRC_COUNT + 1)) - fi - done < ${TMPF} - - rm ${TMPF} - fi -} - -# We parse the Mercurial configuration, to check -# for any SUBPATHS substitutions. -# -# Return the substitution key/values in arrays: -# SUBPATHS_KEY -# SUBPATHS_VAL -# SUBPATHS_COUNT will be greater than zero if any substitutions were found. -hg_parse_subpaths() { - subpaths=$(hg showconfig subpaths) - - if [ -n "${subpaths}" ]; then - for p in ${subpaths}; do - local key=$(echo ${p} | sed 's/^subpaths\.\(.*\)=.*/\1/') - local val=$(echo ${p} | sed 's/.*=\(.*\)/\1/') - - # Replace '\\' with '/' - key=${key//\\\\/\/} - # ^^ replace multiple times - - val=${val//\\\\/\/} - - SUBPATHS_KEY[${SUBPATHS_COUNT}]="${key}" - SUBPATHS_VAL[${SUBPATHS_COUNT}]="${val}" - - if [ -n "${debug}" ]; then - echo "Parsing SUBPATHS entry: ${p}" - echo " key: ${key}" - echo " val: ${val}" - fi - - SUBPATHS_COUNT=$((SUBPATHS_COUNT + 1)) - done - fi -} - -# Replace the given path with either entries from PROJRC or SUBPATHS -# Arg 1: path -apply_substitutions() { - # Repo name can have spaces in it, hence the use of ${*} - local path="${*}" - - if [ ${PROJRC_COUNT} -ne 0 ]; then - for s in $(seq 0 $((${PROJRC_COUNT} - 1))); do - local pattern=${PROJRC_KEY[${s}]} - local replacement=${PROJRC_VAL[${s}]} - - path=${path/${pattern}/${replacement}} - done - fi - - if [ ${SUBPATHS_COUNT} -ne 0 ]; then - for s in $(seq 0 $((${SUBPATHS_COUNT} - 1))); do - local pattern=${SUBPATHS_KEY[${s}]} - local replacement=${SUBPATHS_VAL[${s}]} - - path=${path/${pattern}/${replacement}} - done - fi - - echo "${path}" -} - -# Map a revision to a branch name in HG subrepository -# Use hg log (in original repo) to get branch name corresponding to that -# revision. -# -# Arg 1: subrepository URL -# Arg 2: id -# Arg 3: revision -subrepo_find_branch() { - local src="${1}" - local id="${2}" - local rev="${3}" - - pushd "${src}" 1> /dev/null - - branch=$(hg log -r ${rev} | grep "branch:" | sed "s/branch:\ *//") - - if [ -z "${branch}" ]; then - # If "branch:" is null, this indicate we are on the default branch - branch=default - fi - - num=$(hg log --branch "${branch}" --template '{node}\n' | \ - grep -n ${rev} | awk -F ':' '{print $1}') - - if [ -n "${debug}" ]; then - echo " branch: ${branch}" - echo " num: ${num}" - fi - - popd 1> /dev/null -} - if [ "x${1}" = "x--help" ]; then print_usage exit 1 @@ -263,4 +121,3 @@ while read sub; do done < ${HGSUB_TMP} rm ${HGSUB_TMP} -