UFO:Alien Invasion

Development => Coding => Topic started by: Punkie on November 19, 2010, 10:51:55 pm

Title: "git describe" or svn revision numbering style
Post by: Punkie on November 19, 2010, 10:51:55 pm
It is kind of hard to refer to a particular revision in git. Not only are they 40 chars long (although the first 7 are quasi unique)  but they are not a monotone increasing sequence. As a result ppl are not referring to version numbers anymore and it is hard for developers to remember a version or to know where in the timeline it is situated. But behold, numerous ppl value those same properties and they suggest the following

"git describe" as explained here (http://gitfu.wordpress.com/2008/05/25/git-describe-great-another-way-to-refer-to-commits) and here (http://www.kernel.org/pub/software/scm/git/docs/git-describe.html).
In short what i understood of it:
Code: [Select]
[punkie@fed ufoai]$ git describe --tags
ufoai_2.1-dev1-27183-g3be0bf3
This revision is 27183 commits seperated from the last tag (ufoai_2.1-dev1) which is identified by the first 7 chars "g3be0bf3". In other words, we can identify this revision as 27183 though we can reset the counter whenever we can. Via a hook this string can be added to the log.
Title: Re: "git describe" or svn revision numbering style
Post by: Muton on November 20, 2010, 07:57:53 am
Why not use unixtime
git log -1 --pretty=format:%ct

git log --since="1284280485" --until="1284280485"
will show you the last commit the build is based on

date --universal -ud @1284280862
convert sec to human readable format

.)You have growing values
.)You can recalculate the builddate
.)No extra work need to be done
Title: Re: "git describe" or svn revision numbering style
Post by: Punkie on November 20, 2010, 11:07:02 am
How would you go from the date to a (single) hash/revision number (not a range) that git understand?

For "git describe" this is supported by git as the output is a valid revision number and thus can be used with other commands
Code: [Select]
#the revision
git checkout ufoai_2.1-dev1-27183-g3be0bf3
# list between 2 revisions before and the last
git rev-list HEAD ufoai_2.1-dev1-27183-g3be0bf3~2
Title: Re: "git describe" or svn revision numbering style
Post by: Muton on November 20, 2010, 12:03:00 pm
> How would you go from the date to a (single) hash/revision number (not a range) that git understand?

git log --since="1290243726" --until="1290243726"

will return 2 commits
but only the commit time is different
the push time is the same (git stores the time in unix format)
If someone is pushing n commits at the same time
and you do an update
than you'll receive both commits

Tracing a bug means reverting commits from your local source
and in that case you know the hash


commit 51bc5eaaac472c0854ec34dbbdcf5b92982f471a
Author: Martin Gerhardy <tlh2000@users.sourceforge.net>
Date:   Sat Nov 20 10:01:43 2010 +0100

    * renamed functions in entity Observer class

commit 751f6534b9132255aee28d155312aa8c547e446a
Author: Martin Gerhardy <tlh2000@users.sourceforge.net>
Date:   Sat Nov 20 09:53:15 2010 +0100

    * further merges and improvements for the entity inspector



I would prefer
git describe --tags
ufoai_2.1-dev1-27253-g51bc5ea
commit 27253 is very handy
but
git rev-list HEAD ufoai_2.1-dev1-27253-g3be0bf3~2
prints only a lot of hashes

How to find the hash for commit 27252 ???
Title: Re: "git describe" or svn revision numbering style
Post by: Punkie on November 20, 2010, 01:10:44 pm
IANAGitExpert (I Am Not A Git Expert) and currently i dont have access to git.

AFAIK You dont need to look up the hash/sha1 because you can use the describe string as if it was a hash.
You can get from a sha1 to a tag decribe like experssion
Code: [Select]
% git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99^0~940
The other way around? Got to be a way I suppose.
git-show ??
or maybe a shell function is needed, like
git log ufoai_2.1-dev1-27253-g51bc5ea | egrep "^commit "

For functions like rev-list that return sha1 you can make a lookupscript that processes the output
foreach s sha1 (with egrep "^commit "?)
d=`git name-rev $e`
sed -e "s/$e/$d/"
...