diff -r c7a471b49819 -r 09bae16e7a6d tests/test-keyword.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-keyword.t Sat Aug 14 09:47:57 2010 +0100 @@ -0,0 +1,925 @@ + $ cat <> $HGRCPATH + > [extensions] + > keyword = + > mq = + > notify = + > record = + > transplant = + > [ui] + > interactive = true + > EOF + +Run kwdemo before [keyword] files are set up +as it would succeed without uisetup otherwise + + $ hg --quiet kwdemo \ + > | sed -e 's![^ ][^ ]*demo.txt,v!/TMP/demo.txt,v!' \ + > -e 's/,v [a-z0-9][a-z0-9]* /,v xxxxxxxxxxxx /' \ + > -e '/[$]Revision/ s/: [a-z0-9][a-z0-9]* /: xxxxxxxxxxxx /' \ + > -e 's! 20[0-9][0-9]/[01][0-9]/[0-3][0-9] [0-2][0-9]:[0-6][0-9]:[0-6][0-9]! 2000/00/00 00:00:00!' + [extensions] + keyword = + [keyword] + demo.txt = + [keywordmaps] + Author = {author|user} + Date = {date|utcdate} + Header = {root}/{file},v {node|short} {date|utcdate} {author|user} + Id = {file|basename},v {node|short} {date|utcdate} {author|user} + RCSFile = {file|basename},v + RCSfile = {file|basename},v + Revision = {node|short} + Source = {root}/{file},v + $Author: test $ + $Date: 2000/00/00 00:00:00 $ + $Header: /TMP/demo.txt,v xxxxxxxxxxxx 2000/00/00 00:00:00 test $ + $Id: demo.txt,v xxxxxxxxxxxx 2000/00/00 00:00:00 test $ + $RCSFile: demo.txt,v $ + $RCSfile: demo.txt,v $ + $Revision: xxxxxxxxxxxx $ + $Source: /TMP/demo.txt,v $ + + $ hg --quiet kwdemo "Branch = {branches}" + [extensions] + keyword = + [keyword] + demo.txt = + [keywordmaps] + Branch = {branches} + $Branch: demobranch $ + + $ cat <> $HGRCPATH + > [keyword] + > ** = + > b = ignore + > [hooks] + > commit= + > commit.test=cp a hooktest + > EOF + + $ hg init Test-bndl + $ cd Test-bndl + +kwshrink should exit silently in empty/invalid repo + + $ hg kwshrink + +Symlinks cannot be created on Windows. +A bundle to test this was made with: + hg init t + cd t + echo a > a + ln -s a sym + hg add sym + hg ci -m addsym -u mercurial + hg bundle --base null ../test-keyword.hg + + $ hg pull -u "$TESTDIR"/test-keyword.hg + pulling from .*test-keyword.hg + requesting all changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + + $ echo 'expand $Id$' > a + $ echo 'do not process $Id:' >> a + $ echo 'xxx $' >> a + $ echo 'ignore $Id$' > b + +Output files as they were created + + $ cat a b + expand $Id$ + do not process $Id: + xxx $ + ignore $Id$ + +no kwfiles + + $ hg kwfiles + +untracked candidates + + $ hg -v kwfiles --unknown + k a + +Add files and check status + + $ hg addremove + adding a + adding b + $ hg status + A a + A b + + +Default keyword expansion including commit hook +Interrupted commit should not change state or run commit hook + + $ hg --debug commit + abort: empty commit message + $ hg status + A a + A b + +Commit with several checks + + $ hg --debug commit -mabsym -u 'User Name ' + a + b + overwriting a expanding keywords + running hook commit.test: cp a hooktest + committed changeset 1:ef63ca68695bc9495032c6fda1350c71e6d256e9 + $ hg status + ? hooktest + $ hg debugrebuildstate + $ hg --quiet identify + ef63ca68695b + +cat files in working directory with keywords expanded + + $ cat a b + expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $ + do not process $Id: + xxx $ + ignore $Id$ + +hg cat files and symlink, no expansion + + $ hg cat sym a b && echo + expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $ + do not process $Id: + xxx $ + ignore $Id$ + a.* + +Test hook execution + + $ diff a hooktest + +Removing commit hook from config + + $ sed -e '/\[hooks\]/,$ d' "$HGRCPATH" > $HGRCPATH.nohook + $ mv "$HGRCPATH".nohook "$HGRCPATH" + $ rm hooktest + +bundle + + $ hg bundle --base null ../kw.hg + 2 changesets found + $ cd .. + $ hg init Test + $ cd Test + +Notify on pull to check whether keywords stay as is in email +ie. if patch.diff wrapper acts as it should + + $ cat <> $HGRCPATH + > [hooks] + > incoming.notify = python:hgext.notify.hook + > [notify] + > sources = pull + > diffstat = False + > [reposubs] + > * = Test + > EOF + +Pull from bundle and trigger notify + + $ hg pull -u ../kw.hg + pulling from ../kw.hg + requesting all changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 3 changes to 3 files + Content-Type: text/plain; charset="us-ascii" + MIME-Version: 1.0 + Content-Transfer-Encoding: 7bit + Date: .* + Subject: changeset in .* + From: mercurial + X-Hg-Notification: changeset a2392c293916 + Message-Id: + To: Test + + changeset a2392c293916 in .* + details: .*?cmd=changeset;node=a2392c293916 + description: + addsym + + diffs (6 lines): + + diff -r 000000000000 -r a2392c293916 sym + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/sym Sat Feb 09 20:25:47 2008 +0100 + @@ -0,0 +1,1 @@ + +a + \ No newline at end of file + Content-Type: text/plain; charset="us-ascii" + MIME-Version: 1.0 + Content-Transfer-Encoding: 7bit + Date:.* + Subject: changeset in.* + From: User Name + X-Hg-Notification: changeset ef63ca68695b + Message-Id: + To: Test + + changeset ef63ca68695b in .* + details: .*?cmd=changeset;node=ef63ca68695b + description: + absym + + diffs (12 lines): + + diff -r a2392c293916 -r ef63ca68695b a + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,3 @@ + +expand $Id$ + +do not process $Id: + +xxx $ + diff -r a2392c293916 -r ef63ca68695b b + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/b Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +ignore $Id$ + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + +Remove notify config + + $ sed -e '/\[hooks\]/,$ d' "$HGRCPATH" > $HGRCPATH.nonotify + $ mv "$HGRCPATH".nonotify "$HGRCPATH" + +Touch files and check with status + + $ touch a b + $ hg status + +Update and expand + + $ rm sym a b + $ hg update -C + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cat a b + expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $ + do not process $Id: + xxx $ + ignore $Id$ + +Check whether expansion is filewise + + $ echo '$Id$' > c + $ echo 'tests for different changenodes' >> c + +commit file c + + $ hg commit -A -mcndiff -d '1 0' -u 'User Name ' + adding c + +force expansion + + $ hg -v kwexpand + overwriting a expanding keywords + overwriting c expanding keywords + +compare changenodes in a and c + + $ cat a c + expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $ + do not process $Id: + xxx $ + $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $ + tests for different changenodes + +record chunk + + $ python -c \ + > 'l=open("a").readlines();l.insert(1,"foo\n");l.append("bar\n");open("a","w").writelines(l);' + $ hg record -d '1 10' -m rectest< y + > y + > n + > EOF + diff --git a/a b/a + 2 hunks, 2 lines changed + examine changes to 'a'? [Ynsfdaq?] + @@ -1,3 +1,4 @@ + expand $Id$ + +foo + do not process $Id: + xxx $ + record change 1/2 to 'a'? [Ynsfdaq?] + @@ -2,2 +3,3 @@ + do not process $Id: + xxx $ + +bar + record change 2/2 to 'a'? [Ynsfdaq?] + + $ hg identify + d17e03c92c97+ tip + $ hg status + M a + +Cat modified file a + + $ cat a + expand $Id: a,v d17e03c92c97 1970/01/01 00:00:01 test $ + foo + do not process $Id: + xxx $ + bar + +Diff remaining chunk + + $ hg diff | grep -v 'b/a' + diff -r d17e03c92c97 a + --- a/a Wed Dec 31 23:59:51 1969 -0000 + @@ -2,3 +2,4 @@ + foo + do not process $Id: + xxx $ + +bar + + $ hg rollback + rolling back to revision 2 (undo commit) + +Record all chunks in file a + + $ echo foo > msg + + - do not use "hg record -m" here! + + $ hg record -l msg -d '1 11'< y + > y + > y + > EOF + diff --git a/a b/a + 2 hunks, 2 lines changed + examine changes to 'a'? [Ynsfdaq?] + @@ -1,3 +1,4 @@ + expand $Id$ + +foo + do not process $Id: + xxx $ + record change 1/2 to 'a'? [Ynsfdaq?] + @@ -2,2 +3,3 @@ + do not process $Id: + xxx $ + +bar + record change 2/2 to 'a'? [Ynsfdaq?] + +File a should be clean + + $ hg status -A a + C a + + $ rm msg + $ hg rollback + rolling back to revision 2 (undo commit) + $ hg update -C + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + +Test patch queue repo + + $ hg init --mq + $ hg qimport -r tip -n mqtest.diff + $ hg commit --mq -m mqtest + +Keywords should not be expanded in patch + + $ cat .hg/patches/mqtest.diff + # HG changeset patch + # User User Name + # Date 1 0 + # Node ID 40a904bbbe4cd4ab0a1f28411e35db26341a40ad + # Parent ef63ca68695bc9495032c6fda1350c71e6d256e9 + cndiff + + diff -r ef63ca68695b -r 40a904bbbe4c c + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/c Thu Jan 01 00:00:01 1970 +0000 + @@ -0,0 +1,2 @@ + +$Id$ + +tests for different changenodes + + $ hg qpop + popping mqtest.diff + patch queue now empty + +qgoto, implying qpush, should expand + + $ hg qgoto mqtest.diff + applying mqtest.diff + now at: mqtest.diff + $ cat c + $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $ + tests for different changenodes + $ hg cat c + $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $ + tests for different changenodes + +Keywords should not be expanded in filelog + + $ hg --config 'extensions.keyword=!' cat c + $Id$ + tests for different changenodes + +qpop and move on + + $ hg qpop + popping mqtest.diff + patch queue now empty + +Copy and show added kwfiles + + $ hg cp a c + $ hg kwfiles + a + c + +Commit and show expansion in original and copy + + $ hg --debug commit -ma2c -d '1 0' -u 'User Name ' + c + c: copy a:0045e12f6c5791aac80ca6cbfd97709a88307292 + overwriting c expanding keywords + committed changeset 2:25736cf2f5cbe41f6be4e6784ef6ecf9f3bbcc7d + $ cat a c + expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $ + do not process $Id: + xxx $ + expand $Id: c,v 25736cf2f5cb 1970/01/01 00:00:01 user $ + do not process $Id: + xxx $ + +Touch copied c and check its status + + $ touch c + $ hg status + +Test different options of hg kwfiles + + $ hg kwfiles + a + c + $ hg -v kwfiles --ignore + I b + I sym + $ hg kwfiles --all + K a + K c + I b + I sym + +Diff specific revision + + $ hg diff --rev 1 | grep -v 'b/c' + diff -r ef63ca68695b c + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,3 @@ + +expand $Id$ + +do not process $Id: + +xxx $ + +Status after rollback: + + $ hg rollback + rolling back to revision 1 (undo commit) + $ hg status + A c + $ hg update --clean + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + +Custom keywordmaps as argument to kwdemo + + $ hg --quiet kwdemo "Xinfo = {author}: {desc}" + [extensions] + keyword = + [keyword] + ** = + b = ignore + demo.txt = + [keywordmaps] + Xinfo = {author}: {desc} + $Xinfo: test: hg keyword configuration and expansion example $ + +Configure custom keywordmaps + + $ cat <>$HGRCPATH + > [keywordmaps] + > Id = {file} {node|short} {date|rfc822date} {author|user} + > Xinfo = {author}: {desc} + > EOF + +Cat and hg cat files before custom expansion + + $ cat a b + expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $ + do not process $Id: + xxx $ + ignore $Id$ + $ hg cat sym a b && echo + expand $Id: a ef63ca68695b Thu, 01 Jan 1970 00:00:00 +0000 user $ + do not process $Id: + xxx $ + ignore $Id$ + a.* + +Write custom keyword and prepare multiline commit message + + $ echo '$Xinfo$' >> a + $ cat <> log + > firstline + > secondline + > EOF + +Interrupted commit should not change state + + $ hg commit + abort: empty commit message + $ hg status + M a + ? c + ? log + +Commit with multiline message and custom expansion + + $ hg --debug commit -l log -d '2 0' -u 'User Name ' + a + overwriting a expanding keywords + committed changeset 2:bb948857c743469b22bbf51f7ec8112279ca5d83 + $ rm log + +Stat, verify and show custom expansion (firstline) + + $ hg status + ? c + $ hg verify + checking changesets + checking manifests + crosschecking files in changesets and manifests + checking files + 3 files, 3 changesets, 4 total revisions + $ cat a b + expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $ + do not process $Id: + xxx $ + $Xinfo: User Name : firstline $ + ignore $Id$ + $ hg cat sym a b && echo + expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $ + do not process $Id: + xxx $ + $Xinfo: User Name : firstline $ + ignore $Id$ + a.* + +annotate + + $ hg annotate a + 1: expand $Id$ + 1: do not process $Id: + 1: xxx $ + 2: $Xinfo$ + +remove with status checks + + $ hg debugrebuildstate + $ hg remove a + $ hg --debug commit -m rma + committed changeset 3:d14c712653769de926994cf7fbb06c8fbd68f012 + $ hg status + ? c + +Rollback, revert, and check expansion + + $ hg rollback + rolling back to revision 2 (undo commit) + $ hg status + R a + ? c + $ hg revert --no-backup --rev tip a + $ cat a + expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $ + do not process $Id: + xxx $ + $Xinfo: User Name : firstline $ + +Clone to test global and local configurations + + $ cd .. + +Expansion in destinaton with global configuration + + $ hg --quiet clone Test globalconf + $ cat globalconf/a + expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $ + do not process $Id: + xxx $ + $Xinfo: User Name : firstline $ + +No expansion in destination with local configuration in origin only + + $ hg --quiet --config 'keyword.**=ignore' clone Test localconf + $ cat localconf/a + expand $Id$ + do not process $Id: + xxx $ + $Xinfo$ + +Clone to test incoming + + $ hg clone -r1 Test Test-a + requesting all changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 3 changes to 3 files + updating to branch default + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd Test-a + $ cat <> .hg/hgrc + > [paths] + > default = ../Test + > EOF + $ hg incoming + comparing with .*test-keyword.t/Test + searching for changes + changeset: 2:bb948857c743 + tag: tip + user: User Name + date: Thu Jan 01 00:00:02 1970 +0000 + summary: firstline + +Imported patch should not be rejected + + $ sed -e 's/Id.*/& rejecttest/' a > a.new + $ mv a.new a + $ hg --debug commit -m'rejects?' -d '3 0' -u 'User Name ' + a + overwriting a expanding keywords + committed changeset 2:85e279d709ffc28c9fdd1b868570985fc3d87082 + $ hg export -o ../rejecttest.diff tip + $ cd ../Test + $ hg import ../rejecttest.diff + applying ../rejecttest.diff + $ cat a b + expand $Id: a 4e0994474d25 Thu, 01 Jan 1970 00:00:03 +0000 user $ rejecttest + do not process $Id: rejecttest + xxx $ + $Xinfo: User Name : rejects? $ + ignore $Id$ + + $ hg rollback + rolling back to revision 2 (undo commit) + $ hg update --clean + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + +kwexpand/kwshrink on selected files + + $ mkdir x + $ hg copy a x/a + $ hg --verbose kwexpand a + overwriting a expanding keywords + +kwexpand x/a should abort + + $ hg --verbose kwexpand x/a + abort: outstanding uncommitted changes + $ cd x + $ hg --debug commit -m xa -d '3 0' -u 'User Name ' + x/a + x/a: copy a:779c764182ce5d43e2b1eb66ce06d7b47bfe342e + overwriting x/a expanding keywords + committed changeset 3:b4560182a3f9a358179fd2d835c15e9da379c1e4 + $ cat a + expand $Id: x/a b4560182a3f9 Thu, 01 Jan 1970 00:00:03 +0000 user $ + do not process $Id: + xxx $ + $Xinfo: User Name : xa $ + +kwshrink a inside directory x + + $ hg --verbose kwshrink a + overwriting x/a shrinking keywords + $ cat a + expand $Id$ + do not process $Id: + xxx $ + $Xinfo$ + $ cd .. + +kwexpand nonexistent + + $ hg kwexpand nonexistent + nonexistent:.* + + +hg serve + - expand with hgweb file + - no expansion with hgweb annotate/changeset/filediff + - check errors + + $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log + $ cat hg.pid >> $DAEMON_PIDS + $ $TESTDIR/get-with-headers.py localhost:$HGPORT '/file/tip/a/?style=raw' + 200 Script output follows + + expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $ + do not process $Id: + xxx $ + $Xinfo: User Name : firstline $ + $ $TESTDIR/get-with-headers.py localhost:$HGPORT '/annotate/tip/a/?style=raw' + 200 Script output follows + + + user@1: expand $Id$ + user@1: do not process $Id: + user@1: xxx $ + user@2: $Xinfo$ + + + + + $ $TESTDIR/get-with-headers.py localhost:$HGPORT '/rev/tip/?style=raw' + 200 Script output follows + + + # HG changeset patch + # User User Name + # Date 3 0 + # Node ID b4560182a3f9a358179fd2d835c15e9da379c1e4 + # Parent bb948857c743469b22bbf51f7ec8112279ca5d83 + xa + + diff -r bb948857c743 -r b4560182a3f9 x/a + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/x/a Thu Jan 01 00:00:03 1970 +0000 + @@ -0,0 +1,4 @@ + +expand $Id$ + +do not process $Id: + +xxx $ + +$Xinfo$ + + $ $TESTDIR/get-with-headers.py localhost:$HGPORT '/diff/bb948857c743/a?style=raw' + 200 Script output follows + + + diff -r ef63ca68695b -r bb948857c743 a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:02 1970 +0000 + @@ -1,3 +1,4 @@ + expand $Id$ + do not process $Id: + xxx $ + +$Xinfo$ + + + + + $ cat errors.log + +Prepare merge and resolve tests + + $ echo '$Id$' > m + $ hg add m + $ hg commit -m 4kw + $ echo foo >> m + $ hg commit -m 5foo + +simplemerge + + $ hg update 4 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo foo >> m + $ hg commit -m 6foo + created new head + $ hg merge + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg commit -m simplemerge + $ cat m + $Id: m 27d48ee14f67 Thu, 01 Jan 1970 00:00:00 +0000 test $ + foo + +conflict: keyword should stay outside conflict zone + + $ hg update 4 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo bar >> m + $ hg commit -m 8bar + created new head + $ hg merge + merging m + warning: conflicts during merge. + merging m failed! + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + use 'hg resolve' to retry unresolved file merges or 'hg update -C' to abandon + $ cat m + $Id$ + <<<<<<< local + bar + ======= + foo + >>>>>>> other + +resolve to local + + $ HGMERGE=internal:local hg resolve -a + $ hg commit -m localresolve + $ cat m + $Id: m 41efa6d38e9b Thu, 01 Jan 1970 00:00:00 +0000 test $ + bar + +Test restricted mode with transplant -b + + $ hg update 6 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg branch foo + marked working directory as branch foo + $ mv a a.bak + $ echo foobranch > a + $ cat a.bak >> a + $ rm a.bak + $ hg commit -m 9foobranch + $ hg update default + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg -y transplant -b foo tip + applying 4aa30d025d50 + 4aa30d025d50 transplanted to 5a4da427c162 + +Expansion in changeset but not in file + + $ hg tip -p + changeset: 11:5a4da427c162 + tag: tip + parent: 9:41efa6d38e9b + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 9foobranch + + diff -r 41efa6d38e9b -r 5a4da427c162 a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -1,3 +1,4 @@ + +foobranch + expand $Id$ + do not process $Id: + xxx $ + + $ head -n 2 a + foobranch + expand $Id: a 5a4da427c162 Thu, 01 Jan 1970 00:00:00 +0000 test $ + +Switch of expansion + + $ hg -q rollback + $ hg -q update -C + +kwshrink with unknown file u + + $ cp a u + $ hg --verbose kwshrink + overwriting a shrinking keywords + overwriting m shrinking keywords + overwriting x/a shrinking keywords + +Keywords shrunk in working directory, but not yet disabled + - cat shows unexpanded keywords + - hg cat shows expanded keywords + + $ cat a b + expand $Id$ + do not process $Id: + xxx $ + $Xinfo$ + ignore $Id$ + $ hg cat sym a b && echo + expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $ + do not process $Id: + xxx $ + $Xinfo: User Name : firstline $ + ignore $Id$ + a.* + +Now disable keyword expansion + + $ rm "$HGRCPATH" + $ cat a b + expand $Id$ + do not process $Id: + xxx $ + $Xinfo$ + ignore $Id$ + $ hg cat sym a b && echo + expand $Id$ + do not process $Id: + xxx $ + $Xinfo$ + ignore $Id$ + a.*