From: Joshua Jensen <jjensen@workspacewhiz.com>
To: "Shawn O. Pearce" <spearce@spearce.org>
Cc: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: Deleting of the specified ref during the post-receive hook
Date: Tue, 21 Sep 2010 09:55:04 -0600 [thread overview]
Message-ID: <4C98D558.9090900@workspacewhiz.com> (raw)
In-Reply-To: <20100921145014.GH32601@spearce.org>
----- Original Message -----
From: Shawn O. Pearce
Date: 9/21/2010 8:50 AM
> Joshua Jensen<jjensen@workspacewhiz.com> wrote:
>> 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
>>
> FWIW, you don't need `` around the git update-ref calls, because you
> aren't using the output of the command as input to another command.
You are right. I believe I was early on, and it just got copied and
pasted around.
> No. If there are two concurrent pushes occurring, the script may
> execute in parallel.
Okay, so what I'm doing is bad. Got it.
> But you'll actually get something much worse. receive-pack will
> create refs/for/master for the first user... and then might be put
> to sleep while another user's receive-pack starts. That second
> user will see refs/for/master existing, and will fail their push
> because their concept of $newrev doesn't match what is currently
> at refs/for/master. Then the first user wakes up, runs your
> post-receive, and the ref is cleared.
Yep, this is exactly what I was trying to avoid by deleting the ref.
> The better strategy would be to use an update hook that refuses to
> permit the creation of refs/for/master:
>
> #!/bin/sh
> ref=$1
> old=$2
> new=$3
>
> case $ref in
> refs/for/*)
> timestamp=`date +%s`
> git update-ref $ref-$new-$timestamp $new
> echo "Created $ref-$new-$timestamp"
> exit 1
> ;;
> *)
> exit 0
> ;;
> esac
>
>
> By exit 1 here we refuse the push attempt, so receive-pack won't
> create refs/for/master, and another user pushing won't see that
> false failure. However, unlike with Gerrit, every user is now going
> to receive a push failure message because the hook has appeared to
> reject the value, even though it accepted it.
Okay, I'll try this. I can train people in the push failure, if
necessary. Thanks!
>> Before I go too much deeper down this path, am I way off base here?
> I'd have to ask why you are using gitolite and trying to abuse
> git-receive-pack to do something that Gerrit does out of the box...
>
Oh, how I would love to just leave it to Gerrit to handle this. (I
*really* like Gerrit.) If you would like to just skip ahead, the actual
question related to this email message is in the final paragraph.
We don't want to squash our topic branches before pushing them to
Gerrit. That means we end up with a range of 'n' number of commits in
the Gerrit review screen. Gerrit understands that commit 'n' is
dependent on 'n-1' and so on, but unfortunately, it doesn't show them in
a tree/group on the main page. That's a minor gripe, but here is the
major issue.
When I review Change 1, I can press a submit button, and Change 1 goes
live right then. Unfortunately, changes 2 through n were left behind.
If I review Change 1 through n and then press the Submit button on
Change n and then on Change n-1 and then on Change n-2, Gerrit does the
'right' thing (for us) and makes live the entire dependency chain at the
same time. Of course, I would prefer to just have a group Submit
button, but that's another story.
This has come up on the mailing list a few times, and I even think there
is an issue tracker item for it.
Let's ignore the review+submit portion of Gerrit now. Can Gerrit be
coaxed to take a refs/for/master and directly apply it to the master
branch WITHOUT the review cycle? If so, then I'm wasting my time trying
to right a script.
Josh
next prev parent reply other threads:[~2010-09-21 15:55 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
2010-09-21 16:00 ` Shawn O. Pearce
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C98D558.9090900@workspacewhiz.com \
--to=jjensen@workspacewhiz.com \
--cc=git@vger.kernel.org \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).