threads / rfc / 23871

patchRe: [PATCH RFC] Add a config verbose option fetch and push

Subject: Re: [PATCH RFC] Add a config verbose option fetch and push

## tl;dr

6 messages between May 21, 2010 and May 22, 2010. Diffs are folded; open one to read it.

replies: 5people: 3as markdown or json

Nathan W. Panike· May 21, 2010, 13:26 UTC · lore
---
Show 13 quoted lines
>> 
>> +fetch.verbose::
>> +	If true, it is the same as setting "-v" on the command line. If it is
>> +	false or not defined, git will use the command line parameters to
>> +	decide the verboseness of fetch.
>> +
> 
> Don't you usually use the configured option as the default, and 
> then let the command line options override it (e.g., by specifying
> --no-verbose).
> 
> //Peter
> 
This patch fixes this objection.
 Documentation/config.txt |    7 +++++++
 builtin/fetch.c          |    7 +++++++
 builtin/push.c           |    7 +++++++
 3 files changed, 21 insertions(+), 0 deletions(-)
Show changes to 3 files +21 −0

Documentation/config.txt, builtin/fetch.c, builtin/push.c

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 39140ba..fc88d02 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -860,6 +860,9 @@ fetch.unpackLimit::
 	especially on slow filesystems.  If not set, the value of
 	`transfer.unpackLimit` is used instead.
 
+fetch.verbose::
+	If true, it is the same as setting "-v" on the command line.
+
 format.attach::
 	Enable multipart/mixed attachments as the default for
 	'format-patch'.  The value can also be a double quoted string
@@ -1495,6 +1498,10 @@ push.default::
 * `tracking` push the current branch to its upstream branch.
 * `current` push the current branch to a branch of the same name.
 
+push.verbose::
+	If true, it is the same as using the '-v' flag on the command
+	line.
+
 rebase.stat::
 	Whether to show a diffstat of what changed upstream since the last
 	rebase. False by default.
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 8470850..f4832fe 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -885,6 +885,12 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
 	return exit_code;
 }
 
+static int git_fetch_verbose_config(const char *var,const char *value, void *dummy)
+{
+	if(!strcmp("fetch.verbose",var))
+		verbosity = git_config_maybe_bool(NULL,value);
+}
+
 int cmd_fetch(int argc, const char **argv, const char *prefix)
 {
 	int i;
@@ -897,6 +903,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
 	for (i = 1; i < argc; i++)
 		strbuf_addf(&default_rla, " %s", argv[i]);
 
+	git_config(git_fetch_verbose_config,NULL);
 	argc = parse_options(argc, argv, prefix,
 			     builtin_fetch_options, builtin_fetch_usage, 0);
 
diff --git a/builtin/push.c b/builtin/push.c
index f4358b9..e907b11 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -202,6 +202,12 @@ static int do_push(const char *repo, int flags)
 	return !!errs;
 }
 
+static int git_push_verbose_config(const char *var, const char *value, void *d)
+{
+	if(!strcmp("push.verbose",var))
+		verbosity = git_config_maybe_bool(NULL,value);
+}
+
 int cmd_push(int argc, const char **argv, const char *prefix)
 {
 	int flags = 0;
@@ -229,6 +235,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
 	};
 
 	git_config(git_default_config, NULL);
+	git_config(git_push_verbose_config, NULL);
 	argc = parse_options(argc, argv, prefix, options, push_usage, 0);
 
 	if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))
-- 
1.7.1.97.gf85c7
Ævar Arnfjörð Bjarmason· May 21, 2010, 17:10 UTC · re: Nathan W. Panike · lore

Since Peter Kjellerstedt wanted --ff-only, and you want --verbose. I wonder whether a better solution wouldn't be to farm this functionality out to the config parser.

I.e. you'd do something like:
    static struct option builtin_fetch_options[] = {
        OPT__PROGRAM_NAME("fetch"), /* this is new */
	    OPT__VERBOSITY(&verbosity),
    	OPT_BOOLEAN(0, "all", &all,
	    	    "fetch from all remotes"),
        ...
And then in your .gitconfig:
    [fetch "option"]
        verbose = 1
Is there any reason not to add such a general facility?
Thomas Rast· May 22, 2010, 10:44 UTC · re: Ævar Arnfjörð Bjarmason · lore
Ævar Arnfjörð Bjarmason wrote:
> Since Peter Kjellerstedt wanted --ff-only, and you want --verbose. I
> wonder whether a better solution wouldn't be to farm this
> functionality out to the config parser.
[...]
>     [fetch "option"]
>         verbose = 1
> 
> Is there any reason not to add such a general facility?

That would completely ruin the scriptability of almost all commands. Imagine the user added the following options as default:

  add --edit
  checkout --patch
  cherry-pick --no-commit
  commit --amend
  pull --rebase

I'm sure you can find one option that changes the command in something completely different *for every command*.

In fact even pull --ff-only has the same problem since it will refuse the merge in cases where an unmodified pull would go through.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Ævar Arnfjörð Bjarmason· May 22, 2010, 12:01 UTC · re: Thomas Rast · lore
On Sat, May 22, 2010 at 10:44, Thomas Rast <trast@student.ethz.ch> wrote:
Show 12 quoted lines
> Ævar Arnfjörð Bjarmason wrote:
> That would completely ruin the scriptability of almost all commands.
> Imagine the user added the following options as default:
>
>  add --edit
>  checkout --patch
>  cherry-pick --no-commit
>  commit --amend
>  pull --rebase
>
> I'm sure you can find one option that changes the command in something
> completely different *for every command*.
Sure. But so would adding this as git-add to your $PATH:
    #!/bin/sh
    /usr/lib/git-core/git-add --edit $@

Git already has plenty of ways to shoot yourself in the foot. I don't see how it's worse if that's done through some generalized facility which results in less special-case code in individual tools.

Thomas Rast· May 22, 2010, 13:34 UTC · re: Ævar Arnfjörð Bjarmason · lore
Ævar Arnfjörð Bjarmason wrote:
Show 5 quoted lines
> On Sat, May 22, 2010 at 10:44, Thomas Rast <trast@student.ethz.ch> wrote:
> > Ævar Arnfjörð Bjarmason wrote:
> > That would completely ruin the scriptability of almost all commands.
> > Imagine the user added the following options as default:
> >  add --edit
[...]
Show 7 quoted lines
> > I'm sure you can find one option that changes the command in something
> > completely different *for every command*.
> 
> Sure. But so would adding this as git-add to your $PATH:
> 
>     #!/bin/sh
>     /usr/lib/git-core/git-add --edit $@
Two points:
* This way is not documented in git-config(1), as the proposed
  interface would have to be; hence, it is not "official".
* More importantly, it doesn't work; for builtins such as git-add, not
  even if you put it under the `git --exec-path` (yes, I've tested
  this).
> Git already has plenty of ways to shoot yourself in the foot.
Can't argue with that.
-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Ævar Arnfjörð Bjarmason· May 22, 2010, 14:15 UTC · re: Thomas Rast · lore
On Sat, May 22, 2010 at 13:34, Thomas Rast <trast@student.ethz.ch> wrote:
Show 23 quoted lines
> Ævar Arnfjörð Bjarmason wrote:
>> On Sat, May 22, 2010 at 10:44, Thomas Rast <trast@student.ethz.ch> wrote:
>> > Ævar Arnfjörð Bjarmason wrote:
>> > That would completely ruin the scriptability of almost all commands.
>> > Imagine the user added the following options as default:
>> >  add --edit
> [...]
>> > I'm sure you can find one option that changes the command in something
>> > completely different *for every command*.
>>
>> Sure. But so would adding this as git-add to your $PATH:
>>
>>     #!/bin/sh
>>     /usr/lib/git-core/git-add --edit $@
>
> Two points:
>
> * This way is not documented in git-config(1), as the proposed
>  interface would have to be; hence, it is not "official".
>
> * More importantly, it doesn't work; for builtins such as git-add, not
>  even if you put it under the `git --exec-path` (yes, I've tested
>  this).

I actually tested it too and found that it didn't work. Then thought "meh, it's pseudocode" and pressed "Send".

Aside from the specific implementation it's easy to make that work the right way. You can alias the git command itself and munge its arguments before passing them on to Git itself.

Anyway, this feature isn't something I actually care about. I only wanted to suggest that if we're going to get lots of proposals to add a specific config flag for some specific option in some specific tool. That maybe it would be easier for everyone if there was some general facility to do so. It would cut down on special-case code in individual tools.

>> Git already has plenty of ways to shoot yourself in the foot.
>
> Can't argue with that.

And perhaps a general facility might actually improve scriptability. A determined user is going to override Git anyway, even if that means some gross hack involving munging $PATH and overriding of Git itself. At least if such users were pointed to a general facility script writers could set GIT_IGNORE_CRAZY_USER_DIRECTIVES=1 or something like that.

← back to recent threads