All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael J Gruber <git@drmicha.warpmail.net>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jens Lehmann <Jens.Lehmann@web.de>,
	Heiko Voigt <hvoigt@hvoigt.net>
Subject: Re: [PATCH 2/2] receive-pack: support push-to-checkout hook
Date: Tue, 02 Dec 2014 14:03:16 +0100	[thread overview]
Message-ID: <547DB894.4040609@drmicha.warpmail.net> (raw)
In-Reply-To: <alpine.DEB.1.00.1412020929420.13845@s15462909.onlinehome-server.info>

Johannes Schindelin schrieb am 02.12.2014 um 09:47:
> Hi Junio,
> 
> On Mon, 1 Dec 2014, Junio C Hamano wrote:
> 
>> When receive.denyCurrentBranch is set to updateInstead, this hook
>> can be used to override the built-in "push-to-deploy" logic, which
>> insists that the working tree and the index must be unchanged
>> relative to HEAD.  The hook receives the commit with which the
>> tip of the current is going to be updated, and is responsible to
>> make any necessary changes to the working tree and to the index to
>> bring them to the desired state when the tip of the current branch
>> is updated to the new commit.
>>
>> For example, the hook can simply run "git read-tree -u -m HEAD $1"
>> to the workflow to emulate "'git fetch' going in the reverse
>> direction with 'git push'" better than the push-to-deploy logic, as
>> the two-tree form of "read-tree -u -m" is essentially the same as
>> "git checkout" that switches branches while keeping the local
>> changes in the working tree that do not interfere with the
>> difference between the branches.
> 
> I like it.
> 
> The only sad part is that the already huge test suite is enlarged by yet
> another extensive set of test cases (and those tests might not really
> need to be that extensive because they essentially only need to make sure
> that the hook is run successfully *instead* of trying to update the
> working directory, i.e. a simple 'touch yep' hook would have been enough).
> It starts to be painful to run the complete test suite, not only on
> Windows (where this has been a multi-hour endeavor for me for ages
> already). BuildHive (CloudBees' very kind offer of Jenkins CI for Open
> Source, integrated conveniently with GitHub) already takes over an hour to
> run the Git test suite – and BuildHive runs on Linux, not Windows!
> 
> That means that everytime I push into a GitHub Pull Request, I have to
> wait for a full hour to know whether everything is groovy.
> 
> Worse: when Git for Windows contributors (yes! they exist!) push into
> their Pull Requests, I have to wait for a full hour before I can merge,
> unless I want to merge something that the test suite did not validate!
> 
> So maybe it is time to start thinking about conciser tests that verify the
> bare minimum, especially for rarely exercised functionality? I mean,
> testing is always a balance between too much and too little. And at this
> point, I am afraid that several well-intended, but overly extensive tests
> increase the overall runtime of "make test" to a point where developers
> *avoid* running it, costing more time in the long run than necessary.
> 
> In this particular case, I think that we really, really *just* need to
> verify that the presence of the hook switches off the default behavior of
> updateInstead. *Nothing* else is needed to verify that this particular
> functionality hasn't regressed. I.e. something like:
> 
> +test_expect_success 'updateInstead with push-to-checkout hook' '
> +	rm -fr testrepo &&
> +	git clone . testrepo &&
> +	(
> +		cd testrepo &&
> +		echo unclean > path1 &&
> +		git config receive.denyCurrentBranch updateInstead &&
> +		echo 'touch yep' | write_script .git/hooks/push-to-checkout
> +	) &&
> +	git push testrepo HEAD^:refs/heads/master &&
> +	test unclean = $(cat testrepo/path1) &&
> +	test -f testrepo/yep
> +'
> 
> would be more appropriate (although it probably has one or three bugs,
> given that I wrote this in the mailer).
> 
> Ciao,
> Johannes
> 

How about reusing the prerequisites feature for that? We could either
mark the minimal tests, or mark the others similar to how we do with the
(extra) expensive tests. Your config.mk would then determine which tests
are executed.

Michael

  reply	other threads:[~2014-12-02 13:03 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-07 13:58 [PATCH 0/2] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-07 13:58 ` [PATCH 1/2] Add a few more values for receive.denyCurrentBranch Johannes Schindelin
2014-11-07 18:49   ` Junio C Hamano
2014-11-07 18:58     ` Johannes Schindelin
2014-11-10 12:54     ` Johannes Schindelin
2014-11-10 16:00       ` Junio C Hamano
2014-11-12 11:13         ` Johannes Schindelin
2014-11-12 18:00           ` Junio C Hamano
2014-11-08 11:18   ` Jeff King
2014-11-08 18:48     ` brian m. carlson
2014-11-10 13:03     ` Johannes Schindelin
2014-11-07 13:58 ` [PATCH 2/2] Let deny.currentBranch=updateInstead ignore submodules Johannes Schindelin
2014-11-07 19:20   ` Junio C Hamano
2014-11-09 16:42     ` Jens Lehmann
2014-11-10 13:04       ` Johannes Schindelin
2014-11-10 13:01     ` Johannes Schindelin
2014-11-10 15:42       ` Junio C Hamano
2014-11-10 19:32         ` Junio C Hamano
2014-11-12 11:09           ` Johannes Schindelin
2014-11-12 17:59             ` Junio C Hamano
2014-11-13 10:29               ` Johannes Schindelin
2014-11-13 10:38                 ` Johannes Schindelin
2014-11-13 17:41                   ` Junio C Hamano
2014-11-13 18:55                     ` Johannes Schindelin
2014-11-13 19:48                       ` Junio C Hamano
2014-11-13 21:06                         ` Junio C Hamano
2014-11-14  7:49                           ` Junio C Hamano
2014-12-02  3:24                             ` Junio C Hamano
2014-12-02  3:25                               ` [PATCH 2/2] receive-pack: support push-to-checkout hook Junio C Hamano
2014-12-02  8:47                                 ` Johannes Schindelin
2014-12-02 13:03                                   ` Michael J Gruber [this message]
2014-12-02 13:25                                     ` Johannes Schindelin
2014-12-02 16:39                                   ` Junio C Hamano
2014-12-02 16:45                                     ` Johannes Schindelin
2014-12-02 17:00                                       ` Junio C Hamano
2014-12-02 17:12                                         ` Johannes Schindelin
2014-12-02 17:19                                           ` Junio C Hamano
2014-11-13 17:41                   ` [PATCH 2/2] Let deny.currentBranch=updateInstead ignore submodules Junio C Hamano
2014-11-12 11:06         ` Johannes Schindelin
2014-11-10 14:38 ` [PATCH v2 0/2] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-13 11:03   ` [PATCH v3 0/1] " Johannes Schindelin
2014-11-13 11:03     ` [PATCH v3 1/1] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-11-13 17:51       ` Junio C Hamano
2014-11-13 19:21         ` Johannes Schindelin
2014-11-13 17:47     ` [PATCH v3 0/1] Support updating working trees when pushing into non-bare repos Junio C Hamano
2014-11-13 19:11       ` Junio C Hamano
2014-11-13 19:18       ` Johannes Schindelin
2014-11-26 20:21     ` [PATCH v4] " Johannes Schindelin
2014-11-26 20:21       ` [PATCH v4] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-11-26 21:02         ` Junio C Hamano
2014-11-26 22:44       ` [PATCH v5] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-26 22:44         ` [PATCH v5] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-12-01  3:18           ` Junio C Hamano
2014-12-01  7:44             ` Johannes Schindelin
2014-12-01 23:49           ` Junio C Hamano
2014-12-02  0:51             ` Junio C Hamano
2014-12-02  8:21               ` Johannes Schindelin
2014-12-02 16:20                 ` Junio C Hamano
2014-12-02 16:51                   ` Johannes Schindelin
2014-12-02 17:23                   ` Junio C Hamano
     [not found] ` <cover.1415630072.git.johannes.schindelin@gmx.de>
2014-11-10 14:38   ` [PATCH v2 1/2] Clean stale environment pointer in finish_command() Johannes Schindelin
2014-11-10 14:41     ` Johannes Schindelin
2014-11-11  3:16       ` Jeff King
2014-11-11 15:55         ` Junio C Hamano
2014-11-12 10:45           ` Johannes Schindelin
2014-11-12 10:52             ` Jeff King
2014-11-12 10:59               ` Jeff King
2014-11-12 16:17                 ` Junio C Hamano
2014-11-10 21:44     ` Junio C Hamano
2014-11-11  3:11       ` Jeff King
2014-11-10 14:38   ` [PATCH v2 2/2] Add a few more options for receive.denyCurrentBranch Johannes Schindelin

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=547DB894.4040609@drmicha.warpmail.net \
    --to=git@drmicha.warpmail.net \
    --cc=Jens.Lehmann@web.de \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=hvoigt@hvoigt.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.