sapling/eden/scm/tests/test-alias.t

816 lines
21 KiB
Perl
Raw Normal View History

#chg-compatible
$ HGFOO=BAR; export HGFOO
$ readconfig <<'EOF'
2010-08-12 18:46:56 +04:00
> [alias]
> # should clobber ci but not commit (issue2993)
> ci = version
2010-08-12 18:46:56 +04:00
> myinit = init
> mycommit = commit
> optionalrepo = showconfig alias.myinit
2010-08-12 18:46:56 +04:00
> cleanstatus = status -c
> unknown = bargle
> ambiguous = s
> recursive = recursive
> disabled = extorder
2010-08-12 18:46:56 +04:00
> nodefinition =
> noclosingquotation = '
2010-08-12 18:46:56 +04:00
> no--cwd = status --cwd elsewhere
> no-R = status -R elsewhere
> no--repo = status --repo elsewhere
> no--repository = status --repository elsewhere
> no--config = status --config a.config=1
2010-08-12 18:46:56 +04:00
> mylog = log
> lognull = log -r null
> shortlog = log --template '{rev} {node|short} | {date|isodate}\n'
> positional = log --template '{$2} {$1} | {date|isodate}\n'
2010-08-12 18:46:56 +04:00
> dln = lognull --debug
> nousage = rollback
> put = export -r 0 -o "$FOO/%R.diff"
> blank = !echo
> self = !echo $0
> echoall = !echo "$@"
> echo1 = !echo $1
> echo2 = !echo $2
> echo13 = !echo $1 $3
> echotokens = !printf "%s\n" "$@"
> count = !hg log -r "$@" --template=. | wc -c | sed -e 's/ //g'
> mcount = !hg log $@ --template=. | wc -c | sed -e 's/ //g'
2010-08-12 18:46:56 +04:00
> rt = root
> idalias = id
> idaliaslong = id
> idaliasshell = !echo test
> parentsshell1 = !echo one
> parentsshell2 = !echo two
> escaped1 = !echo 'test$$test'
> escaped2 = !echo "HGFOO is $$HGFOO"
> escaped3 = !echo $1 is $$$1
> escaped4 = !echo \$$0 \$$@
> exit1 = !sh -c 'exit 1'
> documented = id
> documented:doc = an alias for the id command
2010-08-12 18:46:56 +04:00
> [defaults]
> mylog = -q
> lognull = -q
> log = -v
> EOF
basic
$ hg myinit alias
unknown
$ hg unknown
unknown command 'bargle'
(use 'hg help' to get help)
[255]
2010-08-12 18:46:56 +04:00
$ hg help unknown
alias for: bargle
abort: no such help topic: unknown
(try 'hg help --keyword unknown')
[255]
2010-08-12 18:46:56 +04:00
ambiguous
$ hg ambiguous
unknown command 's'
(use 'hg help' to get help)
[255]
2010-08-12 18:46:56 +04:00
$ hg help ambiguous
alias for: s
abort: no such help topic: ambiguous
(try 'hg help --keyword ambiguous')
[255]
2010-08-12 18:46:56 +04:00
recursive
$ hg recursive
unknown command 'recursive'
(use 'hg help' to get help)
[255]
2010-08-12 18:46:56 +04:00
$ hg help recursive
abort: no such help topic: recursive
(try 'hg help --keyword recursive')
[255]
2010-08-12 18:46:56 +04:00
disabled
$ hg disabled
unknown command 'extorder'
(use 'hg help' to get help)
[255]
$ hg help disabled
alias for: extorder
abort: no such help topic: disabled
(try 'hg help --keyword disabled')
[255]
2010-08-12 18:46:56 +04:00
no definition
$ hg nodef
unknown command 'nodef'
(use 'hg help' to get help)
[255]
2010-08-12 18:46:56 +04:00
$ hg help nodef
abort: no such help topic: nodef
(try 'hg help --keyword nodef')
[255]
2010-08-12 18:46:56 +04:00
no closing quotation
$ hg noclosing
unknown command 'noclosing'
(use 'hg help' to get help)
[255]
$ hg help noclosing
abort: no such help topic: noclosing
(try 'hg help --keyword noclosing')
[255]
"--" in alias definition should be preserved
$ hg --config alias.dash='cat --' -R alias dash -r0
abort: -r0 not under root '$TESTTMP/alias'
(consider using '--cwd alias')
[255]
2010-08-12 18:46:56 +04:00
invalid options
$ hg init
2010-08-12 18:46:56 +04:00
$ hg no--cwd
abort: option --cwd may not be abbreviated!
[255]
2010-08-12 18:46:56 +04:00
$ hg help no--cwd
alias for: status --cwd elsewhere
hg status [OPTION]... [FILE]...
aliases: st
list files with pending changes
Show status of files in the repository using the following status
indicators:
M = modified
A = added
R = removed
C = clean
! = missing (deleted by a non-hg command, but still tracked)
? = not tracked
I = ignored
= origin of the previous file (with --copies)
By default, shows files that have been modified, added, removed, deleted,
or that are unknown (corresponding to the options -mardu). Files that are
unmodified, ignored, or the source of a copy/move operation are not
listed.
To control the exact statuses that are shown, specify the relevant flags
(like -rd to show only files that are removed or deleted). Additionally,
specify -q/--quiet to hide both unknown and ignored files.
To show the status of specific files, provide an explicit list of files to
match. To include or exclude files using regular expressions, use -I or
-X.
If --rev is specified, and only one revision is given, it is used as the
base revision. If two revisions are given, the differences between them
are shown. The --change option can also be used as a shortcut to list the
changed files of a revision from its first parent.
Note:
'hg status' might appear to disagree with 'hg diff' if permissions have
changed or a merge has occurred, because the standard diff format does
not report permission changes and 'hg diff' only reports changes
relative to one merge parent.
Returns 0 on success.
Options ([+] can be repeated):
-A --all show status of all files
-m --modified show only modified files
-a --added show only added files
-r --removed show only removed files
-d --deleted show only deleted (but tracked) files
-c --clean show only files without changes
-u --unknown show only unknown (not tracked) files
-i --ignored show only ignored files
-n --no-status hide status prefix
-C --copies show source of copied files
-0 --print0 end filenames with NUL, for use with xargs
--rev REV [+] show difference from revision
--change REV list the changed files of a revision
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
(some details hidden, use --verbose to show complete help)
2010-08-12 18:46:56 +04:00
$ hg no-R
abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
[255]
2010-08-12 18:46:56 +04:00
$ hg help no-R
alias for: status -R elsewhere
hg status [OPTION]... [FILE]...
aliases: st
list files with pending changes
Show status of files in the repository using the following status
indicators:
M = modified
A = added
R = removed
C = clean
! = missing (deleted by a non-hg command, but still tracked)
? = not tracked
I = ignored
= origin of the previous file (with --copies)
By default, shows files that have been modified, added, removed, deleted,
or that are unknown (corresponding to the options -mardu). Files that are
unmodified, ignored, or the source of a copy/move operation are not
listed.
To control the exact statuses that are shown, specify the relevant flags
(like -rd to show only files that are removed or deleted). Additionally,
specify -q/--quiet to hide both unknown and ignored files.
To show the status of specific files, provide an explicit list of files to
match. To include or exclude files using regular expressions, use -I or
-X.
If --rev is specified, and only one revision is given, it is used as the
base revision. If two revisions are given, the differences between them
are shown. The --change option can also be used as a shortcut to list the
changed files of a revision from its first parent.
Note:
'hg status' might appear to disagree with 'hg diff' if permissions have
changed or a merge has occurred, because the standard diff format does
not report permission changes and 'hg diff' only reports changes
relative to one merge parent.
Returns 0 on success.
Options ([+] can be repeated):
-A --all show status of all files
-m --modified show only modified files
-a --added show only added files
-r --removed show only removed files
-d --deleted show only deleted (but tracked) files
-c --clean show only files without changes
-u --unknown show only unknown (not tracked) files
-i --ignored show only ignored files
-n --no-status hide status prefix
-C --copies show source of copied files
-0 --print0 end filenames with NUL, for use with xargs
--rev REV [+] show difference from revision
--change REV list the changed files of a revision
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
(some details hidden, use --verbose to show complete help)
2010-08-12 18:46:56 +04:00
$ hg no--repo
abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
[255]
2010-08-12 18:46:56 +04:00
$ hg help no--repo
alias for: status --repo elsewhere
hg status [OPTION]... [FILE]...
aliases: st
list files with pending changes
Show status of files in the repository using the following status
indicators:
M = modified
A = added
R = removed
C = clean
! = missing (deleted by a non-hg command, but still tracked)
? = not tracked
I = ignored
= origin of the previous file (with --copies)
By default, shows files that have been modified, added, removed, deleted,
or that are unknown (corresponding to the options -mardu). Files that are
unmodified, ignored, or the source of a copy/move operation are not
listed.
To control the exact statuses that are shown, specify the relevant flags
(like -rd to show only files that are removed or deleted). Additionally,
specify -q/--quiet to hide both unknown and ignored files.
To show the status of specific files, provide an explicit list of files to
match. To include or exclude files using regular expressions, use -I or
-X.
If --rev is specified, and only one revision is given, it is used as the
base revision. If two revisions are given, the differences between them
are shown. The --change option can also be used as a shortcut to list the
changed files of a revision from its first parent.
Note:
'hg status' might appear to disagree with 'hg diff' if permissions have
changed or a merge has occurred, because the standard diff format does
not report permission changes and 'hg diff' only reports changes
relative to one merge parent.
Returns 0 on success.
Options ([+] can be repeated):
-A --all show status of all files
-m --modified show only modified files
-a --added show only added files
-r --removed show only removed files
-d --deleted show only deleted (but tracked) files
-c --clean show only files without changes
-u --unknown show only unknown (not tracked) files
-i --ignored show only ignored files
-n --no-status hide status prefix
-C --copies show source of copied files
-0 --print0 end filenames with NUL, for use with xargs
--rev REV [+] show difference from revision
--change REV list the changed files of a revision
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
(some details hidden, use --verbose to show complete help)
2010-08-12 18:46:56 +04:00
$ hg no--repository
abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
[255]
2010-08-12 18:46:56 +04:00
$ hg help no--repository
alias for: status --repository elsewhere
hg status [OPTION]... [FILE]...
aliases: st
list files with pending changes
Show status of files in the repository using the following status
indicators:
M = modified
A = added
R = removed
C = clean
! = missing (deleted by a non-hg command, but still tracked)
? = not tracked
I = ignored
= origin of the previous file (with --copies)
By default, shows files that have been modified, added, removed, deleted,
or that are unknown (corresponding to the options -mardu). Files that are
unmodified, ignored, or the source of a copy/move operation are not
listed.
To control the exact statuses that are shown, specify the relevant flags
(like -rd to show only files that are removed or deleted). Additionally,
specify -q/--quiet to hide both unknown and ignored files.
To show the status of specific files, provide an explicit list of files to
match. To include or exclude files using regular expressions, use -I or
-X.
If --rev is specified, and only one revision is given, it is used as the
base revision. If two revisions are given, the differences between them
are shown. The --change option can also be used as a shortcut to list the
changed files of a revision from its first parent.
Note:
'hg status' might appear to disagree with 'hg diff' if permissions have
changed or a merge has occurred, because the standard diff format does
not report permission changes and 'hg diff' only reports changes
relative to one merge parent.
Returns 0 on success.
Options ([+] can be repeated):
-A --all show status of all files
-m --modified show only modified files
-a --added show only added files
-r --removed show only removed files
-d --deleted show only deleted (but tracked) files
-c --clean show only files without changes
-u --unknown show only unknown (not tracked) files
-i --ignored show only ignored files
-n --no-status hide status prefix
-C --copies show source of copied files
-0 --print0 end filenames with NUL, for use with xargs
--rev REV [+] show difference from revision
--change REV list the changed files of a revision
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
(some details hidden, use --verbose to show complete help)
$ hg no--config
abort: option --config may not be abbreviated!
[255]
$ hg no --config alias.no='--repo elsewhere --cwd elsewhere status'
unknown command '--repo'
(use 'hg help' to get help)
[255]
$ hg no --config alias.no='--repo elsewhere'
unknown command '--repo'
(use 'hg help' to get help)
[255]
2010-08-12 18:46:56 +04:00
optional repository
2010-08-12 18:46:56 +04:00
#if no-outer-repo
$ hg optionalrepo
init
#endif
$ cd alias
$ cat > .hg/hgrc <<EOF
> [alias]
> myinit = init -q
> EOF
$ hg optionalrepo
init -q
2010-08-12 18:46:56 +04:00
no usage
$ hg nousage
abort: rollback is dangerous and should not be used
[255]
2010-08-12 18:46:56 +04:00
$ echo foo > foo
$ hg commit -Amfoo
2010-08-12 18:46:56 +04:00
adding foo
infer repository
$ cd ..
#if no-outer-repo
$ hg shortlog alias/foo
0 e63c23eaa88a | 1970-01-01 00:00 +0000
#endif
$ cd alias
2010-08-12 18:46:56 +04:00
with opts
$ hg cleanst
unknown command 'cleanst'
(use 'hg help' to get help)
[255]
2010-08-12 18:46:56 +04:00
with opts and whitespace
$ hg shortlog
0 e63c23eaa88a | 1970-01-01 00:00 +0000
interaction with defaults
$ hg mylog
commit: e63c23eaa88a
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: foo
2010-08-12 18:46:56 +04:00
$ hg lognull
commit: 000000000000
user:
date: Thu Jan 01 00:00:00 1970 +0000
2010-08-12 18:46:56 +04:00
properly recursive
$ hg dln
commit: 0000000000000000000000000000000000000000
phase: public
manifest: 0000000000000000000000000000000000000000
2010-08-12 18:46:56 +04:00
user:
date: Thu Jan 01 00:00:00 1970 +0000
extra: branch=default
simple shell aliases
2010-08-12 18:46:56 +04:00
$ hg blank
$ hg blank foo
$ hg self
self
$ hg echoall
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
$ hg echoall foo
2010-08-12 18:46:56 +04:00
foo
$ hg echoall 'test $2' foo
test $2 foo
$ hg echoall 'test $@' foo '$@'
test $@ foo $@
$ hg echoall 'test "$@"' foo '"$@"'
test "$@" foo "$@"
$ hg echo1 foo bar baz
foo
$ hg echo2 foo bar baz
bar
$ hg echo13 foo bar baz test
foo baz
$ hg echo2 foo
$ hg echotokens
$ hg echotokens foo 'bar $1 baz'
foo
bar $1 baz
$ hg echotokens 'test $2' foo
test $2
foo
$ hg echotokens 'test $@' foo '$@'
test $@
foo
$@
$ hg echotokens 'test "$@"' foo '"$@"'
test "$@"
foo
"$@"
$ echo bar > bar
$ hg commit -qA -m bar
$ hg count .
1
$ hg count 'branch(default)'
2
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
$ hg mcount -r '"branch(default)"'
2
$ tglog
@ 1: c0c7cf58edc5 'bar'
|
o 0: e63c23eaa88a 'foo'
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
shadowing
$ hg i
unknown command 'i'
(use 'hg help' to get help)
[255]
$ hg id
c0c7cf58edc5
$ hg ida
unknown command 'ida'
(use 'hg help' to get help)
[255]
$ hg idalias
c0c7cf58edc5
$ hg idaliasl
unknown command 'idaliasl'
(use 'hg help' to get help)
[255]
$ hg idaliass
unknown command 'idaliass'
(use 'hg help' to get help)
[255]
$ hg parentsshell
unknown command 'parentsshell'
(use 'hg help' to get help)
[255]
$ hg parentsshell1
one
$ hg parentsshell2
two
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
shell aliases with global options
$ hg init sub
$ cd sub
$ hg count 'branch(default)'
0
$ hg -v count 'branch(default)'
0
$ hg -R .. count 'branch(default)'
warning: --repository ignored
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
0
$ hg --cwd .. count 'branch(default)'
2
global flags after the shell alias name is passed to the shell command, not handled by hg
$ hg echoall --cwd ..
abort: option --cwd may not be abbreviated!
[255]
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
"--" passed to shell alias should be preserved
$ hg --config alias.printf='!printf "$@"' printf '%s %s %s\n' -- --cwd ..
-- --cwd ..
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
repo specific shell aliases
$ cat >> .hg/hgrc <<EOF
> [alias]
> subalias = !echo sub
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
> EOF
$ cat >> ../.hg/hgrc <<EOF
> [alias]
> mainalias = !echo main
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
> EOF
shell alias defined in current repo
$ hg subalias
sub
$ hg --cwd .. subalias > /dev/null
unknown command 'subalias'
(use 'hg help' to get help)
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
[255]
$ hg -R .. subalias > /dev/null
unknown command 'subalias'
(use 'hg help' to get help)
2011-07-18 23:53:52 +04:00
[255]
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
shell alias defined in other repo
$ hg mainalias > /dev/null
unknown command 'mainalias'
(use 'hg help' to get help)
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
[255]
$ hg -R .. mainalias
warning: --repository ignored
alias: only allow global options before a shell alias, pass later ones through This patch refactors the dispatch code to change how arguments to shell aliases are handled. A separate "pass" to determine whether a command is a shell alias has been added. The rough steps dispatch now performs when a command is given are these: * Parse all arguments up to the command name. * If any arguments such as --repository or --cwd are given (which could change the config file used, and therefore the definition of aliases), they are taken into account. * We determine whether the command is a shell alias. * If so, execute the alias. The --repo and --cwd arguments are still in effect. Any arguments *after* the command name are passed unchanged through to the shell command (and interpolated as normal. * If the command is *not* a shell alias, the dispatching is effectively "reset" and reparsed as normal in its entirety. The net effect of this patch is to make shell alias commands behave as you would expect. Any arguments you give to a shell alias *after* the alias name are passed through unchanged. This lets you do something like the following: [alias] filereleased = !$HG log -r 'descendants(adds("$1")) and tagged()' -l1 $2 $3 $4 $5 $ hg filereleased hgext/bookmarks.py --style compact Previously the `--style compact` part would fail because Mercurial would interpret those arguments as arguments to the alias command itself (which doesn't take any arguments). Also: running something like `hg -R ~/src/hg-crew filereleased hgext/bookmarks.py` when `filereleased` is only defined in that repo's config will now work. These global arguments can *only* be given to a shell alias *before* the alias name. For example, this will *not* work in the above situation: $ hg filereleased -R ~/src/hg-crew hgext/bookmarks.py The reason for this is that you may want to pass arguments like --repository to the alias (or, more likely, their short versions like -R): [alias] own = !chown $@ `$HG root` $ hg own steve $ hg own -R steve
2010-08-25 02:25:33 +04:00
main
$ hg --cwd .. mainalias
main
typos get useful suggestions
$ hg --cwd .. manalias
unknown command 'manalias'
(use 'hg help' to get help)
[255]
2010-08-12 18:46:56 +04:00
shell aliases with escaped $ chars
$ hg escaped1
test$test
$ hg escaped2
HGFOO is BAR
$ hg escaped3 HGFOO
HGFOO is BAR
$ hg escaped4 test
$0 $@
abbreviated name, which matches against both shell alias and the
command provided extension, should be aborted.
$ cat >> .hg/hgrc <<EOF
> [extensions]
> rebase =
> EOF
$ cat >> .hg/hgrc <<'EOF'
> [alias]
> rebate = !echo this is rebate $@
> EOF
$ hg reba
abort: unknown revision '-1'!
[255]
$ hg rebat
unknown command 'rebat'
(use 'hg help' to get help)
[255]
$ hg rebat --foo-bar
unknown command 'rebat'
(use 'hg help' to get help)
[255]
2010-08-12 18:46:56 +04:00
invalid arguments
$ hg rt foo
abort: invalid arguments
(use '--help' to get help)
2010-09-17 02:51:32 +04:00
[255]
invalid global arguments for normal commands, aliases, and shell aliases
$ hg --invalid root
unknown command '--invalid'
(use 'hg help' to get help)
[255]
$ hg --invalid mylog
unknown command '--invalid'
(use 'hg help' to get help)
[255]
$ hg --invalid blank
unknown command '--invalid'
(use 'hg help' to get help)
[255]
This should show id:
$ hg --config alias.log='id' log
000000000000
This shouldn't:
$ hg --config alias.log='id' history
$ cd ../..
return code of command and shell aliases:
$ hg mycommit -R alias
nothing changed
[1]
$ hg exit1
[1]
documented aliases
$ newrepo
$ hg documented:doc
unknown command 'documented:doc'
(use 'hg help' to get help)
[255]
$ hg help documented
[^ ].* (re) (?)
an alias for the id command
hg identify [-nibtB] [-r REV] [SOURCE]
aliases: id
identify the working directory or specified revision
Print a summary identifying the repository state at REV using one or two
parent hash identifiers, followed by a "+" if the working directory has
uncommitted changes and a list of bookmarks.
When REV is not given, print a summary of the current state of the
repository.
Specifying a path to a repository root or Mercurial bundle will cause
lookup to operate on that repository/bundle.
See 'hg log' for generating more information about specific revisions,
including full hash identifiers.
Returns 0 if successful.
Options:
-r --rev REV identify the specified revision
-n --num show local revision number
-i --id show global revision id
-B --bookmarks show bookmarks
-e --ssh CMD specify ssh command to use
--remotecmd CMD specify hg command to run on the remote side
(some details hidden, use --verbose to show complete help)
$ hg help commands | grep documented
[1]