Mercurial > hg
view tests/test-tag.t @ 11989:f853873fc66d
aliases: provide more flexible ways to work with shell alias arguments
This patch changes the functionality of shell aliases to add more powerful
options for working with shell alias arguments.
First: the alias name + arguments to a shell alias are set as an HG_ARGS
environment variable, delimited by spaces. This matches the behavior of hooks.
Second: any occurrences of "$@" (without quotes) are replaced with the
arguments, separated by spaces. This happens *before* the alias gets to the shell.
Third: any positive numeric variables ("$1", "$2", etc) are replaced with the
appropriate argument, indexed from 1. "$0" is replaced with the name of the
alias. Any "extra" numeric variables are replaced with an empty string. This
happens *before* the alias gets to the shell.
These changes allow for more flexible shell aliases:
[alias]
echo = !echo $@
count = !hg log -r "$@" --template='.' | wc -c | sed -e 's/ //g'
qqueuemv = !mv "`hg root`/.hg/patches-$1" "`hg root`/.hg/patches-$2"
In action:
$ hg echo foo
foo
$ hg count 'branch(default)'
901
$ hg count 'branch(stable) and keyword(fixes)'
102
$ hg qqueuemv myfeature somefeature
author | Steve Losh <steve@stevelosh.com> |
---|---|
date | Wed, 18 Aug 2010 18:56:44 -0400 |
parents | b3de1438028d |
children | 4c94b6d0fb1c |
line wrap: on
line source
$ hg init test $ cd test $ echo a > a $ hg add a $ hg commit -m "test" -d "1000000 0" $ hg history changeset: 0:0acdaf898367 tag: tip user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: test $ hg tag ' ' abort: tag names cannot consist entirely of whitespace $ hg tag -d "1000000 0" "bleah" $ hg history changeset: 1:3ecf002a1c57 tag: tip user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: Added tag bleah for changeset 0acdaf898367 changeset: 0:0acdaf898367 tag: bleah user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: test $ echo foo >> .hgtags $ hg tag -d "1000000 0" "bleah2" || echo "failed" abort: working copy of .hgtags is changed (please commit .hgtags manually) failed $ hg revert .hgtags $ hg tag -d "1000000 0" -r 0 x y z y y z || echo "failed" abort: tag names must be unique failed $ hg tag -d "1000000 0" tap nada dot tip null . || echo "failed" abort: the name 'tip' is reserved failed $ hg tag -d "1000000 0" "bleah" || echo "failed" abort: tag 'bleah' already exists (use -f to force) failed $ hg tag -d "1000000 0" "blecch" "bleah" || echo "failed" abort: tag 'bleah' already exists (use -f to force) failed $ hg tag -d "1000000 0" --remove "blecch" || echo "failed" abort: tag 'blecch' does not exist failed $ hg tag -d "1000000 0" --remove "bleah" "blecch" "blough" || echo "failed" abort: tag 'blecch' does not exist failed $ hg tag -d "1000000 0" -r 0 "bleah0" $ hg tag -l -d "1000000 0" -r 1 "bleah1" $ hg tag -d "1000000 0" gack gawk gorp $ hg tag -d "1000000 0" -f gack $ hg tag -d "1000000 0" --remove gack gorp $ cat .hgtags 0acdaf8983679e0aac16e811534eb49d7ee1f2b4 bleah 0acdaf8983679e0aac16e811534eb49d7ee1f2b4 bleah0 868cc8fbb43b754ad09fa109885d243fc49adae7 gack 868cc8fbb43b754ad09fa109885d243fc49adae7 gawk 868cc8fbb43b754ad09fa109885d243fc49adae7 gorp 868cc8fbb43b754ad09fa109885d243fc49adae7 gack 3807bcf62c5614cb6c16436b514d7764ca5f1631 gack 3807bcf62c5614cb6c16436b514d7764ca5f1631 gack 0000000000000000000000000000000000000000 gack 868cc8fbb43b754ad09fa109885d243fc49adae7 gorp 0000000000000000000000000000000000000000 gorp $ cat .hg/localtags 3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1 $ hg update 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg tag -d "1000000 0" "foobar" $ cat .hgtags 0acdaf8983679e0aac16e811534eb49d7ee1f2b4 foobar $ cat .hg/localtags 3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1 $ hg tag -l 'xx > newline' abort: '\n' cannot be used in a tag name $ hg tag -l 'xx:xx' abort: ':' cannot be used in a tag name cloning local tags $ cd .. $ hg -R test log -r0:5 changeset: 0:0acdaf898367 tag: bleah tag: bleah0 tag: foobar user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: test changeset: 1:3ecf002a1c57 tag: bleah1 user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: Added tag bleah for changeset 0acdaf898367 changeset: 2:868cc8fbb43b tag: gawk user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: Added tag bleah0 for changeset 0acdaf898367 changeset: 3:3807bcf62c56 user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: Added tag gack, gawk, gorp for changeset 868cc8fbb43b changeset: 4:140c6e8597b4 user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: Added tag gack for changeset 3807bcf62c56 changeset: 5:470a65fa7cc9 user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: Removed tag gack, gorp $ hg clone -q -rbleah1 test test1 $ hg -R test1 parents --style=compact 1[tip] 3ecf002a1c57 1970-01-12 13:46 +0000 test Added tag bleah for changeset 0acdaf898367 $ hg clone -q -r5 test#bleah1 test2 $ hg -R test2 parents --style=compact 5[tip] 470a65fa7cc9 1970-01-12 13:46 +0000 test Removed tag gack, gorp $ hg clone -q -U test#bleah1 test3 $ hg -R test3 parents --style=compact $ cd test issue 601 $ python << EOF > f = file('.hg/localtags'); last = f.readlines()[-1][:-1]; f.close() > f = file('.hg/localtags', 'w'); f.write(last); f.close() > EOF $ cat .hg/localtags; echo 3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1 $ hg tag -l localnewline $ cat .hg/localtags; echo 3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1 f68b039e72eacbb2e68b0543e1f6e50990aa2bb5 localnewline $ python << EOF > f = file('.hgtags'); last = f.readlines()[-1][:-1]; f.close() > f = file('.hgtags', 'w'); f.write(last); f.close() > EOF $ hg ci -d '1000000 0' -m'broken manual edit of .hgtags' $ cat .hgtags; echo 0acdaf8983679e0aac16e811534eb49d7ee1f2b4 foobar $ hg tag -d '1000000 0' newline $ cat .hgtags; echo 0acdaf8983679e0aac16e811534eb49d7ee1f2b4 foobar 6ae703d793c8b1f097116869275ecd97b2977a2b newline tag and branch using same name $ hg branch tag-and-branch-same-name marked working directory as branch tag-and-branch-same-name $ hg ci -m"discouraged" $ hg tag tag-and-branch-same-name warning: tag tag-and-branch-same-name conflicts with existing branch name test custom commit messages $ cat > $HGTMP/editor <<'__EOF__' > #!/bin/sh > echo "custom tag message" > "$1" > echo "second line" >> "$1" > __EOF__ $ chmod +x "$HGTMP"/editor $ HGEDITOR="'$HGTMP'"/editor hg tag custom-tag -e $ hg log -l1 --template "{desc}\n" custom tag message second line