[virt-tools-list] [PATCH-v5.5 5/5] virt-manager version-id changes
Gene Czarcinski
gene at czarc.net
Sat Apr 13 17:19:35 UTC 2013
On 04/13/2013 10:01 AM, Gene Czarcinski wrote:
> On 04/12/2013 03:37 PM, Christophe Fergeau wrote:
>> On Thu, Apr 11, 2013 at 02:01:39PM -0400, Gene Czarcinski wrote:
>>>> I think this can be solved by adding an option to sdist or rpm
>>>> subcommands
>>>> that allows temporarily overwriting __version__. Then all the
>>>> __version__
>>>> building logic can be moved to an external script, which just
>>>> passes the value
>>>> to setup.py
>>> Great minds and all that stuff.
>>>
>>> This is more or less the approach I thought to look into. Something
>>> where the default is as it now is but with some means of specifying
>>> a "user version" override when sdist is run.
>> I haven't followed the conversation closely, hopefully all of this
>> was not
>> discussed yet ;) The solution you are aluding to sounds a lot like the
>> git-version-gen script which is used in several projects, see
>> http://stuff.mit.edu/afs/athena/astaff/project/opssrc/cups/autoconf-2.65/build-aux/git-version-gen
>>
>> for example.
>> This is the solution Eric mentioned at the beginning of this thread
>> https://www.redhat.com/archives/virt-tools-list/2013-April/msg00106.html
>>
>> The way the versioning is done is:
>> - if there's a 'vXXXX' tag pointing at the current HEAD, then version is
>> XXX
>> - else version is XXXX.z-hash where XXXX is the most recent tag in the
>> current branch, z is the number of commits made since that tag, and
>> hash is a short hash for HEAD
>>
>> This gives you a version number that always increases, even for
>> snapshots
>> from git.
>>
> I like what the referenced script does. Unfortunately, it works with
> autotools and those have been removed from virt-manager and replaced
> with python's distutils which has the same or at least similar
> objectives but is definitely different.
>
> I like using a tag as the basis for "version." Unfortunately, this is
> a bit difficult. AFAIK, you cannot set a tag via patch and version is
> set from the value of the hardcoded and git tracked
> virtcli/cliconfig.__version__ which has the current value of "0.9.4".
> In addition, the tags which are used to identify the commit which is
> the base (top level) for a release has the form of RELEASE-0.0.0-1 ...
> a little string editing gets this to "0.0.0".
>
> While I like the information provided by git-describe--tags, it does
> not necessarily produce an increasing number. Consider a base with
> the tag of "0.9.100". Now have two branches off that. The two
> branches sill likely have different values for commits as well has the
> commit-id but the relationship is definitively defined and you could
> desire to replace "0.9.100.19" with "0.9.100.10" (last number is the
> number of commits). The git-describe--tags information would (IMHO)
> be good for an internal "version" but not when used for the version-id
> in a sdist-tarball or an rpm. Right now, I am not going to worry
> about git-describe--tags and a potention internale version-id.
>
> So, my focus is the version-id for taballs and rpms (that is in the
> spec file that is part of the tarball.
>
> Right now I am envisioning a "bunch" of small steps the first two of
> which should be acceptable:
>
> 1. For the current master (gtk3.2+), update cliconfig.__version__ to
> be "0.9.100" to indicate development/prerelease for whatever the next
> release will be called.
>
> 2. Put spec.in back in witjh @VERSION@ and add "my_sdist" class to
> setup.py. Before running the regular sdist, spec.in is copied to spec
> with @VERSION@ updated to the value of cliconfig.__version__.
>
> Here is where is starts getting questionable.
>
> 3. Add a "pkgversion" keyword to setup.py-configure and, if something
> is specified, update cliconfig.__version__ to that value during
> cliconfig initlization. This is a nice to have but the result will be
> that the pkgversion value is used for everything and not just the
> sdist-tarball.
>
> The problem is the the setup() kerword "version" is initialized/set
> long before sdist is called. I do not see how to change it.
> Furthermore, specifying any version when sdist is run is thus useless.
>
> First of all, I am NOT a python expert or anything like that (think
> beginner or novice). Therefore, there may be a way to override the
> methods and I do not understand how to do it.
>
> It appears that [all of this is under "distutils"] sdist uses Command
> and which, in turn, uses dist. dist has the primary definition for
> class Distribution but also has this somewhat hidden class
> DistributionMetadata and it is that last class which defines
> get_fullname() [name + version]. In the sdist class, there is the
> make_distribution() method which calls distribution.get_fullname().
>
> Creating a good, acceptable version-id is easy. Getting it used
> without re-writing a lot of code not so much.
>
> If one of you python experts out there knows how to do the override, I
> would appreciate any help.
>
>
Never mind. A whole bunch of poking around with some trial and error
figured out how to do it. Now, of course, it is obvious. ;)
It still needs work but the general plan is:
a) keep the pkgversion -> __version__ patch
b) append a "snapshot suffix" to the value of __version__. This suffix
will only apply to the sdist-tarball and the rpm derived from that tarball.
Gene
More information about the virt-tools-list
mailing list