On Mon, Feb 13, 2017 at 10:35:31PM +0100, Matthieu Moy wrote: > > Is it really that dangerous, though? The likely outcome is Git saying > > "nope, you don't have any changes to the file named drop". Of course the > > user may have meant something different, but I feel like "-p" is a good > > indicator that they are interested in making an actual stash. > > Indeed -p is not the best example. In the old thread, I used -q which is > much more problematic: > > git stash -q drop => interpreted as: git stash push -q drop > git stash drop -q => drop with option -q Yeah, I'd agree with that. I wouldn't propose to loosen it entirely, but rather to treat "-p" specially. > It's not really "dangerous" at least in this case, since we misinterpret > a destructive command for a less destructive one, but it is rather > confusing that changing the order between command and options change the > behavior. > > I actually find it a reasonable expectation to allow swapping commands > and options, some programs other than git allow it. I think we may have already crossed that bridge with "git -p stash". Not to mention that the ordering already _is_ relevant (we disallow one order but not the other). If we really wanted to allow swapping, it would mean making: git stash -p drop the same as: git stash drop -p I actually find _that_ more confusing. It would perhaps make more sense with something like "-q", which is more of a "global" option than a command-specific one. But I think we'd want to whitelist such global options (and "-p" would not be on that list). > > The complexity is that right now, the first-level decision of "which > > stash sub-command am I running?" doesn't know about any options. So "git > > stash -m foo" would be rejected in the name of typo prevention, unless > > that outer decision learns about "-m" as an option. > > Ah, OK. But that's not really hard to implement: when going through the > option list looking for non-option, shift one more time when finding -m. No, it's not hard conceptually. It just means implementing the option-parsing policy in two places. That's not too bad now, but if we started using rev-parse's options helper, then I think you have corner cases like "git stash -km foo". My "-p" suggestion suffers from a similar problem if you treat it as "you can omit the 'push' if you say "-p", rather than "if -p is the first option, it is a synonym for 'push -p'". -Peff