All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Sunshine <sunshine@sunshineco.com>
To: git@vger.kernel.org
Cc: "Harri Mehtälä" <harri.mehtala@finago.com>,
	"Duy Nguyen" <pclouds@gmail.com>,
	"Eric Sunshine" <sunshine@sunshineco.com>
Subject: [PATCH 1/2] restore: require --source when combining --worktree and --staged
Date: Fri,  1 May 2020 04:27:45 -0400	[thread overview]
Message-ID: <20200501082746.23943-2-sunshine@sunshineco.com> (raw)
In-Reply-To: <20200501082746.23943-1-sunshine@sunshineco.com>

The default restore source for --worktree is the index, and the default
source for --staged is HEAD. When combining --worktree and --staged in
the same invocation, the restore source is ambiguous ("should it restore
from the index or from HEAD?"). To avoid such ambiguity, the git-restore
documentation has always stated that --source must be used when
combining --worktree and --staged. However, this restriction is not
actually enforced. Address this deficiency by making the implementation
match the documented behavior (to wit, error out if --source is not
specified when combining --worktree and --staged).

While at it, enhance the documentation to mention the --source
requirement prominently in the "Description" section (rather than only
in the description of the --source option itself).

Reported-by: Harri Mehtälä <harri.mehtala@finago.com>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
 Documentation/git-restore.txt | 3 ++-
 builtin/checkout.c            | 3 +++
 t/t2070-restore.sh            | 5 +++++
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/Documentation/git-restore.txt b/Documentation/git-restore.txt
index 8e3b339802..8906499637 100644
--- a/Documentation/git-restore.txt
+++ b/Documentation/git-restore.txt
@@ -24,7 +24,8 @@ The command can also be used to restore the content in the index with
 
 By default, the restore sources for working tree and the index are the
 index and `HEAD` respectively. `--source` could be used to specify a
-commit as the restore source.
+commit as the restore source; it is required when combining `--staged`
+and `--worktree`.
 
 See "Reset, restore and revert" in linkgit:git[1] for the differences
 between the three commands.
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 8bc94d392b..7a01d00f53 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -1604,6 +1604,9 @@ static int checkout_main(int argc, const char **argv, const char *prefix,
 	}
 	if (opts->checkout_index < 0 || opts->checkout_worktree < 0)
 		BUG("these flags should be non-negative by now");
+	if (opts->checkout_index > 0 && opts->checkout_worktree > 0 &&
+	    !opts->from_treeish)
+		die(_("--source required when using --worktree and --staged"));
 	/*
 	 * convenient shortcut: "git restore --staged" equals
 	 * "git restore --staged --source HEAD"
diff --git a/t/t2070-restore.sh b/t/t2070-restore.sh
index 076d0df7fc..19efa21fdb 100755
--- a/t/t2070-restore.sh
+++ b/t/t2070-restore.sh
@@ -69,6 +69,11 @@ test_expect_success 'restore --staged uses HEAD as source' '
 	test_cmp expected actual
 '
 
+test_expect_success 'restore --worktree --staged requires --source' '
+	test_must_fail git restore --worktree --staged first.t 2>err &&
+	test_i18ngrep "source required when using --worktree and --staged" err
+'
+
 test_expect_success 'restore --ignore-unmerged ignores unmerged entries' '
 	git init unmerged &&
 	(
-- 
2.26.2.526.g744177e7f7


  reply	other threads:[~2020-05-01  8:28 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-01  8:27 [PATCH 0/2] enhance "git restore --worktree --staged" behavior Eric Sunshine
2020-05-01  8:27 ` Eric Sunshine [this message]
2020-05-01  8:49   ` [PATCH 1/2] restore: require --source when combining --worktree and --staged Eric Sunshine
2020-05-01 22:16   ` Taylor Blau
2020-05-01  8:27 ` [PATCH 2/2] restore: default to HEAD " Eric Sunshine
2020-05-01 15:32   ` Junio C Hamano
2020-05-05  3:53     ` Eric Sunshine
2020-05-01 22:19   ` Taylor Blau
2020-05-05  4:00     ` Eric Sunshine
2020-05-05  4:44       ` Taylor Blau

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=20200501082746.23943-2-sunshine@sunshineco.com \
    --to=sunshine@sunshineco.com \
    --cc=git@vger.kernel.org \
    --cc=harri.mehtala@finago.com \
    --cc=pclouds@gmail.com \
    /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.