X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=scripts%2Fgit-hg-sub-import;h=0180d4f972663f32642886f0f7ed6be1961c8543;hb=59fb465bf6817676c612161fb57af10d0381120a;hp=38f862187d3c6199d675f63dc9cc18d156702b60;hpb=37ec648edcf6dc34bedb64f4b595c32d7ea2e32f;p=hvutilities.git diff --git a/scripts/git-hg-sub-import b/scripts/git-hg-sub-import index 38f8621..0180d4f 100755 --- a/scripts/git-hg-sub-import +++ b/scripts/git-hg-sub-import @@ -1,11 +1,15 @@ #!/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 +#debug=1 print_usage() { @@ -13,93 +17,6 @@ print_usage() echo "Usage: $(basename $0) [OPTIONS...]" } -# git-remote-hg doesn't work with Mercurial subpaths extension, -# so use it manually -hg_subpaths_config() { - subpaths=$(hg showconfig | grep "subpaths" | grep "HG_REPO") - - echo "subpaths = ${subpaths}" - - if [ -n ${subpaths} ]; then - sp_src=${subpaths//subpaths./} - sp_src=${sp_src//=*/} - sp_src=${sp_src//\\/} # Remove windows separator (LSI) - sp_dst=${subpaths//*=/} - - if [ -n "${debug}" ]; then - echo "sp_src = $sp_src" - echo "sp_dst = $sp_dst" - fi - fi -} - -# git-remote-hg doesn't work with Mercurial projrc extension, -# so use it manually. -# We parse the projrc file in the assembly (on the server), to check -# for any projrc substitutions. -# -# Arg 1: subproject (path and name) -# -# Return the new substitution name if found, and original subrepo name if not -# (with the path stripped) -hg_check_projrc_config() { - if [ ${#} -lt 1 ]; then - echo "Missing subrepos name" - fi - - # Repo name can have spaces in it, hence the use of ${*} - local subrepo_orig="${*}" - local subrepo="${*}" - - # Quote spaces - subrepo=${subrepo// /\\\\ } - - asm=$(cat .git/config | grep "hg::" | sed "s/.*url = hg::\(.*\)/\1/") - - local baserepo=$(basename "${subrepo}") - - if cat "${asm}/.hg/projrc" | grep -q "${baserepo}" ; then - projrc=$(cat "${asm}/.hg/projrc" | grep "${baserepo}" | sed "s/.*= \(.*\)/\1/") - else - # No substitution, return same name as original - projrc=$(basename "${subrepo_orig}") - fi - - echo "${projrc}" -} - -# 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 @@ -115,7 +32,15 @@ if [ ! -f .gitignore ]; then echo ".gitignore" > .gitignore fi -hg_subpaths_config +asm=$(cat .git/config | grep "hg::" | sed "s/.*url = hg::\(.*\)/\1/") +hg_parse_projrc ${asm} + +hg_parse_subpaths + +HGSUB_TMP="/tmp/$(basename $0).hgsub-$$.tmp" + +# Create temporary copy to replace backslashes with slashes. +cat .hgsub | sed 's/\\/\//g' > ${HGSUB_TMP} # Read lines from .hgsub while read sub; do @@ -126,8 +51,12 @@ while read sub; do # Get subrepository URL src="${sub//*= /}" - # Replace using subpaths extension content - src=${src/${sp_src}/${sp_dst}} + # Replace using Mercurial subpaths substitutions (either projrc or from hgrc) + src=$(apply_substitutions ${src}) + + # Original name + repo=$(basename "${src}") + srcpath=$(dirname "${src}") # Get subrepository local alias or label dest="${sub// =*}" @@ -138,20 +67,12 @@ while read sub; do # Get revision of subrepository (remove CR from .hgsubstate) rev=$(cat .hgsubstate | tr -d '\r' | grep "${id}" | sed "s/ .*//") - # Original name - repo=$(basename "${src}") - srcpath=$(dirname "${src}") - - projrc_sub=$(hg_check_projrc_config "${src}") - src="${srcpath}/${projrc_sub}" - if [ -n "${debug}" ]; then echo "repo: ${repo}" - echo " path: ${srcpath}" - echo " id: ${id}" - echo " src: ${projrc_sub}" - echo " dest: ${dest}" - echo " rev: ${rev}" + echo " path: ${srcpath}" + echo " id: ${id}" + echo " local: ${dest}" + echo " rev: ${rev}" fi if [ ! -d "${dest}" ]; then @@ -197,4 +118,6 @@ while read sub; do fi fi fi -done < .hgsub +done < ${HGSUB_TMP} + +rm ${HGSUB_TMP}