All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <johannes.schindelin@gmx.de>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v4] Add another option for receive.denyCurrentBranch
Date: Wed, 26 Nov 2014 13:02:08 -0800	[thread overview]
Message-ID: <xmqqppc9ptf3.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <2b44016c4a233348ef0c7600ca4aaf8aa50948e8.1417033080.git.johannes.schindelin@gmx.de> (Johannes Schindelin's message of "Wed, 26 Nov 2014 21:21:36 +0100 (CET)")

Johannes Schindelin <johannes.schindelin@gmx.de> writes:

> +Another option is "updateInstead" which will update the working
> +directory (must be clean) if pushing into the current branch. This option is
> +intended for synchronizing working directories when one side is not easily
> +accessible via interactive ssh (e.g. a live web site, hence the requirement
> +that the working directory be clean). This mode also comes in handy when
> +developing inside a VM to test and fix code on different Operating Systems.

Thanks; this explains the intent very clearly.

> @@ -730,11 +733,90 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
>  	return 0;
>  }
>  
> +static const char *update_worktree(unsigned char *sha1)
> +{
> +	const char *update_refresh[] = {
> +		"update-index", "--ignore-submodules", "--refresh", "-q", NULL
> +	};

Please have "-q" as the first parameter.

    $ git reset --hard
    $ echo >Makefile
    $ git update-index -q --refresh ; echo $?
    0
    $ git update-index --refresh -q ; echo $?
    Makefile: needs update
    1

Yes, I understand and agree that this is a "WAT???".

But update-index has processed its options from left to right from
the beginning of time, which we may want to change someday, but this
topic is more important than updating that "WAT???".

> +...
> +	const char *read_tree[] = {
> +		"read-tree", "-u", "-m", sha1_to_hex(sha1), NULL
> +	};

Is everybody's compiler OK with this initialization with computed
value?  Just checking to see if somebody else says "that would not
work for my setting".

> +	/* run_command() does not clean up completely; reinitialize */
> +	child_process_init(&child);

I do not think you need that comment.  The name run_command() does
not imply "run and clean up for reuse" at all, at least to me.

> +	child.argv = diff_files;
> +	...
> +	if (run_command(&child)) {
> +		argv_array_clear(&env);
> +		return "Working directory not clean";
> +	}
> +
> +	/* run_command() does not clean up completely; reinitialize */
> +	child_process_init(&child);
> +	child.argv = diff_index;
> +	...
> +	if (run_command(&child)) {
> +		argv_array_clear(&env);
> +		return "Working directory not clean";
> +	}

Do we want to give the same message for these two cases?

> diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
> index f4da20a..b8df39c 100755
> --- a/t/t5516-fetch-push.sh
> +++ b/t/t5516-fetch-push.sh
> @@ -1330,4 +1330,25 @@ test_expect_success 'fetch into bare respects core.logallrefupdates' '
>  	)
>  '
>  
> +test_expect_success 'receive.denyCurrentBranch = updateInstead' '
> +	git push testrepo master &&
> +	(cd testrepo &&
> +		git reset --hard &&
> +		git config receive.denyCurrentBranch updateInstead
> +	) &&
> +	test_commit third path2 &&
> +	git push testrepo master &&
> +	test $(git rev-parse HEAD) = $(cd testrepo && git rev-parse HEAD) &&
> +	test third = "$(cat testrepo/path2)" &&
> +	(cd testrepo &&
> +		git update-index --refresh &&
> +		git diff-files --quiet &&
> +		git diff-index --cached HEAD -- &&

This "diff-index", without "--quiet" would not signal if the index
matches HEAD with its exit status.

> +		echo changed > path2 &&

s/> />/;

> +		git add path2
> +	) &&

This made sure that the update happens in a clean state.

> +	test_commit fourth path2 &&
> +	test_must_fail git push testrepo master

And this made sure that the push fails, but does not check what
happened on the receiving repository; minimally something like this
perhaps?

	test_must_fail git push testrepo master &&
        test $(git rev-parse HEAD^) = $(git -C testrepo rev-parse HEAD) &&
	(
		cd testrepo &&
		git diff --quiet &&
		test changed = "$(cat path2)"
	)

That is, we expect that "third" is still the HEAD in testrepo, there
is no difference between the working tree and the index (because you
did "git add path2" over there previously), and path2 still has the
locally updated string in the working tree.

> +'
> +
>  test_done

Other than that, this looks pretty well done.

Thanks.

P.S. I'll be doing 2.2 final today, so I won't have time to apply
this with local tweaking to address the issues above.

  reply	other threads:[~2014-11-26 21:02 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
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 [this message]
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=xmqqppc9ptf3.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=johannes.schindelin@gmx.de \
    /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.