Thread (5 messages) flat view 5 messages, 4 authors, 2016-06-15

Re: [ANNOUNCE] chronoversion: chronological archiving script with temporary commits

From: Shawn O. Pearce <hidden>
Date: 2016-06-15 22:42:59

David Tweed [off-list ref] wrote:
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`
	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.

-- 
Shawn.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help