# HG changeset patch # User Vadim Gelfer # Date 1156257174 25200 # Node ID 94def4db6cd4ab883098f7e766eef70cae629b99 # Parent 985594e891b868ba159c00d73c2c0ace685cf6d2# Parent 4e815ee377fd1d6d2a00bbc95c561506db670c55 merge. diff -r 985594e891b8 -r 94def4db6cd4 .hgignore --- a/.hgignore Tue Aug 22 14:31:56 2006 +0900 +++ b/.hgignore Tue Aug 22 07:32:54 2006 -0700 @@ -21,6 +21,7 @@ MANIFEST patches mercurial/__version__.py +.DS_Store syntax: regexp ^\.pc/ diff -r 985594e891b8 -r 94def4db6cd4 doc/hgrc.5.txt --- a/doc/hgrc.5.txt Tue Aug 22 14:31:56 2006 +0900 +++ b/doc/hgrc.5.txt Tue Aug 22 07:32:54 2006 -0700 @@ -377,6 +377,9 @@ remote command to use for clone/push/pull operations. Default is 'hg'. ssh;; command to use for SSH connections. Default is 'ssh'. + strict;; + Require exact command names, instead of allowing unambiguous + abbreviations. True or False. Default is False. timeout;; The timeout used when a lock is held (in seconds), a negative value means no timeout. Default is 600. diff -r 985594e891b8 -r 94def4db6cd4 hgext/mq.py --- a/hgext/mq.py Tue Aug 22 14:31:56 2006 +0900 +++ b/hgext/mq.py Tue Aug 22 07:32:54 2006 -0700 @@ -31,8 +31,9 @@ from mercurial.demandload import * from mercurial.i18n import gettext as _ +from mercurial import commands demandload(globals(), "os sys re struct traceback errno bz2") -demandload(globals(), "mercurial:cmdutil,commands,hg,patch,revlog,ui,util") +demandload(globals(), "mercurial:cmdutil,hg,patch,revlog,ui,util") commands.norepo += " qclone qversion" diff -r 985594e891b8 -r 94def4db6cd4 mercurial/commands.py --- a/mercurial/commands.py Tue Aug 22 14:31:56 2006 +0900 +++ b/mercurial/commands.py Tue Aug 22 07:32:54 2006 -0700 @@ -505,7 +505,7 @@ if with_version: show_version(ui) ui.write('\n') - aliases, i = findcmd(name) + aliases, i = findcmd(ui, name) # synopsis ui.write("%s\n\n" % i[2]) @@ -818,6 +818,7 @@ parent = p1 hg.clean(repo, node, show_stats=False) revert_opts = opts.copy() + revert_opts['all'] = True revert_opts['rev'] = hex(parent) revert(ui, repo, **revert_opts) commit_opts = opts.copy() @@ -1151,7 +1152,7 @@ options = [] otables = [globalopts] if cmd: - aliases, entry = findcmd(cmd) + aliases, entry = findcmd(ui, cmd) otables.append(entry[1]) for t in otables: for o in t: @@ -1161,7 +1162,7 @@ ui.write("%s\n" % "\n".join(options)) return - clist = findpossible(cmd).keys() + clist = findpossible(ui, cmd).keys() clist.sort() ui.write("%s\n" % "\n".join(clist)) @@ -2286,8 +2287,12 @@ If names are given, all files matching the names are reverted. - If no arguments are given, all files in the repository are reverted. + If no arguments are given, no files are reverted. """ + + if not pats and not opts['all']: + raise util.Abort(_('no files or directories specified')) + parent, p2 = repo.dirstate.parents() if opts['rev']: node = repo.lookup(opts['rev']) @@ -3046,7 +3051,8 @@ _('hg rename [OPTION]... SOURCE... DEST')), "^revert": (revert, - [('r', 'rev', '', _('revision to revert to')), + [('a', 'all', None, _('revert all changes when no arguments given')), + ('r', 'rev', '', _('revision to revert to')), ('', 'no-backup', None, _('do not save backup copies of files')), ('I', 'include', [], _('include names matching given patterns')), ('X', 'exclude', [], _('exclude names matching given patterns')), @@ -3145,7 +3151,7 @@ " debugindex debugindexdot") optionalrepo = ("paths serve debugconfig") -def findpossible(cmd): +def findpossible(ui, cmd): """ Return cmd -> (aliases, command table entry) for each matching command. @@ -3158,7 +3164,7 @@ found = None if cmd in aliases: found = cmd - else: + elif not ui.config("ui", "strict"): for a in aliases: if a.startswith(cmd): found = a @@ -3174,9 +3180,9 @@ return choice -def findcmd(cmd): +def findcmd(ui, cmd): """Return (aliases, command table entry) for command string.""" - choice = findpossible(cmd) + choice = findpossible(ui, cmd) if choice.has_key(cmd): return choice[cmd] @@ -3211,7 +3217,7 @@ if args: cmd, args = args[0], args[1:] - aliases, i = findcmd(cmd) + aliases, i = findcmd(ui, cmd) cmd = aliases[0] defaults = ui.config("defaults", cmd) if defaults: diff -r 985594e891b8 -r 94def4db6cd4 tests/README --- a/tests/README Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/README Tue Aug 22 07:32:54 2006 -0700 @@ -31,3 +31,65 @@ use hg diff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \ -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" to strip dates + +- You can append your own hgrc settings to the file that the environment + variable HGRCPATH points to. This file is cleared before running a test. + +You also need to be careful that the tests are portable from one platform +to another. You're probably working on Linux, where the GNU toolchain has +more (or different) functionality than on MacOS, *BSD, Solaris, AIX, etc. +While testing on all platforms is the only sure-fire way to make sure that +you've written portable code, here's a list of problems that have been +found and fixed in the tests. Another, more comprehensive list may be +found in the GNU Autoconf manual, online here: + + http://www.gnu.org/software/autoconf/manual/html_node/Portable-Shell.html + +sh: + +The Bourne shell is a very basic shell. /bin/sh on Linux is typically +bash, which even in Bourne-shell mode has many features that Bourne shells +on other Unix systems don't have (and even on Linux /bin/sh isn't +guaranteed to be bash). You'll need to be careful about constructs that +seem ubiquitous, but are actually not available in the least common +denominator. While using another shell (ksh, bash explicitly, posix shell, +etc.) explicitly may seem like another option, these may not exist in a +portable location, and so are generally probably not a good idea. You may +find that rewriting the test in python will be easier. + +- don't use pushd/popd; save the output of "pwd" and use "cd" in place of + the pushd, and cd back to the saved pwd instead of popd. + +- don't use math expressions like let, (( ... )), or $(( ... )); use "expr" + instead. + +grep: + +- don't use the -q option; redirect stdout to /dev/null instead. + +- don't use extended regular expressions with grep; use egrep instead, and + don't escape any regex operators. + +sed: + +- make sure that the beginning-of-line matcher ("^") is at the very + beginning of the expression -- it may not be supported inside parens. + +echo: + +- echo may interpret "\n" and print a newline; use printf instead if you + want a literal "\n" (backslash + n). + +false: + +- false is guaranteed only to return a non-zero value; you cannot depend on + it being 1. On Solaris in particular, /bin/false returns 255. Rewrite + your test to not depend on a particular return value, or create a + temporary "false" executable, and call that instead. + +diff: + +- don't use the -N option. There's no particularly good workaround short + of writing a reasonably complicated replacement script, but substituting + gdiff for diff if you can't rewrite the test not to need -N will probably + do. diff -r 985594e891b8 -r 94def4db6cd4 tests/run-tests.py --- a/tests/run-tests.py Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/run-tests.py Tue Aug 22 07:32:54 2006 -0700 @@ -211,6 +211,10 @@ sys.stdout.write('.') sys.stdout.flush() + # create a fresh hgrc + hgrc = file(HGRCPATH, 'w+') + hgrc.close() + err = os.path.join(TESTDIR, test+".err") ref = os.path.join(TESTDIR, test+".out") @@ -319,11 +323,11 @@ os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"' os.environ["HGMERGE"] = sys.executable + ' -c "import sys; sys.exit(0)"' os.environ["HGUSER"] = "test" -os.environ["HGRCPATH"] = "" TESTDIR = os.environ["TESTDIR"] = os.getcwd() HGTMP = os.environ["HGTMP"] = tempfile.mkdtemp("", "hgtests.") DAEMON_PIDS = os.environ["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids') +HGRCPATH = os.environ["HGRCPATH"] = os.path.join(HGTMP, '.hgrc') vlog("# Using TESTDIR", TESTDIR) vlog("# Using HGTMP", HGTMP) diff -r 985594e891b8 -r 94def4db6cd4 tests/test-abort-checkin --- a/tests/test-abort-checkin Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-abort-checkin Tue Aug 22 07:32:54 2006 -0700 @@ -1,8 +1,7 @@ #!/bin/sh -HGRCPATH=$HGTMP/.hgrc; export HGRCPATH -echo "[extensions]" >> $HGTMP/.hgrc -echo "mq=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "mq=" >> $HGRCPATH cat > $HGTMP/false <> $HGTMP/.hgrc -echo "hbisect=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "hbisect=" >> $HGRCPATH echo % init hg init diff -r 985594e891b8 -r 94def4db6cd4 tests/test-confused-revert --- a/tests/test-confused-revert Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-confused-revert Tue Aug 22 07:32:54 2006 -0700 @@ -13,7 +13,7 @@ hg status echo "reverting..." -hg revert +hg revert --all echo "%%% should show b unknown and a back to normal" hg status @@ -42,10 +42,10 @@ hg status echo "%%% revert should fail" -hg revert +hg revert --all echo "%%% revert should be ok now" -hg revert -r2 +hg revert -r2 --all echo "%%% should show b unknown and a marked modified (merged)" hg status diff -r 985594e891b8 -r 94def4db6cd4 tests/test-extdiff --- a/tests/test-extdiff Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-extdiff Tue Aug 22 07:32:54 2006 -0700 @@ -1,8 +1,7 @@ #!/bin/sh -HGRCPATH=$HGTMP/.hgrc; export HGRCPATH -echo "[extensions]" >> $HGTMP/.hgrc -echo "extdiff=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "extdiff=" >> $HGRCPATH hg init a cd a @@ -14,9 +13,9 @@ fi hg extdiff -o -Nr $opt -echo "[extdiff]" >> $HGTMP/.hgrc -echo "cmd.falabala=echo" >> $HGTMP/.hgrc -echo "opts.falabala=diffing" >> $HGTMP/.hgrc +echo "[extdiff]" >> $HGRCPATH +echo "cmd.falabala=echo" >> $HGRCPATH +echo "opts.falabala=diffing" >> $HGRCPATH hg falabala diff -r 985594e891b8 -r 94def4db6cd4 tests/test-fetch --- a/tests/test-fetch Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-fetch Tue Aug 22 07:32:54 2006 -0700 @@ -1,8 +1,7 @@ #!/bin/sh -HGRCPATH=$HGTMP/.hgrc; export HGRCPATH -echo "[extensions]" >> $HGTMP/.hgrc -echo "fetch=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "fetch=" >> $HGRCPATH hg init a echo a > a/a diff -r 985594e891b8 -r 94def4db6cd4 tests/test-http --- a/tests/test-http Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-http Tue Aug 22 07:32:54 2006 -0700 @@ -11,7 +11,7 @@ echo % clone via stream http_proxy= hg clone --uncompressed http://localhost:20059/ copy 2>&1 | \ - sed -e 's/[0-9][0-9.]*/XXX/g' + sed -e 's/[0-9][0-9.]*/XXX/g' -e 's/.\(B\/sec\)/X\1/' hg verify -R copy echo % try to clone via stream, should use pull instead diff -r 985594e891b8 -r 94def4db6cd4 tests/test-http.out --- a/tests/test-http.out Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-http.out Tue Aug 22 07:32:54 2006 -0700 @@ -2,7 +2,7 @@ % clone via stream streaming all changes XXX files to transfer, XXX bytes of data -transferred XXX bytes in XXX seconds (XXX KB/sec) +transferred XXX bytes in XXX seconds (XXX XB/sec) XXX files updated, XXX files merged, XXX files removed, XXX files unresolved checking changesets checking manifests diff -r 985594e891b8 -r 94def4db6cd4 tests/test-merge-revert --- a/tests/test-merge-revert Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-merge-revert Tue Aug 22 07:32:54 2006 -0700 @@ -15,7 +15,7 @@ hg id echo "changed file1" >> file1 hg id -hg revert +hg revert --all hg diff hg status hg id @@ -29,11 +29,11 @@ hg diff hg status hg id -hg revert +hg revert --all hg diff hg status hg id -hg revert -r tip +hg revert -r tip --all hg diff hg status hg id diff -r 985594e891b8 -r 94def4db6cd4 tests/test-merge-revert2 --- a/tests/test-merge-revert2 Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-merge-revert2 Tue Aug 22 07:32:54 2006 -0700 @@ -16,7 +16,7 @@ hg id echo "changed file1" >> file1 hg id -hg revert --no-backup +hg revert --no-backup --all hg diff hg status hg id @@ -31,11 +31,11 @@ -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" -e "s/\(>>>>>>>\) .*/\1/" hg status hg id -hg revert --no-backup +hg revert --no-backup --all hg diff hg status hg id -hg revert -r tip --no-backup +hg revert -r tip --no-backup --all hg diff hg status hg id diff -r 985594e891b8 -r 94def4db6cd4 tests/test-mq --- a/tests/test-mq Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-mq Tue Aug 22 07:32:54 2006 -0700 @@ -1,8 +1,7 @@ #!/bin/sh -HGRCPATH=$HGTMP/.hgrc; export HGRCPATH -echo "[extensions]" >> $HGTMP/.hgrc -echo "mq=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "mq=" >> $HGRCPATH echo % help hg help mq @@ -127,7 +126,7 @@ hg strip tip 2>&1 | sed 's/\(saving bundle to \).*/\1/' hg unbundle .hg/strip-backup/* -cat >>$HGTMP/.hgrc <>$HGRCPATH <> $HGTMP/.hgrc -echo "mq=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "mq=" >> $HGRCPATH hg init hg qinit diff -r 985594e891b8 -r 94def4db6cd4 tests/test-mq-qdiff --- a/tests/test-mq-qdiff Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-mq-qdiff Tue Aug 22 07:32:54 2006 -0700 @@ -1,8 +1,7 @@ #!/bin/sh -HGRCPATH=$HGTMP/.hgrc; export HGRCPATH -echo "[extensions]" >> $HGTMP/.hgrc -echo "mq=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "mq=" >> $HGRCPATH echo % init hg init a diff -r 985594e891b8 -r 94def4db6cd4 tests/test-mq-qnew-twice --- a/tests/test-mq-qnew-twice Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-mq-qnew-twice Tue Aug 22 07:32:54 2006 -0700 @@ -1,8 +1,7 @@ #!/bin/sh -HGRCPATH=$HGTMP/.hgrc; export HGRCPATH -echo "[extensions]" >> $HGTMP/.hgrc -echo "mq=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "mq=" >> $HGRCPATH hg init a cd a diff -r 985594e891b8 -r 94def4db6cd4 tests/test-mq-qrefresh-replace-log-message --- a/tests/test-mq-qrefresh-replace-log-message Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-mq-qrefresh-replace-log-message Tue Aug 22 07:32:54 2006 -0700 @@ -1,9 +1,8 @@ #!/bin/sh # Environement setup for MQ -HGRCPATH=$HGTMP/.hgrc; export HGRCPATH -echo "[extensions]" >> $HGTMP/.hgrc -echo "mq=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "mq=" >> $HGRCPATH #Repo init hg init diff -r 985594e891b8 -r 94def4db6cd4 tests/test-mq-qsave --- a/tests/test-mq-qsave Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-mq-qsave Tue Aug 22 07:32:54 2006 -0700 @@ -1,8 +1,7 @@ #!/bin/sh -HGRCPATH=$HGTMP/.hgrc; export HGRCPATH -echo "[extensions]" >> $HGTMP/.hgrc -echo "mq=" >> $HGTMP/.hgrc +echo "[extensions]" >> $HGRCPATH +echo "mq=" >> $HGRCPATH hg init a cd a diff -r 985594e891b8 -r 94def4db6cd4 tests/test-nested-repo --- a/tests/test-nested-repo Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-nested-repo Tue Aug 22 07:32:54 2006 -0700 @@ -14,6 +14,6 @@ echo '# should print A b/x' hg st echo '# should forget b/x' -hg revert +hg revert --all echo '# should print nothing' hg st b diff -r 985594e891b8 -r 94def4db6cd4 tests/test-remove --- a/tests/test-remove Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-remove Tue Aug 22 07:32:54 2006 -0700 @@ -9,7 +9,7 @@ hg remove rm foo hg remove foo -hg revert +hg revert --all rm foo hg remove --after hg commit -m 2 -d "1000000 0" diff -r 985594e891b8 -r 94def4db6cd4 tests/test-revert --- a/tests/test-revert Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-revert Tue Aug 22 07:32:54 2006 -0700 @@ -31,7 +31,7 @@ ls echo %% should verbosely save backup to e.orig echo z > e -hg revert -v +hg revert --all -v echo %% should say no changes needed hg revert a echo %% should say file not managed @@ -46,9 +46,9 @@ hg add z hg st echo %% should add a, forget z -hg revert -r0 +hg revert --all -r0 echo %% should forget a -hg revert -rtip +hg revert --all -rtip rm -f a *.orig echo %% should silently add a hg revert -r0 a @@ -56,7 +56,7 @@ hg update -C chmod +x c -hg revert +hg revert --all echo %% should print non-executable test -x c || echo non-executable @@ -64,7 +64,7 @@ hg commit -d '1000001 0' -m exe chmod -x c -hg revert +hg revert --all echo %% should print executable test -x c && echo executable @@ -78,6 +78,11 @@ hg update 0 mkdir b echo b > b/b + +echo % should fail - no arguments hg revert -rtip +echo % should succeed +hg revert --all -rtip + true diff -r 985594e891b8 -r 94def4db6cd4 tests/test-revert-unknown --- a/tests/test-revert-unknown Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-revert-unknown Tue Aug 22 07:32:54 2006 -0700 @@ -13,7 +13,7 @@ echo %% Should show unknown hg status -hg revert -r 0 +hg revert -r 0 --all echo %% Should show unknown and b removed hg status echo %% Should show a and unknown diff -r 985594e891b8 -r 94def4db6cd4 tests/test-revert.out --- a/tests/test-revert.out Tue Aug 22 14:31:56 2006 +0900 +++ b/tests/test-revert.out Tue Aug 22 07:32:54 2006 -0700 @@ -54,4 +54,7 @@ %% issue 241 adding a 1 files updated, 0 files merged, 0 files removed, 0 files unresolved +% should fail - no arguments +abort: no files or directories specified +% should succeed reverting a diff -r 985594e891b8 -r 94def4db6cd4 tests/test-strict --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-strict Tue Aug 22 07:32:54 2006 -0700 @@ -0,0 +1,18 @@ +#!/bin/sh + +hg init + +echo a > a +hg ci -d '0 0' -Ama + +hg an a + +echo "[ui]" >> $HGRCPATH +echo "strict=True" >> $HGRCPATH + +hg an a +hg annotate a + +echo % should succeed - up is an alias, not an abbreviation + +hg up diff -r 985594e891b8 -r 94def4db6cd4 tests/test-strict.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-strict.out Tue Aug 22 07:32:54 2006 -0700 @@ -0,0 +1,26 @@ +adding a +0: a +hg: unknown command 'an' +Mercurial Distributed SCM + +basic commands (use "hg help" for the full list or option "-v" for details): + + add add the specified files on the next commit + annotate show changeset information per file line + clone make a copy of an existing repository + commit commit the specified files or all outstanding changes + diff diff repository (or selected files) + export dump the header and diffs for one or more changesets + init create a new repository in the given directory + log show revision history of entire repository or files + parents show the parents of the working dir or revision + pull pull changes from the specified source + push push changes to the specified destination + remove remove the specified files on the next commit + revert revert files or dirs to their states as of some revision + serve export the repository via HTTP + status show changed files in the working directory + update update or merge working directory +0: a +% should succeed - up is an alias, not an abbreviation +0 files updated, 0 files merged, 0 files removed, 0 files unresolved