Re: [PATCH v2] commit: make --only --allow-empty work without paths

2016-12-08 Thread Junio C Hamano
Andreas Krey  writes:

> Ok, I've removed the clever message, as Junio suggested.
> I don't know what else to do to make it acceptable. :-)
> We're going to deploy it internally anyway, but I think
> it belongs in git.git as well (aka 'Can I has "will queue"?').

Oh, sorry for being unclear.  Before I started saying "Slightly
related topic.", after quoting "The patch itself looks good to me."
by Peff, I meant to say "Yeah, this looks good; thanks.", but
apparently I forgot.

Removal of "Clever" is a separate issue and it may make sense to do
so, but it deserves its own commit with its own justification.

Sorry for making you send an extra round; let's queue the original,
and if you still are interested, have the "Clever" removal as its
own patch.

Thanks.




[PATCH v2] commit: make --only --allow-empty work without paths

2016-12-08 Thread Andreas Krey
--only is implied when paths are present, and required
them unless --amend. But with --allow-empty it should
be allowed as well - it is the only way to create an
empty commit in the presence of staged changes.

Also remove the post-fact cleverness indication;
it's in the man page anyway.

Signed-off-by: Andreas Krey 
---

Ok, I've removed the clever message, as Junio suggested.
I don't know what else to do to make it acceptable. :-)
We're going to deploy it internally anyway, but I think
it belongs in git.git as well (aka 'Can I has "will queue"?').

 Documentation/git-commit.txt | 3 ++-
 builtin/commit.c | 4 +---
 t/t7501-commit.sh| 9 +
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index f2ab0ee2e..4f8f20a36 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -265,7 +265,8 @@ FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
If this option is specified together with `--amend`, then
no paths need to be specified, which can be used to amend
the last commit without committing changes that have
-   already been staged.
+   already been staged. If used together with `--allow-empty`
+   paths are also not required, and an empty commit will be created.
 
 -u[]::
 --untracked-files[=]::
diff --git a/builtin/commit.c b/builtin/commit.c
index 8976c3d29..276c74034 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1206,10 +1206,8 @@ static int parse_and_validate_options(int argc, const 
char *argv[],
 
if (also + only + all + interactive > 1)
die(_("Only one of --include/--only/--all/--interactive/--patch 
can be used."));
-   if (argc == 0 && (also || (only && !amend)))
+   if (argc == 0 && (also || (only && !amend && !allow_empty)))
die(_("No paths with --include/--only does not make sense."));
-   if (argc == 0 && only && amend)
-   only_include_assumed = _("Clever... amending the last one with 
dirty index.");
if (argc > 0 && !also && !only)
only_include_assumed = _("Explicit paths specified without -i 
or -o; assuming --only paths...");
if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh
index d84897a67..0d8d89309 100755
--- a/t/t7501-commit.sh
+++ b/t/t7501-commit.sh
@@ -155,6 +155,15 @@ test_expect_success 'amend --only ignores staged contents' 
'
git diff --exit-code
 '
 
+test_expect_success 'allow-empty --only ignores staged contents' '
+   echo changed-again >file &&
+   git add file &&
+   git commit --allow-empty --only -m "empty" &&
+   git cat-file blob HEAD:file >file.actual &&
+   test_cmp file.expect file.actual &&
+   git diff --exit-code
+'
+
 test_expect_success 'set up editor' '
cat >editor <<-\EOF &&
#!/bin/sh
-- 
2.11.0.10.g1e1b186.dirty