git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Deleting of the specified ref during the post-receive hook
@ 2010-09-21 14:40 Joshua Jensen
  2010-09-21 14:50 ` Shawn O. Pearce
  0 siblings, 1 reply; 4+ messages in thread
From: Joshua Jensen @ 2010-09-21 14:40 UTC (permalink / raw)
  To: git@vger.kernel.org

  I've recently asked whether there was a public script to act as an 
automatic 'maintainer', something akin to Gerrit's push always 
succeeding without having to pull first when using Git as a central 
repository.  I received a number of suggestions, and I have begun trial 
implementations.

My current line of thought has an auto-merging script that monitors the 
refs/for/ namespace (similar to Gerrit) and then applies --no-ff merges 
to the appropriate branch.  For instance, when the user pushes to 
refs/for/master, the post-receive hook creates a secondary ref called 
refs/for/master-SHA1-timestamp and then deletes the refs/for/master ref:

#!bin/sh
# post-receive hook
while read oldrev newrev ref
do
     case $ref in
         refs/for/*)
             timestamp=`date +%s`
             `git update-ref $ref-$newrev-$timestamp $newrev`
             `git update-ref -d $ref`
         ;;
     esac
done

If you'll pardon my lacking shell script skills (I'm open to learn!), my 
primary question concerns safety.  When receiving a ref via an SSH-based 
server (which happens to be Gitolite, but I don't think that is relevant 
here), is the post-receive hook guaranteed to be run in a lockstep 
manner?  That is, if two people push to 'refs/for/master' at the same 
time, is there a lock to process one user and then the other user?

The auto-merging script is just simple at the moment.  It runs 'git 
fetch origin refs/for/*:refs/for/*', sorts the refs/for/ entries by 
timestamp, and merges into the specified branch, emailing the user on 
success or failure (not implemented yet... I'm sure Gitolite gives me 
access to the username, but I haven't looked it up yet).

Before I go too much deeper down this path, am I way off base here?

Thanks.

Josh

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-09-21 16:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-21 14:40 Deleting of the specified ref during the post-receive hook Joshua Jensen
2010-09-21 14:50 ` Shawn O. Pearce
2010-09-21 15:55   ` Joshua Jensen
2010-09-21 16:00     ` Shawn O. Pearce

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).