X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=scripts%2Fgit-hg-sub-import;h=0180d4f972663f32642886f0f7ed6be1961c8543;hb=59fb465bf6817676c612161fb57af10d0381120a;hp=6d18dc36a9036707dd6d19524b9fb4ab26bd4ab3;hpb=b1c95e2300c56be57c770ec2e8e8a44db7c89995;p=hvutilities.git diff --git a/scripts/git-hg-sub-import b/scripts/git-hg-sub-import index 6d18dc3..0180d4f 100755 --- a/scripts/git-hg-sub-import +++ b/scripts/git-hg-sub-import @@ -1,13 +1,15 @@ #!/bin/bash set -o errexit -# Uncomment to have verboswe debug output -#debug=1 +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/ -LSI_SRV=/mnt/server/research/Projects/HG_Repo +# Uncomment to have verbose debug output +#debug=1 print_usage() { @@ -15,34 +17,6 @@ print_usage() echo "Usage: $(basename $0) [OPTIONS...]" } -# 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 "${LSI_SRV}/${src}" - - 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 - - if [ -n "${debug}" ]; then - echo " branch: ${branch}" - fi - - popd -} - if [ "x${1}" = "x--help" ]; then print_usage exit 1 @@ -58,6 +32,16 @@ if [ ! -f .gitignore ]; then echo ".gitignore" > .gitignore fi +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 # Remove CR (DOS) @@ -65,22 +49,30 @@ while read sub; do if [ "${sub}" != "" ]; then # Get subrepository URL - src="${sub//*\/HG_REPO/}" + src="${sub//*= /}" + + # 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// =*}" # Get project ID (example: S0289) - id=$(echo ${sub} | sed "s/.*HG_REPO\(S[0-9][0-9][0-9][0-9]\).*/\1/") + id=$(echo ${sub} | sed "s/.*\(S[0-9][0-9][0-9][0-9]\).*/\1/") # Get revision of subrepository (remove CR from .hgsubstate) rev=$(cat .hgsubstate | tr -d '\r' | grep "${id}" | sed "s/ .*//") if [ -n "${debug}" ]; then - echo "repo: ${src}" - echo " id: ${id}" - echo " rev: ${rev}" - echo " dest: ${dest}" + echo "repo: ${repo}" + echo " path: ${srcpath}" + echo " id: ${id}" + echo " local: ${dest}" + echo " rev: ${rev}" fi if [ ! -d "${dest}" ]; then @@ -92,22 +84,40 @@ while read sub; do # "BRANCH___-___NAME" branch="${branch// /___}" - git clone "hg::${LSI_SRV}/${src}" "${dest}" + if [ -n "${debug}" ]; then + echo "branch: ${branch}" + fi + + git clone "hg::${src}" "${dest}" + + cd "${dest}" + + if [ -x ${HOME}/scripts/git-set-local-author.sh ]; then + # Make sure commits have correct author for LSI + ${HOME}/scripts/git-set-local-author.sh + fi if [ "x${branch}" != "xdefault" ]; then - cd "${dest}" - git checkout "branches/${branch}" - cd .. + # Make tracking branch + git checkout -f "branches/${branch}" + + # Adjusting git tree to specific commit specified in + # .hgsubstate: + # The SHA from hg and git are not the same, therefore, we must + # find the commit sequence in hg and map this + # to a hash in git using the ${num} variable: + git_rev=$(git log --oneline | sed -n "${num}p" | awk '{print $1}') + git reset --hard ${git_rev} fi + cd .. + if ! grep -q "${dest}" .gitignore ; then # Ignore subrepo in top-level git repository echo "${dest}" >> .gitignore fi - else - pushd "${dest}" - git pull - popd fi fi -done < .hgsub +done < ${HGSUB_TMP} + +rm ${HGSUB_TMP}