* [PATCH] classes/gitpkgv.bbclass: add GITPKGVTAG that uses 'git describe'
@ 2010-12-16 14:35 Otavio Salvador
2010-12-16 16:07 ` Otavio Salvador
0 siblings, 1 reply; 5+ messages in thread
From: Otavio Salvador @ 2010-12-16 14:35 UTC (permalink / raw)
To: openembedded-devel; +Cc: Otavio Salvador
Using ${GITPKGVTAG} allows for automatic versioning based on the
repository tags. For those that doesn't want to use it, ${GITPKGV} is
still available.
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---
classes/gitpkgv.bbclass | 54 +++++++++++++++++++++++++++++++++++++---------
1 files changed, 43 insertions(+), 11 deletions(-)
diff --git a/classes/gitpkgv.bbclass b/classes/gitpkgv.bbclass
index bc1dc32..ab8ba6e 100644
--- a/classes/gitpkgv.bbclass
+++ b/classes/gitpkgv.bbclass
@@ -1,12 +1,19 @@
-# gitpkgv.bbclass provides a GITPKGV variable which is a sortable version
-# with the format NN+GITHASH, to be used in PKGV, where
+# gitpkgv.bbclass provides a GITPKGV and GITPKGVTAG variables to be
+# used in PKGV, as described bellow:
#
-# NN equals the total number of revs up to SRCREV
-# GITHASH is SRCREV's (full) hash
+# - GITPKGV which is a sortable version with the format NN+GITHASH, to
+# be used in PKGV, where
#
-# gitpkgv.bbclass assumes the git repository has been cloned, and contains
-# SRCREV. So ${GITPKGV} should never be used in PV, only in PKGV.
-# It can handle SRCREV = ${AUTOREV}, as well as SRCREV = "<some fixed git hash>"
+# NN equals the total number of revs up to SRCREV
+# GITHASH is SRCREV's (full) hash
+#
+# - GITPKGVTAG which is the output of 'git describe' allowing for
+# automatic versioning
+#
+# gitpkgv.bbclass assumes the git repository has been cloned, and
+# contains SRCREV. So ${GITPKGV} and ${GITPKGVTAG}should never be used
+# in PV, only in PKGV. It can handle SRCREV = ${AUTOREV}, as well as
+# SRCREV = "<some fixed git hash>"
#
# use example:
#
@@ -14,10 +21,26 @@
#
# PV = "1.0+git${SRCPV}"
# PKGV = "1.0+git${GITPKGV}"
+#
+# or
+#
+# inherit gitpkgv
+#
+# PV = "gitr${SRCPV}"
+# PKGV = "${GITPKGVTAG}"
-GITPKGV = "${@get_git_pkgv(d)}"
-def get_git_pkgv(d):
+GITPKGV = "${@get_git_pkgv(d, False)}"
+GITPKGVTAG = "${@get_git_pkgv(d, True)}"
+
+def git_drop_tag_prefix(version):
+ import re
+ if re.match("v\d", version):
+ return version[1:]
+ else:
+ return version
+
+def get_git_pkgv(d, use_tags):
import os
import bb
@@ -33,9 +56,18 @@ def get_git_pkgv(d):
cwd = os.getcwd()
os.chdir(repodir)
- output = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True)
+
+ try:
+ if not use_tags:
+ raise Exception("Ignoring tag values.")
+
+ ver = git_drop_tag_prefix(bb.fetch.runfetchcmd("git describe %s 2>/dev/null" % rev, d, quiet=True).strip())
+ except Exception:
+ commits = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True).strip()
+ ver = "%s+%s" % commits, rev[:7]
+
os.chdir(cwd)
- return "%s+%s" % (output.split()[0], rev)
+ return ver
return "0+0"
--
1.7.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH] classes/gitpkgv.bbclass: add GITPKGVTAG that uses 'git describe'
2010-12-16 14:35 [PATCH] classes/gitpkgv.bbclass: add GITPKGVTAG that uses 'git describe' Otavio Salvador
@ 2010-12-16 16:07 ` Otavio Salvador
2010-12-16 21:52 ` Martin Jansa
0 siblings, 1 reply; 5+ messages in thread
From: Otavio Salvador @ 2010-12-16 16:07 UTC (permalink / raw)
To: openembedded-devel; +Cc: Otavio Salvador
Using ${GITPKGVTAG} allows for automatic versioning based on the
repository tags. For those that doesn't want to use it, ${GITPKGV} is
still available.
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---
classes/gitpkgv.bbclass | 59 ++++++++++++++++++++++++++++++++++++----------
1 files changed, 46 insertions(+), 13 deletions(-)
diff --git a/classes/gitpkgv.bbclass b/classes/gitpkgv.bbclass
index bc1dc32..ebedcb7 100644
--- a/classes/gitpkgv.bbclass
+++ b/classes/gitpkgv.bbclass
@@ -1,23 +1,46 @@
-# gitpkgv.bbclass provides a GITPKGV variable which is a sortable version
-# with the format NN+GITHASH, to be used in PKGV, where
+# gitpkgv.bbclass provides a GITPKGV and GITPKGVTAG variables to be
+# used in PKGV, as described bellow:
#
-# NN equals the total number of revs up to SRCREV
-# GITHASH is SRCREV's (full) hash
+# - GITPKGV which is a sortable version with the format NN+GITHASH, to
+# be used in PKGV, where
#
-# gitpkgv.bbclass assumes the git repository has been cloned, and contains
-# SRCREV. So ${GITPKGV} should never be used in PV, only in PKGV.
-# It can handle SRCREV = ${AUTOREV}, as well as SRCREV = "<some fixed git hash>"
+# NN equals the total number of revs up to SRCREV
+# GITHASH is SRCREV's (full) hash
+#
+# - GITPKGVTAG which is the output of 'git describe' allowing for
+# automatic versioning
+#
+# gitpkgv.bbclass assumes the git repository has been cloned, and
+# contains SRCREV. So ${GITPKGV} and ${GITPKGVTAG} should never be
+# used in PV, only in PKGV. It can handle SRCREV = ${AUTOREV}, as
+# well as SRCREV = "<some fixed git hash>"
#
# use example:
#
# inherit gitpkgv
#
-# PV = "1.0+git${SRCPV}"
-# PKGV = "1.0+git${GITPKGV}"
+# PV = "1.0+gitr${SRCPV}"
+# PKGV = "1.0+gitr${GITPKGV}"
+#
+# or
+#
+# inherit gitpkgv
+#
+# PV = "1.0+gitr${SRCPV}"
+# PKGV = "${GITPKGVTAG}"
-GITPKGV = "${@get_git_pkgv(d)}"
-def get_git_pkgv(d):
+GITPKGV = "${@get_git_pkgv(d, False)}"
+GITPKGVTAG = "${@get_git_pkgv(d, True)}"
+
+def git_drop_tag_prefix(version):
+ import re
+ if re.match("v\d", version):
+ return version[1:]
+ else:
+ return version
+
+def get_git_pkgv(d, use_tags):
import os
import bb
@@ -33,9 +56,19 @@ def get_git_pkgv(d):
cwd = os.getcwd()
os.chdir(repodir)
- output = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True)
+
+ commits = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True).strip()
+
+ if use_tags:
+ try:
+ ver = git_drop_tag_prefix(bb.fetch.runfetchcmd("git describe %s 2>/dev/null" % rev, d, quiet=True).strip())
+ except Exception:
+ ver = "0.0-%s-g%s" % commits, rev[:7]
+ else:
+ ver = "%s+%s" % commits, rev[:7]
+
os.chdir(cwd)
- return "%s+%s" % (output.split()[0], rev)
+ return ver
return "0+0"
--
1.7.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] classes/gitpkgv.bbclass: add GITPKGVTAG that uses 'git describe'
2010-12-16 16:07 ` Otavio Salvador
@ 2010-12-16 21:52 ` Martin Jansa
2010-12-17 11:00 ` Otavio Salvador
0 siblings, 1 reply; 5+ messages in thread
From: Martin Jansa @ 2010-12-16 21:52 UTC (permalink / raw)
To: openembedded-devel; +Cc: Otavio Salvador
On Thu, Dec 16, 2010 at 02:07:37PM -0200, Otavio Salvador wrote:
> Using ${GITPKGVTAG} allows for automatic versioning based on the
> repository tags. For those that doesn't want to use it, ${GITPKGV} is
> still available.
Thanks for merging it to one bbclass. IMHO looks much better now.
Consider providing examples and warning as suggested bellow.
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ---
> classes/gitpkgv.bbclass | 59 ++++++++++++++++++++++++++++++++++++----------
> 1 files changed, 46 insertions(+), 13 deletions(-)
>
> diff --git a/classes/gitpkgv.bbclass b/classes/gitpkgv.bbclass
> index bc1dc32..ebedcb7 100644
> --- a/classes/gitpkgv.bbclass
> +++ b/classes/gitpkgv.bbclass
> @@ -1,23 +1,46 @@
> -# gitpkgv.bbclass provides a GITPKGV variable which is a sortable version
> -# with the format NN+GITHASH, to be used in PKGV, where
> +# gitpkgv.bbclass provides a GITPKGV and GITPKGVTAG variables to be
> +# used in PKGV, as described bellow:
> #
> -# NN equals the total number of revs up to SRCREV
> -# GITHASH is SRCREV's (full) hash
> +# - GITPKGV which is a sortable version with the format NN+GITHASH, to
> +# be used in PKGV, where
> #
> -# gitpkgv.bbclass assumes the git repository has been cloned, and contains
> -# SRCREV. So ${GITPKGV} should never be used in PV, only in PKGV.
> -# It can handle SRCREV = ${AUTOREV}, as well as SRCREV = "<some fixed git hash>"
> +# NN equals the total number of revs up to SRCREV
> +# GITHASH is SRCREV's (full) hash
> +#
> +# - GITPKGVTAG which is the output of 'git describe' allowing for
> +# automatic versioning
> +#
> +# gitpkgv.bbclass assumes the git repository has been cloned, and
> +# contains SRCREV. So ${GITPKGV} and ${GITPKGVTAG} should never be
> +# used in PV, only in PKGV. It can handle SRCREV = ${AUTOREV}, as
> +# well as SRCREV = "<some fixed git hash>"
> #
> # use example:
> #
> # inherit gitpkgv
> #
> -# PV = "1.0+git${SRCPV}"
> -# PKGV = "1.0+git${GITPKGV}"
> +# PV = "1.0+gitr${SRCPV}"
> +# PKGV = "1.0+gitr${GITPKGV}"
# PV = "1.0+gitr${SRCPV}" # expands to something like 1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
# PKGV = "1.0+gitr${GITPKGV}" # expands also to something like 1.0+gitr31337+4c1c21d7dbbf93b0df336994524313dfe0d4963b
> +#
> +# or
As we were discussing with otavio on #oe, I think there should be
warning, that GITPKGVTAG is really sortable only if the upstream repo
keeps consistent AND sortable tag names.
For example tags in OE repo will fail, because only tested_2010-* tags
are sortable but this sequence:
tested_2010-11-04
release-2010.12-branchpoint
tested_2010-11-12
is not. And only way to fix it when it's shiped with non-standard tag to
targets is to bump PE :/.
Even better solution would be to set something like GITTAGFORMAT in
recipe, to expected consistent tag scheme and if returned git describe
prefix is different then warn builder about it or even fail or ignore
that tag.
Proposed "warning":
# or if upstream repository is always using consistent and sortable tag
# name scheme you can get sortable version including tag name with
# GITPKGVTAG, but be aware that ie tag sequence "v1.0, v1.2, xtest, v2.0"
# will force you to increment PE to get upgradeable path to v2.0 revisions
> +#
> +# inherit gitpkgv
> +#
> +# PV = "1.0+gitr${SRCPV}"
> +# PKGV = "${GITPKGVTAG}"
# PV = "1.0+gitr${SRCPV}" # expands to something like 1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
# PKGV = "${GITPKGVTAG}" # expands to something like 1.0-31337+g4c1c21d
# if there is tag v1.0 before this revision or
# ver1.0-31337+g4c1c21d if there is tag ver1.0
>
> -GITPKGV = "${@get_git_pkgv(d)}"
>
> -def get_git_pkgv(d):
> +GITPKGV = "${@get_git_pkgv(d, False)}"
> +GITPKGVTAG = "${@get_git_pkgv(d, True)}"
> +
> +def git_drop_tag_prefix(version):
> + import re
> + if re.match("v\d", version):
> + return version[1:]
> + else:
> + return version
> +
> +def get_git_pkgv(d, use_tags):
> import os
> import bb
>
> @@ -33,9 +56,19 @@ def get_git_pkgv(d):
>
> cwd = os.getcwd()
> os.chdir(repodir)
> - output = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True)
> +
> + commits = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True).strip()
> +
> + if use_tags:
> + try:
> + ver = git_drop_tag_prefix(bb.fetch.runfetchcmd("git describe %s 2>/dev/null" % rev, d, quiet=True).strip())
> + except Exception:
> + ver = "0.0-%s-g%s" % commits, rev[:7]
> + else:
> + ver = "%s+%s" % commits, rev[:7]
> +
> os.chdir(cwd)
>
> - return "%s+%s" % (output.split()[0], rev)
> + return ver
>
> return "0+0"
> --
> 1.7.3
>
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
--
Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] classes/gitpkgv.bbclass: add GITPKGVTAG that uses 'git describe'
2010-12-16 21:52 ` Martin Jansa
@ 2010-12-17 11:00 ` Otavio Salvador
2010-12-17 11:29 ` Martin Jansa
0 siblings, 1 reply; 5+ messages in thread
From: Otavio Salvador @ 2010-12-17 11:00 UTC (permalink / raw)
To: Martin Jansa; +Cc: openembedded-devel
On Thu, Dec 16, 2010 at 19:52, Martin Jansa <martin.jansa@gmail.com> wrote:
> On Thu, Dec 16, 2010 at 02:07:37PM -0200, Otavio Salvador wrote:
>> Using ${GITPKGVTAG} allows for automatic versioning based on the
>> repository tags. For those that doesn't want to use it, ${GITPKGV} is
>> still available.
>
> Thanks for merging it to one bbclass. IMHO looks much better now.
> Consider providing examples and warning as suggested bellow.
You're welcome. Thanks for keep commenting on it and helping with good advices.
...
> # PV = "1.0+gitr${SRCPV}" # expands to something like 1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
> # PKGV = "1.0+gitr${GITPKGV}" # expands also to something like 1.0+gitr31337+4c1c21d7dbbf93b0df336994524313dfe0d4963b
added.
...
> As we were discussing with otavio on #oe, I think there should be
> warning, that GITPKGVTAG is really sortable only if the upstream repo
> keeps consistent AND sortable tag names.
>
> For example tags in OE repo will fail, because only tested_2010-* tags
> are sortable but this sequence:
>
> tested_2010-11-04
> release-2010.12-branchpoint
> tested_2010-11-12
>
> is not. And only way to fix it when it's shiped with non-standard tag to
> targets is to bump PE :/.
Yes. I fully agree that it is something the user of the class need to
be aware of.
> Even better solution would be to set something like GITTAGFORMAT in
> recipe, to expected consistent tag scheme and if returned git describe
> prefix is different then warn builder about it or even fail or ignore
> that tag.
I like the idea but I prefer to have this merged soon so I can started
using it (for example in freerdp package) and at company.
> Proposed "warning":
>
> # or if upstream repository is always using consistent and sortable tag
> # name scheme you can get sortable version including tag name with
> # GITPKGVTAG, but be aware that ie tag sequence "v1.0, v1.2, xtest, v2.0"
> # will force you to increment PE to get upgradeable path to v2.0 revisions
I added it as a warning on the comment.
The final header is:
# gitpkgv.bbclass provides a GITPKGV and GITPKGVTAG variables to be
# used in PKGV, as described bellow:
#
# - GITPKGV which is a sortable version with the format NN+GITHASH, to
# be used in PKGV, where
#
# NN equals the total number of revs up to SRCREV
# GITHASH is SRCREV's (full) hash
#
# - GITPKGVTAG which is the output of 'git describe' allowing for
# automatic versioning
#
# gitpkgv.bbclass assumes the git repository has been cloned, and
# contains SRCREV. So ${GITPKGV} and ${GITPKGVTAG} should never be
# used in PV, only in PKGV. It can handle SRCREV = ${AUTOREV}, as
# well as SRCREV = "<some fixed git hash>".
#
# WARNING: if upstream repository is always using consistent and
# sortable tag name scheme you can get sortable version including tag
# name with ${GITPKGVTAG}, but be aware that ie tag sequence "v1.0,
# v1.2, xtest, v2.0" will force you to increment PE to get upgradeable
# path to v2.0 revisions
#
# use example:
#
# inherit gitpkgv
#
# PV = "1.0+gitr${SRCPV}" # expands to something like
1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
# PKGV = "1.0+gitr${GITPKGV}" # expands also to something like
1.0+gitr31337+4c1c21d7d
#
# or
#
# inherit gitpkgv
#
# PV = "1.0+gitr${SRCPV}" # expands to something like
1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
# PKGV = "${GITPKGVTAG}" # expands to something like 1.0-31337+g4c1c21d
# if there is tag v1.0 before this revision or
# ver1.0-31337+g4c1c21d if there is tag ver1.0
Does it seems good enough for pushing it?
--
Otavio Salvador O.S. Systems
E-mail: otavio@ossystems.com.br http://www.ossystems.com.br
Mobile: +55 53 9981-7854 http://projetos.ossystems.com.br
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] classes/gitpkgv.bbclass: add GITPKGVTAG that uses 'git describe'
2010-12-17 11:00 ` Otavio Salvador
@ 2010-12-17 11:29 ` Martin Jansa
0 siblings, 0 replies; 5+ messages in thread
From: Martin Jansa @ 2010-12-17 11:29 UTC (permalink / raw)
To: Otavio Salvador; +Cc: openembedded-devel
On Fri, Dec 17, 2010 at 09:00:41AM -0200, Otavio Salvador wrote:
> On Thu, Dec 16, 2010 at 19:52, Martin Jansa <martin.jansa@gmail.com> wrote:
> > On Thu, Dec 16, 2010 at 02:07:37PM -0200, Otavio Salvador wrote:
> >> Using ${GITPKGVTAG} allows for automatic versioning based on the
> >> repository tags. For those that doesn't want to use it, ${GITPKGV} is
> >> still available.
> >
> > Thanks for merging it to one bbclass. IMHO looks much better now.
> > Consider providing examples and warning as suggested bellow.
>
> You're welcome. Thanks for keep commenting on it and helping with good advices.
>
> ...
> > # PV = "1.0+gitr${SRCPV}" # expands to something like 1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
> > # PKGV = "1.0+gitr${GITPKGV}" # expands also to something like 1.0+gitr31337+4c1c21d7dbbf93b0df336994524313dfe0d4963b
>
> added.
>
> ...
> > As we were discussing with otavio on #oe, I think there should be
> > warning, that GITPKGVTAG is really sortable only if the upstream repo
> > keeps consistent AND sortable tag names.
> >
> > For example tags in OE repo will fail, because only tested_2010-* tags
> > are sortable but this sequence:
> >
> > tested_2010-11-04
> > release-2010.12-branchpoint
> > tested_2010-11-12
> >
> > is not. And only way to fix it when it's shiped with non-standard tag to
> > targets is to bump PE :/.
>
> Yes. I fully agree that it is something the user of the class need to
> be aware of.
>
> > Even better solution would be to set something like GITTAGFORMAT in
> > recipe, to expected consistent tag scheme and if returned git describe
> > prefix is different then warn builder about it or even fail or ignore
> > that tag.
>
> I like the idea but I prefer to have this merged soon so I can started
> using it (for example in freerdp package) and at company.
>
> > Proposed "warning":
> >
> > # or if upstream repository is always using consistent and sortable tag
> > # name scheme you can get sortable version including tag name with
> > # GITPKGVTAG, but be aware that ie tag sequence "v1.0, v1.2, xtest, v2.0"
> > # will force you to increment PE to get upgradeable path to v2.0 revisions
>
> I added it as a warning on the comment.
>
> The final header is:
>
> # gitpkgv.bbclass provides a GITPKGV and GITPKGVTAG variables to be
> # used in PKGV, as described bellow:
> #
> # - GITPKGV which is a sortable version with the format NN+GITHASH, to
> # be used in PKGV, where
> #
> # NN equals the total number of revs up to SRCREV
> # GITHASH is SRCREV's (full) hash
> #
> # - GITPKGVTAG which is the output of 'git describe' allowing for
> # automatic versioning
> #
> # gitpkgv.bbclass assumes the git repository has been cloned, and
> # contains SRCREV. So ${GITPKGV} and ${GITPKGVTAG} should never be
> # used in PV, only in PKGV. It can handle SRCREV = ${AUTOREV}, as
> # well as SRCREV = "<some fixed git hash>".
> #
> # WARNING: if upstream repository is always using consistent and
> # sortable tag name scheme you can get sortable version including tag
> # name with ${GITPKGVTAG}, but be aware that ie tag sequence "v1.0,
> # v1.2, xtest, v2.0" will force you to increment PE to get upgradeable
> # path to v2.0 revisions
> #
> # use example:
> #
> # inherit gitpkgv
> #
> # PV = "1.0+gitr${SRCPV}" # expands to something like
> 1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
> # PKGV = "1.0+gitr${GITPKGV}" # expands also to something like
> 1.0+gitr31337+4c1c21d7d
> #
> # or
> #
> # inherit gitpkgv
> #
> # PV = "1.0+gitr${SRCPV}" # expands to something like
> 1.0+gitr3+4c1c21d7dbbf93b0df336994524313dfe0d4963b
> # PKGV = "${GITPKGVTAG}" # expands to something like 1.0-31337+g4c1c21d
> # if there is tag v1.0 before this revision or
> # ver1.0-31337+g4c1c21d if there is tag ver1.0
>
> Does it seems good enough for pushing it?
Yes
Acked-by: Martin Jansa <Martin.Jansa@gmail.com>
--
Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-12-18 3:34 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-16 14:35 [PATCH] classes/gitpkgv.bbclass: add GITPKGVTAG that uses 'git describe' Otavio Salvador
2010-12-16 16:07 ` Otavio Salvador
2010-12-16 21:52 ` Martin Jansa
2010-12-17 11:00 ` Otavio Salvador
2010-12-17 11:29 ` Martin Jansa
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.