Mercurial > hg
comparison tests/test-help.t @ 27266:4dccc37b87bd
ui: support declaring path push urls as sub-options
Power users often want to apply per-path configuration options. For
example, they may want to declare an alternate URL for push operations
or declare a revset of revisions to push when `hg push` is used
(as opposed to attempting to push all revisions by default).
This patch establishes the use of sub-options (config options with
":" in the name) to declare additional behavior for paths.
New sub-options are declared by using the new ``@ui.pathsuboption``
decorator. This decorator serves multiple purposes:
* Declaring which sub-options are registered
* Declaring how a sub-option maps to an attribute on ``path``
instances (this is needed to `hg paths` can render sub-options
and values properly)
* Validation and normalization of config options to attribute
values
* Allows extensions to declare new sub-options without monkeypatching
* Allows extensions to overwrite built-in behavior for sub-option
handling
As convenient as the new option registration decorator is, extensions
(and even core functionality) may still need an additional hook point
to perform finalization of path instances. For example, they may wish
to validate that multiple options/attributes aren't conflicting with
each other. This hook point could be added later, if needed.
To prove this new functionality works, we implement the "pushurl"
path sub-option. This option declares the URL that `hg push` should
use by default.
We require that "pushurl" is an actual URL. This requirement might be
controversial and could be dropped if there is opposition. However,
objectors should read the complicated code in ui.path.__init__ and
commands.push for resolving non-URL values before making a judgement.
We also don't allow #fragment in the URLs. I intend to introduce a
":pushrev" (or similar) option to define a revset to control which
revisions are pushed when "-r <rev>" isn't passed into `hg push`.
This is much more powerful than #fragment and I don't think #fragment
is useful enough to continue supporting.
The [paths] section of the "config" help page has been updated
significantly. `hg paths` has been taught to display path sub-options.
The docs mention that "default-push" is now deprecated. However, there
are several references to it that need to be cleaned up. A large part
of this is converting more consumers to the new paths API. This will
happen naturally as more path sub-options are added and more and more
components need to access them.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 05 Dec 2015 21:11:04 -0800 |
parents | 4efb36ecaaec |
children | 5456374561a7 |
comparison
equal
deleted
inserted
replaced
27265:47539ea08bdb | 27266:4dccc37b87bd |
---|---|
1205 | 1205 |
1206 $ hg help hgrc.paths | 1206 $ hg help hgrc.paths |
1207 "paths" | 1207 "paths" |
1208 ------- | 1208 ------- |
1209 | 1209 |
1210 Assigns symbolic names to repositories. The left side is the symbolic | 1210 Assigns symbolic names and behavior to repositories. |
1211 name, and the right gives the directory or URL that is the location of the | 1211 |
1212 repository. Default paths can be declared by setting the following | 1212 Options are symbolic names defining the URL or directory that is the |
1213 entries. | 1213 location of the repository. Example: |
1214 | |
1215 [paths] | |
1216 my_server = https://example.com/my_repo | |
1217 local_path = /home/me/repo | |
1218 | |
1219 These symbolic names can be used from the command line. To pull from | |
1220 "my_server": "hg pull my_server". To push to "local_path": "hg push | |
1221 local_path". | |
1222 | |
1223 Options containing colons (":") denote sub-options that can influence | |
1224 behavior for that specific path. Example: | |
1225 | |
1226 [paths] | |
1227 my_server = https://example.com/my_path | |
1228 my_server:pushurl = ssh://example.com/my_path | |
1229 | |
1230 The following sub-options can be defined: | |
1231 | |
1232 "pushurl" | |
1233 The URL to use for push operations. If not defined, the location | |
1234 defined by the path's main entry is used. | |
1235 | |
1236 The following special named paths exist: | |
1214 | 1237 |
1215 "default" | 1238 "default" |
1216 Directory or URL to use when pulling if no source is specified. | 1239 The URL or directory to use when no source or remote is specified. |
1217 (default: repository from which the current repository was cloned) | 1240 |
1241 "hg clone" will automatically define this path to the location the | |
1242 repository was cloned from. | |
1218 | 1243 |
1219 "default-push" | 1244 "default-push" |
1220 Optional. Directory or URL to use when pushing if no destination is | 1245 (deprecated) The URL or directory for the default "hg push" location. |
1221 specified. | 1246 "default:pushurl" should be used instead. |
1222 | |
1223 Custom paths can be defined by assigning the path to a name that later can | |
1224 be used from the command line. Example: | |
1225 | |
1226 [paths] | |
1227 my_path = http://example.com/path | |
1228 | |
1229 To push to the path defined in "my_path" run the command: | |
1230 | |
1231 hg push my_path | |
1232 | 1247 |
1233 $ hg help glossary.mcguffin | 1248 $ hg help glossary.mcguffin |
1234 abort: help section not found | 1249 abort: help section not found |
1235 [255] | 1250 [255] |
1236 | 1251 |