Hi On Wed, Oct 30, 2013 at 8:51 PM, Jerome Leclanche <adys.wh@gmail.com> wrote:
As someone who maintains a lot of git packages, I wish, I really wish there was a *standardized* way of writing a pkgver that would output the appropriate format whether there are tags pushed upstream or not.
That is what I intended to propose next. As the regexp become more complicated it is better if makepkg will take care of generating the package version. I think makepkg should have a shell function, something like 'generate_pkgver_vcs()' that user can use in pkgver(). e.g. pkgver() { cd repo generate_pkgver_vcs() } This function will 1) Find what VCS is used 2) Generate appropriate VCS version
I like this proposal a lot. J. Leclanche
On Thu, Oct 31, 2013 at 3:37 AM, Anatol Pomozov <anatol.pomozov@gmail.com> wrote:
Hi
I would like to discuss VCS package versioning that is described here https://wiki.archlinux.org/index.php/VCS_PKGBUILD_Guidelines
I am looking at the -git packages but it also applicable to other VCS. Here is the suggested way to create the version
local ver="$(git describe --tags)" echo "${ver//-/.}"
so 0.7-19-ge4e6e20 will turn into 0.7.19.ge4e6e20
The problem is that the revision number (19 in this case) looks like 3rd component in the version. Now imagine upstream project releases version 0.7.1. The generated version becomes 0.7.1 (and then 0.7.1.1.gfoobar). With the new tag the generated version becomes smaller (0.7.1.1 < 0.7.19). That is the real problem that I had with tup-git package - upstream uses both 2 and 3 component versions.
We should recommend a way that works this case. There is a discussion in the comments and the best recommendation is to use following recipe:
git describe | sed -E 's/([^-]*-g)/r\1/;s/-/./g'
The idea is to find the commit number and start it with "r" (revision). "r" is smaller than a number so it will help in our case.
0.7-19-ge4e6e20 => 0.7.r19.ge4e6e20
Another issue is a repo that has no tags. Here is a recommendation from the wiki page:
printf "%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
that will use number of commits (a large number e.g. 3000). The problem arises when the project creates first tag e.g. 0.1. I suggest to fix this problem by using "0" as a tag version (and add prefix 'r' like in the previous item). This makes sure that non-tagged version is always less that a tagged version.
So pkgver() will look like:
printf "0.r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
Let me know if you have any objections. If not then I'll update the wiki page.