Sergey Organov <sorganov@xxxxxxxxx> writes: > Junio C Hamano <gitster@xxxxxxxxx> writes: > >> Sergey Organov <sorganov@xxxxxxxxx> writes: >> >>> I'm still arguing in favor of fixing "-n", and I believe a fix is needed >>> independently from decision about "-f -f". >> >> Even though I do not personally like it, I do not think "which >> between do-it (f) and do-not-do-it (n) do you want to use?" is >> broken. > > Well, you are right, but "-n" is not documented as "do-not-do-it" in the > sense you use it here. > >> It sometimes irritates me to find "git clean" (without "-f" >> or "-n", and with clean.requireForce not disabled) complain, and I >> personally think "git clean" when clean.requireForce is in effect >> and no "-n" or "-f" were given should pretend as if "-n" were given. >> I wish if it were "without -n or -f, we pretend as if -n were given, >> possibly with a warning that says 'you need -f if you actually want >> to carry out these operations'". > > Yep, then we'd not need "-n" that much, only if to cancel explicit "-f" > (provided "-f -f" feature is removed.) > >> >> But that is a separate usability issue. > > Yep, and that'd be very different design. > >> >> What I find broken is that giving one 'f' and one 'n' in different >> order, i.e. "-f -n" and "-n -f", does not do what I expect. If you >> are choosing between do-it (f) and do-not-do-it (n), you ought to be >> able to rely on the usual last-one-wins rule. That I find broken. > > I fail to see where this expectation comes from, provided "-n" is not > documented as anything opposed to "-f": > > -n, --dry-run > Don’t actually remove anything, just show what would be done. > > This is typical convenient description of "dry run", and current "-n" > implementation is rather close to the description, that I'd still > rewrite to emphasize the primary goal of the --dry-run: > > > With these descriptions, the last thing that I'd expect is "-n -f" > removing my files. > > Overall, as I see it, we have buggy implementation of suitably > documented "--dry-run" option, and the best course is to fix the > bug, with no semantic changes to the option itself. OTOH, to preserve current actual behavior as much as possible, we can probably first fix documentation like this: -n, --dry-run Show what would be done, and don’t actually remove anything. This sets 'clean.requireForce' to 'false' for the duration of this command execution. that to me looks like a match for current observable behavior. Then we can fix '-n' implementation exactly according to this updated specification, making '-n' really independent from '-f', yet keeping pure "git clean -n" as well as "git clean -f -n", and "git clean -n -f" backward compatible. As a bonus, the above solution will also free our hands in [re]defining '-f -f' later, if needed. WDYT? Thanks, -- Sergey Organov