[PATCH] git-submodule: Try harder to describe the status of a submodule
From: Emil Medve <hidden>
Date: 2016-06-15 22:43:18
Subsystem:
the rest · Maintainer:
Linus Torvalds
Some repositories might not use/have annotated tags (for example repositories created with git-cvsimport) or might not have tags at all and could cause git-submodule status to fail because git-describe might fail. This change makes git-submodule status try harder in displaying the status of a module by considering lightweight tags, subsequent tags and branches. Signed-off-by: Emil Medve <redacted> --- git-submodule.sh | 23 +++++++++++++++++++++-- 1 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 89a3885..7429ce3 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh@@ -134,6 +134,25 @@ modules_update() } # +# Identify and display the most specific name describing an object specified by a SHA1 key +# +# First try to locate a tag that predates the commit. If that fails try to locate a tag that comes +# after the commit. If that fails too (e.g. undefined), try to locate the branch of the commit. If +# that fails too just display "undefined" +# +get_revname() +{ + _revname=$(git-describe --tags "$1" 2>/dev/null || git-describe --contains "$1" 2>/dev/null) + if test -z "$_revname" -o "$_revname" = "undefined" + then + _revname=$(git-describe --all "$1" 2>/dev/null | cut -d / -f2-) + test -z "$_revname" && _revname=undefined + fi + echo $_revname + unset _revname +} + +# # List all submodules, prefixed with: # - submodule not initialized # + different revision checked out
@@ -155,7 +174,7 @@ modules_list() say "-$sha1 $path" continue; fi - revname=$(unset GIT_DIR && cd "$path" && git-describe $sha1) + revname=$(unset GIT_DIR && cd "$path" && get_revname $sha1) if git diff-files --quiet -- "$path" then say " $sha1 $path ($revname)"
@@ -163,7 +182,7 @@ modules_list() if test -z "$cached" then sha1=$(unset GIT_DIR && cd "$path" && git-rev-parse --verify HEAD) - revname=$(unset GIT_DIR && cd "$path" && git-describe $sha1) + revname=$(unset GIT_DIR && cd "$path" && get_revname $sha1) fi say "+$sha1 $path ($revname)" fi
--
1.5.2.2.549.gaeb59