view tests/test-convert-filemap.out @ 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 7fefef3ce791
children
line wrap: on
line source

created new head
created new head
@  8 "8: change foo" files: foo
|
o    7 "7: second merge; change bar" files: bar baz
|\
| o  6 "6: change foo baz" files: baz foo
| |
o |  5 "5: change bar baz quux" files: bar baz quux
|/
o    4 "4: first merge; change bar baz" files: bar baz
|\
| o  3 "3: change bar quux" files: bar quux
| |
o |  2 "2: change foo" files: foo
|/
o  1 "1: add bar quux; copy foo to copied" files: bar copied quux
|
o  0 "0: add foo baz dir/" files: baz dir/file dir/file2 dir/subdir/file3 dir/subdir/file4 foo

% final file versions in this repo:
9463f52fe115e377cf2878d4fc548117211063f2 644   bar
94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644   baz
7711d36246cc83e61fb29cd6d4ef394c63f1ceaf 644   copied
3e20847584beff41d7cd16136b7331ab3d754be0 644   dir/file
75e6d3f8328f5f6ace6bf10b98df793416a09dca 644   dir/file2
5fe139720576e18e34bcc9f79174db8897c8afe9 644   dir/subdir/file3
57a1c1511590f3de52874adfa04effe8a77d64af 644   dir/subdir/file4
9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd

% foo: skip unwanted merges; use 1st parent in 1st merge, 2nd in 2nd
@  3 "8: change foo" files: foo
|
o  2 "6: change foo baz" files: foo
|
o  1 "2: change foo" files: foo
|
o  0 "0: add foo baz dir/" files: foo

9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
% bar: merges are not merges anymore
@  4 "7: second merge; change bar" files: bar
|
o  3 "5: change bar baz quux" files: bar
|
o  2 "4: first merge; change bar baz" files: bar
|
o  1 "3: change bar quux" files: bar
|
o  0 "1: add bar quux; copy foo to copied" files: bar

9463f52fe115e377cf2878d4fc548117211063f2 644   bar
% baz: 1st merge is not a merge anymore; 2nd still is
@    4 "7: second merge; change bar" files: baz
|\
| o  3 "6: change foo baz" files: baz
| |
o |  2 "5: change bar baz quux" files: baz
|/
o  1 "4: first merge; change bar baz" files: baz
|
o  0 "0: add foo baz dir/" files: baz

94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644   baz
% foo quux: we add additional merges when they are interesting
@  8 "8: change foo" files: foo
|
o    7 "7: second merge; change bar" files:
|\
| o  6 "6: change foo baz" files: foo
| |
o |  5 "5: change bar baz quux" files: quux
|/
o    4 "4: first merge; change bar baz" files:
|\
| o  3 "3: change bar quux" files: quux
| |
o |  2 "2: change foo" files: foo
|/
o  1 "1: add bar quux; copy foo to copied" files: quux
|
o  0 "0: add foo baz dir/" files: foo

9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
% bar quux: partial conversion
@  1 "3: change bar quux" files: bar quux
|
o  0 "1: add bar quux; copy foo to copied" files: bar quux

b79105bedc55102f394e90a789c9c380117c1b4a 644   bar
db0421cc6b685a458c8d86c7d5c004f94429ea23 644   quux
% bar quux: complete the partial conversion
@  4 "7: second merge; change bar" files: bar
|
o  3 "5: change bar baz quux" files: bar quux
|
o  2 "4: first merge; change bar baz" files: bar
|
o  1 "3: change bar quux" files: bar quux
|
o  0 "1: add bar quux; copy foo to copied" files: bar quux

9463f52fe115e377cf2878d4fc548117211063f2 644   bar
bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
% foo: partial conversion
@  0 "0: add foo baz dir/" files: foo

2ed2a3912a0b24502043eae84ee4b279c18b90dd 644   foo
% foo: complete the partial conversion
@  3 "8: change foo" files: foo
|
o  2 "6: change foo baz" files: foo
|
o  1 "2: change foo" files: foo
|
o  0 "0: add foo baz dir/" files: foo

9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
% copied: copied file; source not included in new repo
@  0 "1: add bar quux; copy foo to copied" files: copied

2ed2a3912a0b24502043eae84ee4b279c18b90dd 644   copied
copied not renamed
% foo copied: copied file; source included in new repo
@  4 "8: change foo" files: foo
|
o  3 "6: change foo baz" files: foo
|
o  2 "2: change foo" files: foo
|
o  1 "1: add bar quux; copy foo to copied" files: copied
|
o  0 "0: add foo baz dir/" files: foo

7711d36246cc83e61fb29cd6d4ef394c63f1ceaf 644   copied
9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
@  4 "8: change foo" files: foo2
|
o  3 "6: change foo baz" files: foo2
|
o  2 "2: change foo" files: foo2
|
o  1 "1: add bar quux; copy foo to copied" files: copied2
|
o  0 "0: add foo baz dir/" files: dir2/file dir2/subdir/file3 foo2

d43feacba7a4f1f2080dde4a4b985bd8a0236d46 644   copied2
3e20847584beff41d7cd16136b7331ab3d754be0 644   dir2/file
5fe139720576e18e34bcc9f79174db8897c8afe9 644   dir2/subdir/file3
9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo2
copied2 renamed from foo2:2ed2a3912a0b24502043eae84ee4b279c18b90dd
copied:
foo
copied2:
foo
% filemap errors
errors.fmap:1: superfluous / in exclude 'dir/'
errors.fmap:3: superfluous / in include '/dir'
errors.fmap:3: superfluous / in rename '/dir'
errors.fmap:3: superfluous / in exclude 'dir//dir'
errors.fmap:4: unknown directive 'out of sync'
errors.fmap:5: path to exclude is missing
abort: errors in filemap