git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git-submodule: Try harder to describe the status of a submodule

From
EMEmil Medve <emilian.medve@freescale.com>
Date
Jun 27, 2007, 19:13 UTC
Message-ID
<118297160163-git-send-email-Emilian.Medve@Freescale.com>

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 <Emilian.Medve@Freescale.com>
---
 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
Next: Junio C Hamano
Message 1 of 4 in “git-submodule: Try harder to describe the status of a submodule”
  1. git-submodule: Try harder to describe the status of a submoduleEmil Medve, Jun 27, 2007
  2. Junio C HamanoJun 28, 2007
  3. Medve Emilian-EMMEDVE1Jun 28, 2007
  4. Medve Emilian-EMMEDVE1Jul 2, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.