Re: [ANNOUNCE] chronoversion: chronological archiving script with temporary commits
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:59
Hi, On Tue, 13 Mar 2007, Shawn O. Pearce wrote:
David Tweed [off-list ref] wrote:quoted
A question for those who understand things: I stash the last written _tree_'s hash in a tag and then when a new "commit's" directory tree is written starts look to see if it's the same SHA value. If it is I know I can avoid the commit. At the moment I'm using if os.path.exists(lastTreeFile) and tree==open(lastTreeFile,"r").read()[:40]: to be safe just in case a user, eg, goes mad and manually deletes that record. Clearly this is going to hit trouble if git ever decides to put this tag into a packed refs file. Is there any neat way of using builtin stuff like git-rev-parse to ask if a ref has a given SHA1 value and return an easily parsed yes/no answer?The common idiom if you want to compare trees to see if you need to make a commit is: oldc=`git rev-parse $tagname^{commit}` oldt=`git rev-parse $oldc^{tree}` newt`git write-tree`
new=`git write-tree`
if [ X$oldt = X$newt ]; then : nothing to save else newc=`git commit-tree $newt -p $oldc` git update-ref $tagname $newc $oldc fi Yes, a little ugly. But its safe; if another program were to alter the value of $tagname (e.g. "git branch -f", "git tag -f") while your script is running the update-ref in the else will fail, letting you know that $tagname changed in the process.
Ciao, Dscho