X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=scripts%2Fvs-sub;fp=scripts%2Fvs-sub;h=a08d1e8ab4992cf8aab28c66d007d22c2ce6141e;hb=9f40bfdeb295a2e018e3d39251a4f2383a904c82;hp=0000000000000000000000000000000000000000;hpb=37ec648edcf6dc34bedb64f4b595c32d7ea2e32f;p=hvutilities.git diff --git a/scripts/vs-sub b/scripts/vs-sub new file mode 100755 index 0000000..a08d1e8 --- /dev/null +++ b/scripts/vs-sub @@ -0,0 +1,109 @@ +#!/bin/bash +set -o errexit + +# Version control status command for all subrepositories. +# 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 + +print_usage() +{ + echo "$(basename $0) -- Version control subrepository status" + echo "Usage: $(basename $0) [OPTIONS...]" + echo "Options:" + echo " -h display this help and exit" + echo " -m display only subrepositories with local modifications" +} + +# git-remote-hg doesn't work with Mercurial subpaths extension, +# so use it manually +hg_subpaths_config() +{ + subpaths=$(hg showconfig | grep "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 +} + +display_subrepo_name() +{ + COLOR_BLUE='\033[1;34m' + COLOR_NORMAL='\033[0m' + + echo -en "${COLOR_BLUE}" + echo "[${dest}]" + echo -en "${COLOR_NORMAL}" +} + +if [ "x${1}" = "x--help" ]; then + print_usage + exit 1 +fi + +if [ ! -f .hgsub ]; then + echo "No Mercurial subrepositories found" + exit 1 +fi + +if [ ! -f .gitignore ]; then + # We do not want to track .gitignore itself + echo ".gitignore" > .gitignore +fi + +hg_subpaths_config + +# Read lines from .hgsub +while read sub; do + # Remove CR (DOS) + sub="${sub//$'\r'/}" + + if [ "${sub}" != "" ]; then + # Get subrepository URL + src="${sub//*= /}" + + # Replace using subpaths extension content + src=${src/${sp_src}/${sp_dst}} + + # Get subrepository local alias or label + dest="${sub// =*}" + + # Get project ID (example: S0289) + id=$(echo ${sub} | sed "s/.*\(S[0-9][0-9][0-9][0-9]\).*/\1/") + + if [ -n "${debug}" ]; then + echo "repo: ${src}" + echo " id: ${id}" + echo " src: ${src}" + echo " dest: ${dest}" + fi + + if [ -d "${dest}" ]; then + pushd "${dest}" 1> /dev/null + + changed=$(vs --porcelain) + + if [ -n "${changed}" ]; then + display_subrepo_name + vs -s + echo # Blank line + fi + + popd 1> /dev/null + else + display_subrepo_name + echo "Error: missing local subrepository" + echo # Blank line + fi + fi +done < .hgsub