--- /dev/null
+#!/bin/bash
+
+print_usage()
+{
+ echo "$(basename $0) -- gives status of version control subrepositories."
+ echo "Usage: $(basename $0) [OPTIONS...]"
+ echo "Options:"
+ echo " -h display this help and exit"
+ echo " -m display only subrepositories with local modifications"
+}
+
+while getopts "hm" flag ;do
+ case ${flag} in
+ h)
+ print_usage
+ exit 0
+ ;;
+ m)
+ DISPLAY_LOCAL_MODS_ONLY=1
+ ;;
+ ?)
+ echo "${PROG_NAME}: Invalid option: ${OPTARG}."
+ echo "Try \`${PROG_NAME} --help' for more information."
+ exit 1
+ ;;
+ esac
+done
+shift `expr "${OPTIND}" - 1`
+
+# `$#' now represents the number of arguments after the options.
+# `$1' is the first argument, etc.
+
+if [ ! -f .hgsub ]; then
+ echo "No Mercurial subrepositories found"
+ exit 1
+fi
+
+# 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/")
+
+ # 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 " src: ${src}"
+ echo " dest: ${dest}"
+ fi
+
+ pushd "${dest}" 1> /dev/null
+
+ if vs | grep -q "nothing to commit"; then
+ LOCAL_MODS=0
+ else
+ LOCAL_MODS=1
+ fi
+
+ if [ "x${DISPLAY_LOCAL_MODS_ONLY}" != "x1" ]; then
+ # Force to display all subrepositories if -m is not specified
+ LOCAL_MODS=1
+ fi
+
+ if [ "x${LOCAL_MODS}" = "x1" ]; then
+ echo "============================"
+ echo "subrepo: ${dest}"
+ vs
+ fi
+
+ popd 1> /dev/null
+ fi
+done < .hgsub