git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] git remote with superfluous arguments
@ 2013-04-24 13:54 Thomas Rast
  2013-04-24 13:54 ` [PATCH 1/3] remote: add a test for extra arguments, according to docs Thomas Rast
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Thomas Rast @ 2013-04-24 13:54 UTC (permalink / raw)
  To: git

Today I botched a cut&paste and ran

  git remote add git remote add origin <url>

only to notice, several commands later, that while it had succeeded,
it had in fact added a remote called 'git' with an url of 'remote'.
Some investigation yielded these fixes.


Thomas Rast (3):
  remote: add a test for extra arguments, according to docs
  remote: check for superfluous arguments in 'git remote add'
  remote: 'show' and 'prune' take more than one remote

 Documentation/git-remote.txt |  4 ++--
 builtin/remote.c             |  2 +-
 t/t5505-remote.sh            | 22 ++++++++++++++++++++++
 3 files changed, 25 insertions(+), 3 deletions(-)

-- 
1.8.2.1.931.g0116868

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] remote: add a test for extra arguments, according to docs
  2013-04-24 13:54 [PATCH 0/3] git remote with superfluous arguments Thomas Rast
@ 2013-04-24 13:54 ` Thomas Rast
  2013-04-24 21:37   ` Junio C Hamano
  2013-04-24 13:54 ` [PATCH 2/3] remote: check for superfluous arguments in 'git remote add' Thomas Rast
  2013-04-24 13:54 ` [PATCH 3/3] remote: 'show' and 'prune' take more than one remote Thomas Rast
  2 siblings, 1 reply; 7+ messages in thread
From: Thomas Rast @ 2013-04-24 13:54 UTC (permalink / raw)
  To: git

This adds one test or comment for each subcommand of git-remote
according to its current documentation.  All but 'set-branches' and
'update' are listed as taking only a fixed number of arguments; for
those we can write a test with one more (bogus) argument, and see if
the command notices that.

They fail on several counts: 'add' does not check for extra arguments,
and 'show' and 'prune' actually iterate over remotes (i.e., take any
number of args).  We'll fix them in the next two patches.

The -f machinery is only there to make the tests readable while still
ensuring they pass as a whole, and will be removed in the final patch.

Signed-off-by: Thomas Rast <trast@inf.ethz.ch>
---
 t/t5505-remote.sh | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index 6579a86..764ee97 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -1003,4 +1003,31 @@ test_expect_success 'remote set-url --delete baz' '
 	cmp expect actual
 '
 
+test_expect_success 'extra args: setup' '
+	# add a dummy origin so that this does not trigger failure
+	git remote add origin .
+'
+
+test_extra_arg () {
+	expect="success"
+	if test "z$1" = "z-f"; then
+		expect=failure
+		shift
+	fi
+	test_expect_$expect "extra args: $*" "
+		test_must_fail git remote $* bogus_extra_arg 2>actual &&
+		grep '^usage:' actual
+	"
+}
+
+test_extra_arg -f add nick url
+test_extra_arg rename origin newname
+test_extra_arg remove origin
+test_extra_arg set-head origin master
+# set-branches takes any number of args
+test_extra_arg set-url origin newurl oldurl
+test_extra_arg -f show origin
+test_extra_arg -f prune origin
+# update takes any number of args
+
 test_done
-- 
1.8.2.1.931.g0116868

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] remote: check for superfluous arguments in 'git remote add'
  2013-04-24 13:54 [PATCH 0/3] git remote with superfluous arguments Thomas Rast
  2013-04-24 13:54 ` [PATCH 1/3] remote: add a test for extra arguments, according to docs Thomas Rast
@ 2013-04-24 13:54 ` Thomas Rast
  2013-04-24 13:54 ` [PATCH 3/3] remote: 'show' and 'prune' take more than one remote Thomas Rast
  2 siblings, 0 replies; 7+ messages in thread
From: Thomas Rast @ 2013-04-24 13:54 UTC (permalink / raw)
  To: git

The 'git remote add' subcommand did not check for superfluous command
line arguments.  Make it so.

Signed-off-by: Thomas Rast <trast@inf.ethz.ch>
---
 builtin/remote.c  | 2 +-
 t/t5505-remote.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/builtin/remote.c b/builtin/remote.c
index 937484d..5e54d36 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -178,7 +178,7 @@ static int add(int argc, const char **argv)
 	argc = parse_options(argc, argv, NULL, options, builtin_remote_add_usage,
 			     0);
 
-	if (argc < 2)
+	if (argc != 2)
 		usage_with_options(builtin_remote_add_usage, options);
 
 	if (mirror && master)
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index 764ee97..eea87fc 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -1020,7 +1020,7 @@ test_extra_arg () {
 	"
 }
 
-test_extra_arg -f add nick url
+test_extra_arg add nick url
 test_extra_arg rename origin newname
 test_extra_arg remove origin
 test_extra_arg set-head origin master
-- 
1.8.2.1.931.g0116868

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] remote: 'show' and 'prune' take more than one remote
  2013-04-24 13:54 [PATCH 0/3] git remote with superfluous arguments Thomas Rast
  2013-04-24 13:54 ` [PATCH 1/3] remote: add a test for extra arguments, according to docs Thomas Rast
  2013-04-24 13:54 ` [PATCH 2/3] remote: check for superfluous arguments in 'git remote add' Thomas Rast
@ 2013-04-24 13:54 ` Thomas Rast
  2 siblings, 0 replies; 7+ messages in thread
From: Thomas Rast @ 2013-04-24 13:54 UTC (permalink / raw)
  To: git

The 'git remote show' and 'prune' subcommands are documented as taking
only a single remote name argument, but that is not the case; they
will simply iterate the action over all remotes given.  Update the
documentation and tests to match.

With the last user of the -f flag gone, we also remove the code
supporting it.

Signed-off-by: Thomas Rast <trast@inf.ethz.ch>
---
 Documentation/git-remote.txt |  4 ++--
 t/t5505-remote.sh            | 11 +++--------
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index e8c396b..7a6f354 100644
--- a/Documentation/git-remote.txt
+++ b/Documentation/git-remote.txt
@@ -18,8 +18,8 @@ SYNOPSIS
 'git remote set-url' [--push] <name> <newurl> [<oldurl>]
 'git remote set-url --add' [--push] <name> <newurl>
 'git remote set-url --delete' [--push] <name> <url>
-'git remote' [-v | --verbose] 'show' [-n] <name>
-'git remote prune' [-n | --dry-run] <name>
+'git remote' [-v | --verbose] 'show' [-n] <name>...
+'git remote prune' [-n | --dry-run] <name>...
 'git remote' [-v | --verbose] 'update' [-p | --prune] [(<group> | <remote>)...]
 
 DESCRIPTION
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index eea87fc..dd10ff0 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -1009,12 +1009,7 @@ test_expect_success 'extra args: setup' '
 '
 
 test_extra_arg () {
-	expect="success"
-	if test "z$1" = "z-f"; then
-		expect=failure
-		shift
-	fi
-	test_expect_$expect "extra args: $*" "
+	test_expect_success "extra args: $*" "
 		test_must_fail git remote $* bogus_extra_arg 2>actual &&
 		grep '^usage:' actual
 	"
@@ -1026,8 +1021,8 @@ test_extra_arg remove origin
 test_extra_arg set-head origin master
 # set-branches takes any number of args
 test_extra_arg set-url origin newurl oldurl
-test_extra_arg -f show origin
-test_extra_arg -f prune origin
+# show takes any number of args
+# prune takes any number of args
 # update takes any number of args
 
 test_done
-- 
1.8.2.1.931.g0116868

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] remote: add a test for extra arguments, according to docs
  2013-04-24 13:54 ` [PATCH 1/3] remote: add a test for extra arguments, according to docs Thomas Rast
@ 2013-04-24 21:37   ` Junio C Hamano
  2013-04-25  7:23     ` Thomas Rast
  0 siblings, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2013-04-24 21:37 UTC (permalink / raw)
  To: Thomas Rast; +Cc: git

Thomas Rast <trast@inf.ethz.ch> writes:

> +test_extra_arg () {
> +	expect="success"
> +	if test "z$1" = "z-f"; then
> +		expect=failure
> +		shift
> +	fi
> +	test_expect_$expect "extra args: $*" "
> +		test_must_fail git remote $* bogus_extra_arg 2>actual &&
> +		grep '^usage:' actual
> +	"
> +}
> +
> +test_extra_arg -f add nick url
> +test_extra_arg rename origin newname

Perhaps just a taste in readability thing, but I would prefer to see
them more like

	test_extra_arg_expect failure add nick url
	test_extra_arg_expect success rename origin newname

than misunderstanding-inviting "-f" that often stands for "--force".

Other than that, the whole series was a pleasant read.  Thanks.


> +test_extra_arg remove origin
> +test_extra_arg set-head origin master
> +# set-branches takes any number of args
> +test_extra_arg set-url origin newurl oldurl
> +test_extra_arg -f show origin
> +test_extra_arg -f prune origin
> +# update takes any number of args
> +
>  test_done

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] remote: add a test for extra arguments, according to docs
  2013-04-24 21:37   ` Junio C Hamano
@ 2013-04-25  7:23     ` Thomas Rast
  2013-04-25 15:31       ` Junio C Hamano
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Rast @ 2013-04-25  7:23 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Junio C Hamano <gitster@pobox.com> writes:

> Thomas Rast <trast@inf.ethz.ch> writes:
>
>> +test_extra_arg () {
>> +	expect="success"
>> +	if test "z$1" = "z-f"; then
>> +		expect=failure
>> +		shift
>> +	fi
>> +	test_expect_$expect "extra args: $*" "
>> +		test_must_fail git remote $* bogus_extra_arg 2>actual &&
>> +		grep '^usage:' actual
>> +	"
>> +}
>> +
>> +test_extra_arg -f add nick url
>> +test_extra_arg rename origin newname
>
> Perhaps just a taste in readability thing, but I would prefer to see
> them more like
>
> 	test_extra_arg_expect failure add nick url
> 	test_extra_arg_expect success rename origin newname
>
> than misunderstanding-inviting "-f" that often stands for "--force".

Hmm.  I had that at first, but then the final cleanup would have had to
touch all tests to remove the optional argument, making it noisy.

Anyway, it's probably all a bit over-engineered for only one effective
code change ;-)

-- 
Thomas Rast
trast@{inf,student}.ethz.ch

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] remote: add a test for extra arguments, according to docs
  2013-04-25  7:23     ` Thomas Rast
@ 2013-04-25 15:31       ` Junio C Hamano
  0 siblings, 0 replies; 7+ messages in thread
From: Junio C Hamano @ 2013-04-25 15:31 UTC (permalink / raw)
  To: Thomas Rast; +Cc: git

Thomas Rast <trast@inf.ethz.ch> writes:

> Junio C Hamano <gitster@pobox.com> writes:
>
>> Thomas Rast <trast@inf.ethz.ch> writes:
>>
>>> +test_extra_arg () {
>>> +	expect="success"
>>> +	if test "z$1" = "z-f"; then
>>> +		expect=failure
>>> +		shift
>>> +	fi
>>> +	test_expect_$expect "extra args: $*" "
>>> +		test_must_fail git remote $* bogus_extra_arg 2>actual &&
>>> +		grep '^usage:' actual
>>> +	"
>>> +}
>>> +
>>> +test_extra_arg -f add nick url
>>> +test_extra_arg rename origin newname
>>
>> Perhaps just a taste in readability thing, but I would prefer to see
>> them more like
>>
>> 	test_extra_arg_expect failure add nick url
>> 	test_extra_arg_expect success rename origin newname
>>
>> than misunderstanding-inviting "-f" that often stands for "--force".
>
> Hmm.  I had that at first, but then the final cleanup would have had to
> touch all tests to remove the optional argument, making it noisy.

You do not need a final cleanup, as I _never_ meant failure/success
in the above illustration to be _optional_.  Being explicit reduces
mental burden when you later have to read such a custom scaffolding
each test invents in an ad-hoc manner to suit its needs.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-04-25 15:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-24 13:54 [PATCH 0/3] git remote with superfluous arguments Thomas Rast
2013-04-24 13:54 ` [PATCH 1/3] remote: add a test for extra arguments, according to docs Thomas Rast
2013-04-24 21:37   ` Junio C Hamano
2013-04-25  7:23     ` Thomas Rast
2013-04-25 15:31       ` Junio C Hamano
2013-04-24 13:54 ` [PATCH 2/3] remote: check for superfluous arguments in 'git remote add' Thomas Rast
2013-04-24 13:54 ` [PATCH 3/3] remote: 'show' and 'prune' take more than one remote Thomas Rast

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).