threads / patch / 8752

patchgit-submodule: Try harder to describe the status of a submodule

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

## tl;dr

4 messages between Jun 27, 2007 and Jul 2, 2007. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Emil Medve· Jun 27, 2007, 19:13 UTC · lore

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(-)
Show changes to git-submodule.sh +21 −2
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
Junio C Hamano· Jun 28, 2007, 04:24 UTC · re: Emil Medve · lore

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

Emil Medve <Emilian.Medve@Freescale.com> writes:
Show 6 quoted lines
> 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.
Why are we suddenly seeing these loooooooong lines...
Show 8 quoted lines
> +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

I really do not think using --all is useful. If you do not have a tag and the rev cannot be described, what damage does it incur?

We still say "$sha1 $path" in the output anyway, and ($revname) is only "it makes it nicer" appendix.

Show 9 quoted lines
> @@ -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)"

In that sense, I would prefer mine much better. If a rev is indescribable, your version would say:

	" dddddddddddddddddddddddddddddddddddddddd subdir (undefined)"
while mine would have said:
	" dddddddddddddddddddddddddddddddddddddddd subdir"
Medve Emilian-EMMEDVE1· Jun 28, 2007, 13:01 UTC · re: Junio C Hamano · lore

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

Hello Junio,
Alright, let's go with your patch.

Cheers, Emil.

This e-mail, and any associated attachments have been classified as: -------------------------------------------------------------------- [x] Public [ ] Freescale Semiconductor Internal Use Only [ ] Freescale Semiconductor Confidential Proprietary

-----Original Message-----
From: Junio C Hamano [mailto:gitster@pobox.com] 
Sent: Wednesday, June 27, 2007 11:25 PM
To: Medve Emilian-EMMEDVE1
Cc: git@vger.kernel.org
Subject: Re: [PATCH] git-submodule: Try harder to describe the status of
a submodule
Emil Medve <Emilian.Medve@Freescale.com> writes:
> 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.
Why are we suddenly seeing these loooooooong lines...
> +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

I really do not think using --all is useful. If you do not have a tag and the rev cannot be described, what damage does it incur?

We still say "$sha1 $path" in the output anyway, and ($revname) is only "it makes it nicer" appendix.

Show 5 quoted lines
> @@ -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)"

In that sense, I would prefer mine much better. If a rev is indescribable, your version would say:

	" dddddddddddddddddddddddddddddddddddddddd subdir (undefined)"
while mine would have said:
	" dddddddddddddddddddddddddddddddddddddddd subdir"
Medve Emilian-EMMEDVE1· Jul 2, 2007, 15:44 UTC · re: Medve Emilian-EMMEDVE1 · lore

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

Hello Junio,

I noticed the 1.5.2.3 tag and the plans for 1.5.3-rc1 and I was wondering when do you think you'll apply your submodule patch? Is there any way I can help with it?

Thanks, Emil.

This e-mail, and any associated attachments have been classified as: -------------------------------------------------------------------- [x] Public [ ] Freescale Semiconductor Internal Use Only [ ] Freescale Semiconductor Confidential Proprietary

-----Original Message-----
From: git-owner@vger.kernel.org [mailto:git-owner@vger.kernel.org] On
Behalf Of Medve Emilian-EMMEDVE1
Sent: Thursday, June 28, 2007 8:01 AM
To: git@vger.kernel.org
Subject: RE: [PATCH] git-submodule: Try harder to describe the status of
a submodule
Hello Junio,
Alright, let's go with your patch.

Cheers, Emil.

This e-mail, and any associated attachments have been classified as: -------------------------------------------------------------------- [x] Public [ ] Freescale Semiconductor Internal Use Only [ ] Freescale Semiconductor Confidential Proprietary

-----Original Message-----
From: Junio C Hamano [mailto:gitster@pobox.com] 
Sent: Wednesday, June 27, 2007 11:25 PM
To: Medve Emilian-EMMEDVE1
Cc: git@vger.kernel.org
Subject: Re: [PATCH] git-submodule: Try harder to describe the status of
a submodule
Emil Medve <Emilian.Medve@Freescale.com> writes:
> 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.
Why are we suddenly seeing these loooooooong lines...
> +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

I really do not think using --all is useful. If you do not have a tag and the rev cannot be described, what damage does it incur?

We still say "$sha1 $path" in the output anyway, and ($revname) is only "it makes it nicer" appendix.

Show 5 quoted lines
> @@ -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)"

In that sense, I would prefer mine much better. If a rev is indescribable, your version would say:

	" dddddddddddddddddddddddddddddddddddddddd subdir (undefined)"
while mine would have said:
	" dddddddddddddddddddddddddddddddddddddddd subdir"

← back to recent threads