# [PATCH 1/3] GIT-VERSION-GEN: make use of git describe --dirty

7 messages from 2010-10-22 to 2010-10-27. Participants: Mathias Lafeldt, Jonathan Nieder, Jakub Narebski.
Thread: https://gitlist.dev/t/25523

## Mathias Lafeldt, 2010-10-22 11:24

Subject: [PATCH 1/3] GIT-VERSION-GEN: make use of git describe --dirty
Message-ID: <4CC1745C.70506@debugon.org>
URL: https://gitlist.dev/e/4CC1745C.70506%40debugon.org
In-Reply-To: <cover.1287746107.git.misfire@debugon.org>

```
Currently, GIT-VERSION-GEN invokes the plumbing commands "git update-index" and
"git diff-index" to determine if the working tree is dirty. It then appends
"-dirty" to the version string returned by "git describe".

However, as of Git v1.6.6, "git describe" can be told to do all that with the
"--dirty" option, saving us the plumbing.

Signed-off-by: Mathias Lafeldt <misfire@debugon.org>
---
 GIT-VERSION-GEN |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index d441d88..73d5cf9 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -12,13 +12,10 @@ if test -f version
 then
 	VN=$(cat version) || VN="$DEF_VER"
 elif test -d .git -o -f .git &&
-	VN=$(git describe --match "v[0-9]*" --abbrev=4 HEAD 2>/dev/null) &&
+	VN=$(git describe --match "v[0-9]*" --abbrev=4 --dirty 2>/dev/null) &&
 	case "$VN" in
 	*$LF*) (exit 1) ;;
-	v[0-9]*)
-		git update-index -q --refresh
-		test -z "$(git diff-index --name-only HEAD --)" ||
-		VN="$VN-dirty" ;;
+	v[0-9]*) : ;;
 	esac
 then
 	VN=$(echo "$VN" | sed -e 's/-/./g');
-- 
1.7.3.2

```

## Mathias Lafeldt, 2010-10-22 11:24

Subject: [PATCH 2/3] GIT-VERSION-GEN: tweak processing of version file
Message-ID: <4CC17465.9040100@debugon.org>
URL: https://gitlist.dev/e/4CC17465.9040100%40debugon.org
In-Reply-To: <cover.1287746107.git.misfire@debugon.org>

```
- check for version file with "test -r"
- read version file using shell builtin "read" rather than "cat"

Signed-off-by: Mathias Lafeldt <misfire@debugon.org>
---
 GIT-VERSION-GEN |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 73d5cf9..427d5d6 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -8,9 +8,9 @@ LF='
 
 # First see if there is a version file (included in release tarballs),
 # then try git-describe, then default.
-if test -f version
+if test -r version
 then
-	VN=$(cat version) || VN="$DEF_VER"
+	read VN 2>/dev/null < version || VN="$DEF_VER"
 elif test -d .git -o -f .git &&
 	VN=$(git describe --match "v[0-9]*" --abbrev=4 --dirty 2>/dev/null) &&
 	case "$VN" in
-- 
1.7.3.2

```

## Mathias Lafeldt, 2010-10-22 11:24

Subject: [PATCH 3/3] GIT-VERSION-GEN: style nitpicks
Message-ID: <4CC1746D.5070907@debugon.org>
URL: https://gitlist.dev/e/4CC1746D.5070907%40debugon.org
In-Reply-To: <cover.1287746107.git.misfire@debugon.org>

```
- remove superfluous semicolon
- simplify version comparison
- remove empty lines at end of file

Signed-off-by: Mathias Lafeldt <misfire@debugon.org>
---
 GIT-VERSION-GEN |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 427d5d6..60bef5a 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -18,7 +18,7 @@ elif test -d .git -o -f .git &&
 	v[0-9]*) : ;;
 	esac
 then
-	VN=$(echo "$VN" | sed -e 's/-/./g');
+	VN=$(echo "$VN" | sed -e 's/-/./g')
 else
 	VN="$DEF_VER"
 fi
@@ -31,9 +31,9 @@ then
 else
 	VC=unset
 fi
-test "$VN" = "$VC" || {
+
+if test "$VN" != "$VC"
+then
 	echo >&2 "GIT_VERSION = $VN"
 	echo "GIT_VERSION = $VN" >$GVF
-}
-
-
+fi
-- 
1.7.3.2

```

## Jonathan Nieder, 2010-10-22 15:11

Subject: Re: [PATCH 1/3] GIT-VERSION-GEN: make use of git describe --dirty
Message-ID: <20101022151140.GC9224@burratino>
URL: https://gitlist.dev/e/20101022151140.GC9224%40burratino
In-Reply-To: <4CC1745C.70506@debugon.org>

```
Mathias Lafeldt wrote:

> Currently, GIT-VERSION-GEN invokes the plumbing commands "git update-index" and
> "git diff-index" to determine if the working tree is dirty. It then appends
> "-dirty" to the version string returned by "git describe".
> 
> However, as of Git v1.6.6, "git describe" can be told to do all that with the
> "--dirty" option, saving us the plumbing.

This has a minor downside, which is avoiding the nice version numbers when
building Git with git 1.5.6 installed.  What is the upside?

```

## Mathias Lafeldt, 2010-10-23 12:23

Subject: Re: [PATCH 1/3] GIT-VERSION-GEN: make use of git describe --dirty
Message-ID: <4CC2D3B4.5030607@debugon.org>
URL: https://gitlist.dev/e/4CC2D3B4.5030607%40debugon.org
In-Reply-To: <20101022151140.GC9224@burratino>

```
On 10/22/2010 05:11 PM, Jonathan Nieder wrote:
> Mathias Lafeldt wrote:
> 
>> Currently, GIT-VERSION-GEN invokes the plumbing commands "git update-index" and
>> "git diff-index" to determine if the working tree is dirty. It then appends
>> "-dirty" to the version string returned by "git describe".
>>
>> However, as of Git v1.6.6, "git describe" can be told to do all that with the
>> "--dirty" option, saving us the plumbing.
> 
> This has a minor downside, which is avoiding the nice version numbers when
> building Git with git 1.5.6 installed.  What is the upside?

The upside is that the number of executed commands to get the version string
is reduced from three to one.

I understand your point, though it would only be a "problem" once when
doing the upgrade.

If backwards compatibility is more important here, I'd at least add a comment
to GIT-VERSION-GEN. Something like:

diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index d441d88..5c226f6 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -16,6 +16,10 @@ elif test -d .git -o -f .git &&
        case "$VN" in
        *$LF*) (exit 1) ;;
        v[0-9]*)
+               # As of Git v1.6.6, we can use "git describe --dirty" to
+               # determine if the working tree is dirty. However, to still
+               # have nice version numbers when building Git with older
+               # versions of git installed, we keep using plumbing.
                git update-index -q --refresh
                test -z "$(git diff-index --name-only HEAD --)" ||
                VN="$VN-dirty" ;;

-Mathias

```

## Mathias Lafeldt, 2010-10-27 07:50

Subject: Re: [PATCH 1/3] GIT-VERSION-GEN: make use of git describe --dirty
Message-ID: <4CC7D9CA.1080609@debugon.org>
URL: https://gitlist.dev/e/4CC7D9CA.1080609%40debugon.org
In-Reply-To: <4CC2D3B4.5030607@debugon.org>

```
Mathias Lafeldt wrote:
> On 10/22/2010 05:11 PM, Jonathan Nieder wrote:
>> Mathias Lafeldt wrote:
>>
>>> Currently, GIT-VERSION-GEN invokes the plumbing commands "git update-index" and
>>> "git diff-index" to determine if the working tree is dirty. It then appends
>>> "-dirty" to the version string returned by "git describe".
>>>
>>> However, as of Git v1.6.6, "git describe" can be told to do all that with the
>>> "--dirty" option, saving us the plumbing.
>> This has a minor downside, which is avoiding the nice version numbers when
>> building Git with git 1.5.6 installed.  What is the upside?
> 
> The upside is that the number of executed commands to get the version string
> is reduced from three to one.
> 
> I understand your point, though it would only be a "problem" once when
> doing the upgrade.
> 
> If backwards compatibility is more important here, I'd at least add a comment
> to GIT-VERSION-GEN. Something like:
> 
> diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
> index d441d88..5c226f6 100755
> --- a/GIT-VERSION-GEN
> +++ b/GIT-VERSION-GEN
> @@ -16,6 +16,10 @@ elif test -d .git -o -f .git &&
>         case "$VN" in
>         *$LF*) (exit 1) ;;
>         v[0-9]*)
> +               # As of Git v1.6.6, we can use "git describe --dirty" to
> +               # determine if the working tree is dirty. However, to still
> +               # have nice version numbers when building Git with older
> +               # versions of git installed, we keep using plumbing.
>                 git update-index -q --refresh
>                 test -z "$(git diff-index --name-only HEAD --)" ||
>                 VN="$VN-dirty" ;;
> 

Any feedback would be welcome.

-Mathias

```

## Jakub Narebski, 2010-10-27 14:28

Subject: Re: [PATCH 1/3] GIT-VERSION-GEN: make use of git describe --dirty
Message-ID: <m3sjzriuc2.fsf@localhost.localdomain>
URL: https://gitlist.dev/e/m3sjzriuc2.fsf%40localhost.localdomain
In-Reply-To: <4CC7D9CA.1080609@debugon.org>

```
Mathias Lafeldt <misfire@debugon.org> writes:
> Mathias Lafeldt wrote:

> > diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
> > index d441d88..5c226f6 100755
> > --- a/GIT-VERSION-GEN
> > +++ b/GIT-VERSION-GEN
> > @@ -16,6 +16,10 @@ elif test -d .git -o -f .git &&
> >         case "$VN" in
> >         *$LF*) (exit 1) ;;
> >         v[0-9]*)
> > +               # As of Git v1.6.6, we can use "git describe --dirty" to
> > +               # determine if the working tree is dirty. However, to still
> > +               # have nice version numbers when building Git with older
> > +               # versions of git installed, we keep using plumbing.
> >                 git update-index -q --refresh
> >                 test -z "$(git diff-index --name-only HEAD --)" ||
> >                 VN="$VN-dirty" ;;
> > 
> 
> Any feedback would be welcome.

I like it, also because people who use GIT-VERSION-GEN from git
repository as inspiration would get to know more modern technique.

-- 
Jakub Narebski
Poland
ShadeHawk on #git

```
