# [PATCH] git-submodule - possibly use remote branch to describe a module

5 messages from 2008-04-14 to 2008-04-15. Participants: Mark Levedahl, Junio C Hamano.
Thread: https://gitlist.dev/t/13111

## Mark Levedahl, 2008-04-14 23:52

Subject: [PATCH] git-submodule - possibly use remote branch to describe a module
Message-ID: <1208217154-992-1-git-send-email-mlevedahl@gmail.com>
URL: https://gitlist.dev/e/1208217154-992-1-git-send-email-mlevedahl%40gmail.com

```
Absent user intervention, git-submodule will maintain submodules as
headless checkouts of remote branches: such checkouts cannot be described
with reference to any local branch. So, allow describing the submodule
using remote branches before falling back on just using the commit id.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
---
 git-submodule.sh |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 28509ea..af195a7 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -389,7 +389,8 @@ set_name_rev () {
 		cd "$1" && {
 			git describe "$2" 2>/dev/null ||
 			git describe --tags "$2" 2>/dev/null ||
-			git describe --contains --tags --always "$2"
+			git describe --contains "$2" 2>/dev/null ||
+			git describe --all --always "$2"
 		}
 	) )
 	test -z "$revname" || revname=" ($revname)"
-- 
1.5.5.65.gf482

```

## Junio C Hamano, 2008-04-15 00:39

Subject: Re: [PATCH] git-submodule - possibly use remote branch to describe a module
Message-ID: <7viqyk6je7.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7viqyk6je7.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <1208217154-992-1-git-send-email-mlevedahl@gmail.com>

```
Mark Levedahl <mlevedahl@gmail.com> writes:

> Absent user intervention, git-submodule will maintain submodules as
> headless checkouts of remote branches: such checkouts cannot be described
> with reference to any local branch. So, allow describing the submodule
> using remote branches before falling back on just using the commit id.
>
> Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
> ---
>  git-submodule.sh |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/git-submodule.sh b/git-submodule.sh
> index 28509ea..af195a7 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -389,7 +389,8 @@ set_name_rev () {
>  		cd "$1" && {
>  			git describe "$2" 2>/dev/null ||
>  			git describe --tags "$2" 2>/dev/null ||
> -			git describe --contains --tags --always "$2"
> +			git describe --contains "$2" 2>/dev/null ||
> +			git describe --all --always "$2"
>  		}
>  	) )
>  	test -z "$revname" || revname=" ($revname)"

I think the new fallback sequence makes sense, but your explanation made
sense for me only after reading it two and half times.

 - The original sequence ended with "--contains --always" which always
   succeeded but with an abbrevated object name.  You removed --always
   from it so that you can add a better last-ditch effort that uses remote
   references.

   Side note.  Removal of --tags from it is not justified in your log
   message.  It is sort of obvious if you think about it, though...

 - The new one at the end uses --all because the HEAD is likely to be
   describable with remote references, and without --all remote reference
   namespace is not searched for a match.

```

## Mark Levedahl, 2008-04-15 01:55

Subject: Re: [PATCH] git-submodule - possibly use remote branch to describe a module
Message-ID: <48040B19.5030800@gmail.com>
URL: https://gitlist.dev/e/48040B19.5030800%40gmail.com
In-Reply-To: <7viqyk6je7.fsf@gitster.siamese.dyndns.org>

```
Junio C Hamano wrote:
>
> I think the new fallback sequence makes sense, but your explanation made
> sense for me only after reading it two and half times.
>
>   
So, would you like for me to attempt a better log message?

Mark

```

## Mark Levedahl, 2008-04-15 02:19

Subject: [PATCH] git-submodule - possibly use remote branch to describe a module
Message-ID: <1208225951-1560-1-git-send-email-mlevedahl@gmail.com>
URL: https://gitlist.dev/e/1208225951-1560-1-git-send-email-mlevedahl%40gmail.com
In-Reply-To: <7viqyk6je7.fsf@gitster.siamese.dyndns.org>

```
This changes the search logic for describing a submodule from:
- local branch
- tag
- tag on a later commit
- commit id

to

- local branch
- tag
- tag on a subsequent commit
- remote branch
- commit id

The change is describing with respect to a remote branch before falling
back to the commit id. By itself, git-submodule will maintain submodules
as headless checkouts without ever making a local branch. In
general, such heads cannot be described relative to a local branch but
can always be described relative to the remote branch.

This requires two describe steps in place of one: the first with
"--contains" (and no "--tags" as that is implied by "--contains"), and
a new final step having "--all --always". The split is needed as
"--contains" is incompatible with "--all".

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
---
 git-submodule.sh |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 28509ea..af195a7 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -389,7 +389,8 @@ set_name_rev () {
 		cd "$1" && {
 			git describe "$2" 2>/dev/null ||
 			git describe --tags "$2" 2>/dev/null ||
-			git describe --contains --tags --always "$2"
+			git describe --contains "$2" 2>/dev/null ||
+			git describe --all --always "$2"
 		}
 	) )
 	test -z "$revname" || revname=" ($revname)"
-- 
1.5.5.65.gf482

```

## Mark Levedahl, 2008-04-15 02:48

Subject: [PATCH] git-submodule - possibly use branch name to describe a module
Message-ID: <1208227686-696-1-git-send-email-mlevedahl@gmail.com>
URL: https://gitlist.dev/e/1208227686-696-1-git-send-email-mlevedahl%40gmail.com
In-Reply-To: <1208225951-1560-1-git-send-email-mlevedahl@gmail.com>

```
This changes the search logic for describing a submodule from:
- annotated tag
- any tag
- tag on a subsequent commit
- commit id

to

- annotated tag
- any tag
- tag on a subsequent commit
- local or remote branch
- commit id

The change is describing with respect to a branch before falling
back to the commit id. By itself, git-submodule will maintain submodules
as headless checkouts without ever making a local branch. In
general, such heads can always be described relative to the remote branch
regardless of existence of tags, and so provides a better fallback
summary than just the commit id.

This requires inserting an extra describe step as --contains is
incompatible with --all, but the latter can be used with --always
to fall back to a commit ID. Also, --contains implies --tags, so the
latter is not needed.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
---
One more try - I mistakenly thought bare describe allowed
local branches, not just tags, so the logic IS different.W Oops.

 git-submodule.sh |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 28509ea..af195a7 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -389,7 +389,8 @@ set_name_rev () {
 		cd "$1" && {
 			git describe "$2" 2>/dev/null ||
 			git describe --tags "$2" 2>/dev/null ||
-			git describe --contains --tags --always "$2"
+			git describe --contains "$2" 2>/dev/null ||
+			git describe --all --always "$2"
 		}
 	) )
 	test -z "$revname" || revname=" ($revname)"
--
1.5.5.65.gf482

```
