@@ -26,8 +26,10 @@ describe () { if test -f version then VN=$(cat version) || VN="$DEF_VER"-elif test ! -d ${GIT_DIR:-.git} -a ! -f .git || ! describe+elif test -d ${GIT_DIR:-.git} -o -f .git && describe then+ VN=$(echo "$VN" | sed -e 's/-/~/g')+else VN="$DEF_VER" fi
@@ -6,22 +6,29 @@ DEF_VER=v1.8.4 LF=' '-# First see if there is a version file (included in release tarballs),-# then try git-describe, then default.-if test -f version-then- VN=$(cat version) || VN="$DEF_VER"-elif test -d ${GIT_DIR:-.git} -o -f .git &&- VN=$(git describe --match "v[0-9]*" --abbrev=7 HEAD 2>/dev/null) &&+describe () {+ VN=$(git describe --match "v[0-9]*" --abbrev=7 HEAD 2>/dev/null) || return 1 case "$VN" in- *$LF*) (exit 1) ;;+ *$LF*)+ return 1+ ;; v[0-9]*) git update-index -q --refresh test -z "$(git diff-index --name-only HEAD --)" ||- VN="$VN-dirty" ;;+ VN="$VN-dirty"+ return 0+ ;; esac+}++# First see if there is a version file (included in release tarballs),+# then try 'git describe', then default.+if test -f version+then+ VN=$(cat version) || VN="$DEF_VER"+elif test -d ${GIT_DIR:-.git} -o -f .git && describe then- VN=$(echo "$VN" | sed -e 's/-/./g');+ VN=$(echo "$VN" | sed -e 's/-/./g') else VN="$DEF_VER" fi
From: Felipe Contreras <hidden> Date: 2016-06-15 22:58:59
Virtually all packaging guidelines would prefer 1.8.4~rc1, over
1.8.4.rc1 or 1.8.4-rc1, so it makes sense to use that instead.
In particular, the only packaging we provide, git.spec, generates a
wrong version, because git-1.8.4 < git-1.8.4.rc1, changing to ~rc1 fixes
the problem as it's considered newer.
The same happens in dpkg.
Signed-off-by: Felipe Contreras <redacted>
---
GIT-VERSION-GEN | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: David Aguilar <hidden> Date: 2016-06-15 22:59:00
On Sat, Oct 12, 2013 at 12:07 AM, Felipe Contreras
[off-list ref] wrote:
quoted hunk
Virtually all packaging guidelines would prefer 1.8.4~rc1, over
1.8.4.rc1 or 1.8.4-rc1, so it makes sense to use that instead.
In particular, the only packaging we provide, git.spec, generates a
wrong version, because git-1.8.4 < git-1.8.4.rc1, changing to ~rc1 fixes
the problem as it's considered newer.
The same happens in dpkg.
Signed-off-by: Felipe Contreras <redacted>
---
GIT-VERSION-GEN | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
@@ -28,7 +28,7 @@ then VN=$(cat version) || VN="$DEF_VER" elif test -d ${GIT_DIR:-.git} -o -f .git && describe then- VN=$(echo "$VN" | sed -e 's/-/./g')+ VN=$(echo "$VN" | sed -e 's/-/~/g') else VN="$DEF_VER" fi--
This seems related:
http://lintian.debian.org/tags/rc-version-greater-than-expected-version.html
Should the RC tags in the Git repo be named v1.2.3~rc4 (tilde-rc#)
instead of dash-rc#, or does that not matter?
If so, would that change anything about this patch, or is it better to
normalize it all here?
The input is subtly different sometimes so I'm curious whether whether
"~" is preferred in all cases (particularly, by all package managers).
e.g.
$ git describe v1.5.0^
v1.5.0-rc4-372-g26cfcfb
$ git describe v1.5.0.1^
v1.5.0-27-g38eb932
--
David
From: Felipe Contreras <hidden> Date: 2016-06-15 22:59:00
On Sun, Oct 13, 2013 at 4:56 PM, David Aguilar [off-list ref] wrote:
On Sat, Oct 12, 2013 at 12:07 AM, Felipe Contreras
[off-list ref] wrote:
quoted
Virtually all packaging guidelines would prefer 1.8.4~rc1, over
1.8.4.rc1 or 1.8.4-rc1, so it makes sense to use that instead.
In particular, the only packaging we provide, git.spec, generates a
wrong version, because git-1.8.4 < git-1.8.4.rc1, changing to ~rc1 fixes
the problem as it's considered newer.
The same happens in dpkg.
Signed-off-by: Felipe Contreras <redacted>
---
GIT-VERSION-GEN | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
I thought so first, but then I realized ~ is not allowed in a ref.
If so, would that change anything about this patch, or is it better to
normalize it all here?
The input is subtly different sometimes so I'm curious whether whether
"~" is preferred in all cases (particularly, by all package managers).
e.g.
All package managers I investigated do handle ~ specially, and thus
recommend it for rc versioning, except pacman. So in pacman,
v1.5.0~rc4 would remain newer than v1.5.0, but that's not different
from the current situation, and there isn't much we can do about that.
From: Jonathan Nieder <hidden> Date: 2016-06-15 22:59:00
Hi,
David Aguilar wrote:
Felipe Contreras [off-list ref] wrote:
quoted
Virtually all packaging guidelines would prefer 1.8.4~rc1, over
1.8.4.rc1 or 1.8.4-rc1, so it makes sense to use that instead.
In particular, the only packaging we provide, git.spec, generates a
wrong version, because git-1.8.4 < git-1.8.4.rc1, changing to ~rc1 fixes
the problem as it's considered newer.
A more conservative fix would be to tweak the .spec generation in the
Makefile to follow whatever the appropriate Red Hat convention is.
For example, something like this:
-- >8 --
That way, programs that parse the git version by splitting at '.'
(there are more than a few, unfortunately) would continue to work, but
the packaging system would get the benefit of the proposed versioning
style change.
quoted
The same happens in dpkg.
Have you tested this? I thought the Debian packaging did not use the
GIT-VERSION-GEN generated version in this way.
[...]
If I understand correctly, that page has an exhaustive list of affected
packages in the Debian archive and doesn't include git.
Thanks and hope that helps,
Jonathan
From: Felipe Contreras <hidden> Date: 2016-06-15 22:59:00
On Mon, Oct 14, 2013 at 12:01 AM, Jonathan Nieder [off-list ref] wrote:
Hi,
David Aguilar wrote:
quoted
Felipe Contreras [off-list ref] wrote:
quoted
quoted
Virtually all packaging guidelines would prefer 1.8.4~rc1, over
1.8.4.rc1 or 1.8.4-rc1, so it makes sense to use that instead.
In particular, the only packaging we provide, git.spec, generates a
wrong version, because git-1.8.4 < git-1.8.4.rc1, changing to ~rc1 fixes
the problem as it's considered newer.
A more conservative fix would be to tweak the .spec generation in the
Makefile to follow whatever the appropriate Red Hat convention is.
For example, something like this:
That wouldn't work; VERSION doesn't have '-rc', it has '.rc'. and
what's the point of creating a new variable? It's a was of space.
git.spec: git.spec.in GIT-VERSION-FILE
- sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
+ sed -e 's/@@VERSION@@/$(GIT_VERSION_RPM)/g' < $< > $@+
mv $@+ $@
GIT_TARNAME = git-$(GIT_VERSION)
-- 8< --
That way, programs that parse the git version by splitting at '.'
(there are more than a few, unfortunately) would continue to work,
Do you have any evidence that such programs exist? Specifically,
programs that work with 1.8.4.rc1, but not 1.8.4-rc1 or 1.8.4~rc1. I
find that very very very unlikely.
Anyway, in the very very very unlikely scenario that somebody's script
does break they can report that, and we can revert. What's the
problem?
but
the packaging system would get the benefit of the proposed versioning
style change.
quoted
quoted
The same happens in dpkg.
Have you tested this?
% dpkg --compare-versions 1.8.4 gt 1.8.4~rc1 && echo yes || echo no
yes
% dpkg --compare-versions 1.8.4 gt 1.8.4-rc1 && echo yes || echo no
no
I thought the Debian packaging did not use the
GIT-VERSION-GEN generated version in this way.
It doesn't matter. The name of the package would be git-1.8.4~rc1, and
'git --version' would return 1.8.4.rc1, that's inconsistent.
Why be inconsistent when we can be consistent?