groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[groff] version and revision management


From: Bertrand Garrigues
Subject: [groff] version and revision management
Date: Sun, 14 Jan 2018 02:45:22 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux)

Hi,

I was starting to prepare the next release and would like to propose a
little change in the version system.  Currently groff's version is set
in 'VERSION' and 'REVISION' files in the top source directory.  When a
new release was planned, the VERSION and/or REVISION files were first
upgraded, then an initial tag was created (for example tag 1.22.3), and
after some testing and fixes the final tag was created with a 'real'
suffix (last tag was: '1.22.3.real').

In order to track more finely the version used when people report an
issue, I propose to use gnulib's script 'git-version-gen' to generate a
unique version.  The other advantage is that installation bugs could be
more easily detected: groff install some data in
/usr/share/groff/<version>, so currently if a commit breaks the
installation of a file this can be unnoticed if the user did not
uninstall its previous version of groff.

'git-version-gen' relies on the command 'git describe' and works roughly
like this:

- From a git repository:

  . if the current commit corresponds to a tag, then the version is
    simply the tag name.

  . Otherwise the version has the following format:
  
      <tag>-<nb_commits>-<commit>

    With:
    -- tag: the most recent tag reachable from the current commit
    -- nb_commits: number of commits between the most recent tag and
      the current commit.
    -- current commit sha1, abbreviated.
    
    For example: 1.22.3.real.434-5aafd

    If there are some local diff the script will also add a 'dirty'
    suffix.
    
  The version is stored in a file '.version'.

- From a tarball, the version is taken from a file '.tarball-version',
  which is generated by the build system.

I've made the necessary changes on a branch 'unique-version'; to test
it:

  git clone https://git.savannah.gnu.org/git/groff.git
  cd groff
  git checkout --track origin/unique-version
  ./bootstrap
  mkdir build
  cd build
  ../configure
  make -j

and to generate the tarball:

  make dist

Note: the full version is propagated in the various executables
generated by the build system (for example 'groff --verrsion' will give
something like "GNU troff (groff) version 1.22.3.real.434-5aafd").
However there is a register '\n[.Y]' that correspond to the revision of
groff; as I can't pass non alphanumeric characters to it (in the above
example the revision would be equal to '3.real.434-5aafd') this register
will be defined as the first alphanumeric digits of the revision.

If no one object to this change then I'll merge it on master.

Regards,

Bertrand Garrigues






reply via email to

[Prev in Thread] Current Thread [Next in Thread]