[oe] [PATCH] classes/gitpkgv.bbclass: add GITPKGVTAG that uses 'git describe'

Martin Jansa martin.jansa at gmail.com
Thu Dec 16 21:52:28 UTC 2010


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 at 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 at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa at gmail.com




More information about the Openembedded-devel mailing list