Thread (121 messages) 121 messages, 12 authors, 2020-08-06

Re: [PATCH v2 01/18] maintenance: create basic maintenance runner

From: Jonathan Nieder <hidden>
Date: 2020-08-03 17:46:58

Derrick Stolee wrote:
On 7/30/2020 8:30 PM, Jonathan Nieder wrote:
quoted
Derrick Stolee wrote:
quoted
On 7/29/2020 6:19 PM, Jonathan Nieder wrote:
quoted
quoted
quoted
[jrnieder] How do I supply the tasks on the command line?  Are they
parameters to this subcommand?  If so, it could make sense for this to
say something like

	run <task>...::
Hopefully this is documented to your satisfaction when the ability
to customize the tasks is implemented.
[...]
I mean that there is only one task right now. Until the commit-graph
task is implemented, there is no need to have a --task=<task> option.
Ah, that wasn't clear to me from the docs.

You're saying that "git maintenance run" runs the "gc" task?  Can the
documentation say so?

[...]
quoted
quoted
quoted
quoted
+static struct maintenance_opts {
+	int auto_flag;
+} opts;
Packing this in a struct feels a bit unusual.  Is the struct going to
be passed somewhere, or could these be individual locals in
cmd_maintenance?
This will grow, and I'd rather have one global struct than many
individual global items. It makes it clearer when I use
"opts.auto_flag" that this corresponds to whether "--auto" was
provided as a command-line option.
That doesn't seem idiomatic within the Git codebase.

Can they be locals instead?
Which part do you want to be idiomatic? The fact that the parse-options
library typically refers to static global values or the fact that the
data is not organized in a struct?
parse-options has no requirement about the values being global.  Some
older code does that, but newer code tends to use locals when
appropriate.

Putting it in a struct is fine as long as that struct is being passed
around.  What isn't idiomatic in Git is using a global struct for
namespacing.

[...]
The natural thing to do to "fix" that situation is to create a struct
that holds the information from the parsed command-line arguments. But
then why is it a local parameter that is passed through all of the
local methods instead of a global (as presented here in this patch)?
I'm having trouble parsing that last sentence.  You're saying a global
is preferable over passing around a pointer to a local "opts" struct?

[...]
quoted
quoted
If there is a better way to ask "Did my command call 'git gc' (with
no arguments|with these arguments)?" then I'm happy to consider it.
My proposal was just to factor this out into a function in
test-lib-functions.sh so it's easy to evolve over time in one place.
This is a valuable suggestion, but this series is already too large
to make such a change in addition to the patches already here.
Hm, it's not clear to me that this would make the series significantly
larger.

And on the contrary, it would make the code less fragile.  I think this
is important.

https://chromium.googlesource.com/chromium/src/+/master/docs/cl_respect.md#remember-communication-can-be-hard:
if you'd like to meet out of band, let me know, and I'd be happy to go
into this further.

Thanks,
Jonathan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help