# http://felipec.wordpress.com/2012/11/13/git-remote-hg-bzr-2/
# Uncomment to have verbose debug output
-#debug=1
+debug=1
print_usage()
{
# git-remote-hg doesn't work with Mercurial subpaths extension,
# so use it manually
hg_subpaths_config() {
- subpaths=$(hg showconfig | grep "subpaths")
+ subpaths=$(hg showconfig | grep "subpaths" | grep "HG_REPO")
+
+ echo "subpaths = ${subpaths}"
if [ -n ${subpaths} ]; then
sp_src=${subpaths//subpaths./}
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.
# 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: ${src}"
+ echo "repo: ${repo}"
+ echo " path: ${srcpath}"
echo " id: ${id}"
- echo " rev: ${rev}"
- echo " src: ${src}"
+ echo " src: ${projrc_sub}"
echo " dest: ${dest}"
+ echo " rev: ${rev}"
fi
if [ ! -d "${dest}" ]; then
# "BRANCH___-___NAME"
branch="${branch// /___}"
+ 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}"
+ # Make tracking branch
+ git checkout -f "branches/${branch}"
# Adjusting git tree to specific commit specified in
# .hgsubstate:
# 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}
-
- cd ..
fi
+ cd ..
+
if ! grep -q "${dest}" .gitignore ; then
# Ignore subrepo in top-level git repository
echo "${dest}" >> .gitignore