Fossil

Update of "branch/double-dash-flag"
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview

Artifact ID: 07d5a2b1e2bf4fea9b5b2c046ca89bce3842968d6590c5aee8aeb4b41d2702e8
Page Name:branch/double-dash-flag
Date: 2019-09-27 16:30:46
Original User: stephan
Mimetype:text/x-markdown
Parent: e5e18be07ebf55690ee042b965f0cec4d00137b32543ece58482792f4e047a5b (diff)
Next 4a5ab01fd4f1081457e027e2090ccd6ad16e72d42d492271d2e4cb0a1bcfbde8
Content

Management Summary

The double-dash-flag branch aims to add support for the conventional interpretation of a -- flag: all arguments after the first instance of -- are to be treated as non-flag arguments (e.g. file/wiki/branch/whatever names).

This feature request is from: https://fossil-scm.org/forum/forumpost/64acc6b653

The implementation is not 100% compliant with POSIX/Unix conventions because it cannot be without Breaking Stuff, but it "should" be close enough to be useful/conventional for the contexts where using -- makes sense in Fossil. For example, uv add treats a filename of - as stdin by default (and has valid use cases enabled by that), and -- could be used to make uv add treat - as a filename (that's the original use case for which conventional -- support was proposed).

Compatibility vs. Historical Behaviour

Fossil's historical handling of -- is really weird: the first time find_option() encounters --, it removes that flag and stops processing arguments. Subsequent calls to find_option() then never see -- and thus treat all arguments as potential flags (even those after the prior position of --). Since that behaviour was never useful, and potentially confusing, it is unexpected that the changes made in this branch will break any historical usage of the CLI commands.

For example:

fossil foo -- -a -b -c

The current (trunk, as of this writing) interpretation of -a -b -c, because of the "one-time-swallowing" of --, depends on what order those flags are checked for via find_option(). It seems highly unlikely that anyone could have reliably depended on that, and therefore seems unlikely that this change will break anyone's scripts.

Commands which accept a filename as the value of a flag are unaffected by these changes, provided the flag comes before --:

fossil foo -R - -- -a -b -c

Would (both before and after this change) treat - as a repository file name, but this change will cause the subsequent -a -b -c flags to be interpreted as non-flags (it's then up to the foo command to deal with them).

(ONGOING) List of commands/subcommands extended to support --

(Please keep this list alphabetized by command/subcommand name.)