Mercurial > hg
view tests/test-commit.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 | d26b7cc96bc4 |
children | 6f58430dfdd0 |
line wrap: on
line source
commit date test $ hg init test $ cd test $ echo foo > foo $ hg add foo $ HGEDITOR=true hg commit -m "" abort: empty commit message $ hg commit -d '0 0' -m commit-1 $ echo foo >> foo $ hg commit -d '1 4444444' -m commit-3 abort: impossible time zone offset: 4444444 $ hg commit -d '1 15.1' -m commit-4 abort: invalid date: '1\t15.1' $ hg commit -d 'foo bar' -m commit-5 abort: invalid date: 'foo bar' $ hg commit -d ' 1 4444' -m commit-6 $ hg commit -d '111111111111 0' -m commit-7 abort: date exceeds 32 bits: 111111111111 commit added file that has been deleted $ echo bar > bar $ hg add bar $ rm bar $ hg commit -d "1000000 0" -m commit-8 nothing changed $ hg commit -d "1000000 0" -m commit-8-2 bar abort: bar: file not found! $ hg -q revert -a --no-backup $ mkdir dir $ echo boo > dir/file $ hg add adding dir/file $ hg -v commit -m commit-9 dir dir/file committed changeset 2:d2a76177cb42 $ echo > dir.file $ hg add adding dir.file $ hg commit -m commit-10 dir dir.file abort: dir: no match under directory! $ echo >> dir/file $ mkdir bleh $ mkdir dir2 $ cd bleh $ hg commit -m commit-11 . abort: bleh: no match under directory! $ hg commit -m commit-12 ../dir ../dir2 abort: dir2: no match under directory! $ hg -v commit -m commit-13 ../dir dir/file committed changeset 3:1cd62a2d8db5 $ cd .. $ hg commit -m commit-14 does-not-exist abort: does-not-exist: No such file or directory $ ln -s foo baz $ hg commit -m commit-15 baz abort: baz: file not tracked! $ touch quux $ hg commit -m commit-16 quux abort: quux: file not tracked! $ echo >> dir/file $ hg -v commit -m commit-17 dir/file dir/file committed changeset 4:49176991390e An empty date was interpreted as epoch origin $ echo foo >> foo $ hg commit -d '' -m commit-no-date $ hg tip --template '{date|isodate}\n' | grep '1970' $ cd .. partial subdir commit test $ hg init test2 $ cd test2 $ mkdir foo $ echo foo > foo/foo $ mkdir bar $ echo bar > bar/bar $ hg add adding bar/bar adding foo/foo $ hg ci -d '1000000 0' -m commit-subdir-1 foo $ hg ci -d '1000001 0' -m commit-subdir-2 bar subdir log 1 $ hg log -v foo changeset: 0:6ef3cb06bb80 user: test date: Mon Jan 12 13:46:40 1970 +0000 files: foo/foo description: commit-subdir-1 subdir log 2 $ hg log -v bar changeset: 1:f2e51572cf5a tag: tip user: test date: Mon Jan 12 13:46:41 1970 +0000 files: bar/bar description: commit-subdir-2 full log $ hg log -v changeset: 1:f2e51572cf5a tag: tip user: test date: Mon Jan 12 13:46:41 1970 +0000 files: bar/bar description: commit-subdir-2 changeset: 0:6ef3cb06bb80 user: test date: Mon Jan 12 13:46:40 1970 +0000 files: foo/foo description: commit-subdir-1 $ cd .. dot and subdir commit test $ hg init test3 $ cd test3 $ mkdir foo $ echo foo content > foo/plain-file $ hg add foo/plain-file $ hg ci -d '1000000 0' -m commit-foo-subdir foo $ echo modified foo content > foo/plain-file $ hg ci -d '2000000 0' -m commit-foo-dot . full log $ hg log -v changeset: 1:d9180e04fa8a tag: tip user: test date: Sat Jan 24 03:33:20 1970 +0000 files: foo/plain-file description: commit-foo-dot changeset: 0:80b572aaf098 user: test date: Mon Jan 12 13:46:40 1970 +0000 files: foo/plain-file description: commit-foo-subdir subdir log $ cd foo $ hg log . changeset: 1:d9180e04fa8a tag: tip user: test date: Sat Jan 24 03:33:20 1970 +0000 summary: commit-foo-dot changeset: 0:80b572aaf098 user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: commit-foo-subdir $ cd .. $ cd .. $ cd .. $ hg init issue1049 $ cd issue1049 $ echo a > a $ hg ci -Ama adding a $ echo a >> a $ hg ci -mb $ hg up 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo b >> a $ hg ci -mc created new head $ HGMERGE=true hg merge merging a 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) should fail because we are specifying a file name $ hg ci -mmerge a abort: cannot partially commit a merge (do not specify files or patterns) should fail because we are specifying a pattern $ hg ci -mmerge -I a abort: cannot partially commit a merge (do not specify files or patterns) should succeed $ hg ci -mmerge $ cd .. test commit message content $ hg init commitmsg $ cd commitmsg $ echo changed > changed $ echo removed > removed $ hg ci -qAm init $ hg rm removed $ echo changed >> changed $ echo added > added $ hg add added $ HGEDITOR=cat hg ci -A HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: Leave message empty to abort commit. HG: -- HG: user: test HG: branch 'default' HG: added added HG: changed changed HG: removed removed abort: empty commit message $ cd .. $ exit 0