Hi Jonas,
On Sun, Oct 30, 2016 at 11:51:29PM +0100, Jonas Meurer wrote:
> Package: git-buildpackage
> Version: 0.8.6
> Severity: wishlist
> Tags: patch
> 
> Hello,
> 
> While migrating the cryptsetup packaging workflow to gbp, and playing
> around with several possible layouts and workflows, we decided that
> we'd prefer to use the upstream signed Git release tags as basis for
> creating the upstream tarball instead of using the upstream provided
> release tarballs.
> 
> Problem is, that the format for upstream Git release tags is 'v1_2_3',
> which is not supported by git-buildpackage until now. In order to
> support tags that contain the release version in a different format than
> 1.2.3 [%(version)s] or 1-2-3 [%(hversion)s], at least basic version
> mangling for '--git-upstream-tag' is required.
> 
> See attached patch which implements basic version mangling for
> '--git-upstream-tag' in a simple substitute fashion: if the provided
> format contains the syntax '%(version%OLD%NEW)s', then the version used
> for '%(version)s' has 'OLD' replaced by 'NEW'.
> 
> This allows us to let gbp create the upstream tarball from upstream Git
> release tag for new releases:
> 
> $ gbp buildpackage --git-upstream-tag="v%(version%.%_)s"
> 
> 
> In case that you like the approach and agree to add this feature to gbp,
> I could write a few corresponding words for the related paragraphs of
> gbp documentation.
> 
> If you're not happy with the way it's implmented, just let me know why
> and we can search for a better solution :)

The general approach is fine. Thanks for the patch. See my comments below:

> 
> Cheers,
>  jonas
> 
> -- System Information:
> Debian Release: stretch/sid
>   APT prefers testing
>   APT policy: (500, 'testing')
> Architecture: amd64 (x86_64)
> 
> Kernel: Linux 4.7.0-1-amd64 (SMP w/4 CPU cores)
> Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) (ignored: 
> LC_ALL set to en_US.UTF-8)
> Shell: /bin/sh linked to /bin/dash
> Init: systemd (via /run/systemd/system)
> 
> Versions of packages git-buildpackage depends on:
> ii  devscripts            2.16.8
> ii  git                   1:2.10.1-1
> ii  man-db                2.7.5-1
> ii  python-dateutil       2.5.3-2
> ii  python-pkg-resources  28.0.0-1
> ii  python-six            1.10.0-3
> pn  python:any            <none>
> 
> Versions of packages git-buildpackage recommends:
> ii  pristine-tar     1.37
> ii  python-requests  2.11.1-1
> ii  sbuild           0.71.0-2
> 
> Versions of packages git-buildpackage suggests:
> pn  python-notify  <none>
> ii  sudo           1.8.17p1-2
> ii  unzip          6.0-20
> 
> -- no debconf information

> commit f6a7e8f83935d74dc0cd67a5afa26b243357d04f
> Author: Jonas Meurer <jo...@freesources.org>
> Date:   Sun Oct 30 23:44:34 2016 +0100
> 
>     gbp/deb/git.py: add basic version mangling to version_to_tag()
> 
> diff --git a/gbp/deb/git.py b/gbp/deb/git.py
> index 64cd321..3070d93 100644
> --- a/gbp/deb/git.py
> +++ b/gbp/deb/git.py
> @@ -142,12 +142,18 @@ class DebianGitRepository(GitRepository):
>          hversion is useful for upstreams with tagging policies that prohibit 
> .
>          characters.
>  
> +        %(version%A%B)s provides %(version)s with 'A' replaced by 'B'.
> +

Please add tests using docstrings as below (including one that show how
to use '%' as a replacement (e.g. 0-1.2.3 -> 0%1.2.3.4 and as replaced
pattern 0%1%2%3 -> 0.1.2.3).

>          >>> DebianGitRepository.version_to_tag("debian/%(version)s", "0:0~0")
>          'debian/0%0_0'
>          >>> DebianGitRepository.version_to_tag("libfoo-%(hversion)s", 
> "1.8.1")
>          'libfoo-1-8-1'
>  
>          """
> +        r = re.search(r"\%\(version\%([^%s]+)\%([^\%]+)\)s", format)
> +        if r:
> +            format = re.sub(r"\%\(version\%[^%s]+\%[^\%]+\)s", 
> "%(version)s", format)
> +            version = version.replace(r.group(1), r.group(2))
>          return format_str(format, 
> dict(version=DebianGitRepository._sanitize_version(version),
>                                         
> hversion=DebianGitRepository._sanitize_version(version).replace('.', '-')))
>  

Please document the behaviour. The current place that has the most
information on how to modify the upstream version is in

     docs/chapters/import.sgml

Cheers,
 -- Guido

Reply via email to