changeset 9983:46c6bac41dc6

Merge with crew
author Matt Mackall <mpm@selenic.com>
date Tue, 01 Dec 2009 14:37:57 -0600
parents ddc899096b7b (current diff) 2e67734e1453 (diff)
children 279282ca42f0
files mercurial/commands.py
diffstat 10 files changed, 118 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/convert/convcmd.py	Tue Dec 01 14:37:33 2009 -0600
+++ b/hgext/convert/convcmd.py	Tue Dec 01 14:37:57 2009 -0600
@@ -48,6 +48,8 @@
 
 def convertsource(ui, path, type, rev):
     exceptions = []
+    if type and type not in [s[0] for s in source_converters]:
+        raise util.Abort(_('%s: invalid source repository type') % type)
     for name, source, sortmode in source_converters:
         try:
             if not type or name == type:
@@ -60,6 +62,8 @@
     raise util.Abort(_('%s: missing or unsupported repository') % path)
 
 def convertsink(ui, path, type):
+    if type and type not in [s[0] for s in sink_converters]:
+        raise util.Abort(_('%s: invalid destination repository type') % type)
     for name, sink in sink_converters:
         try:
             if not type or name == type:
--- a/mercurial/cmdutil.py	Tue Dec 01 14:37:33 2009 -0600
+++ b/mercurial/cmdutil.py	Tue Dec 01 14:37:57 2009 -0600
@@ -755,7 +755,8 @@
                                      cache={
                                          'parent': '{rev}:{node|formatnode} ',
                                          'manifest': '{rev}:{node|formatnode}',
-                                         'filecopy': '{name} ({source})'})
+                                         'filecopy': '{name} ({source})',
+                                         'extra': '{key}={value|stringescape}'})
         # Cache mapping from rev to a tuple with tag date, tag
         # distance and tag name
         self._latesttagcache = {-1: (0, 0, 'null')}
--- a/mercurial/context.py	Tue Dec 01 14:37:33 2009 -0600
+++ b/mercurial/context.py	Tue Dec 01 14:37:57 2009 -0600
@@ -433,19 +433,17 @@
         # sort by revision (per file) which is a topological order
         visit = []
         for f in files:
-            fn = [(n.rev(), n) for n in needed if n._path == f]
-            visit.extend(fn)
+            visit.extend(n for n in needed if n._path == f)
 
         hist = {}
-        for r, f in sorted(visit):
+        for f in sorted(visit, key=lambda x: x.rev()):
             curr = decorate(f.data(), f)
             for p in parents(f):
-                if p != nullid:
-                    curr = pair(hist[p], curr)
-                    # trim the history of unneeded revs
-                    needed[p] -= 1
-                    if not needed[p]:
-                        del hist[p]
+                curr = pair(hist[p], curr)
+                # trim the history of unneeded revs
+                needed[p] -= 1
+                if not needed[p]:
+                    del hist[p]
             hist[f] = curr
 
         return zip(hist[f][0], hist[f][1].splitlines(True))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/blacklist	Tue Dec 01 14:37:57 2009 -0600
@@ -0,0 +1,37 @@
+# ConfigParser format
+# Definitions of blacklists for run-tests.py
+#
+# Identify in config sections a list of tests you want to be skipped.
+# Section names are meant to be used as targets for run-tests.py --blacklist
+# option.
+# "test-" prefixes should be omitted from test names. Values are not used.
+#
+# e.g. if your file looks like:
+## [example]
+## hgrc =
+## help = "this string is not used"
+# then calling "run-tests.py --blacklist example" will exclude test-hgrc and
+# test-help from the list of tests to run.
+
+[inotify-failures]
+# When --inotify is activated, help output and config changes:
+debugcomplete =
+empty =
+fncache =
+globalopts =
+help =
+hgrc =
+inherit-mode =
+qrecord =
+strict =
+
+# --inotify activates de facto the inotify extension. It does not play well
+# with inotify-specific tests, which activate/desactivate inotify at will:
+inotify =
+inotify-debuginotify =
+inotify-dirty-dirstate =
+inotify-issue1208 =
+inotify-issue1371 =
+inotify-issue1542 =
+inotify-issue1556 =
+inotify-lookup =
--- a/tests/run-tests.py	Tue Dec 01 14:37:33 2009 -0600
+++ b/tests/run-tests.py	Tue Dec 01 14:37:57 2009 -0600
@@ -41,6 +41,7 @@
 # completes fairly quickly, includes both shell and Python scripts, and
 # includes some scripts that run daemon processes.)
 
+from ConfigParser import ConfigParser
 import difflib
 import errno
 import optparse
@@ -130,6 +131,11 @@
         help="use pure Python code instead of C extensions")
     parser.add_option("-3", "--py3k-warnings", action="store_true",
         help="enable Py3k warnings on Python 2.6+")
+    parser.add_option("--inotify", action="store_true",
+        help="enable inotify extension when running tests")
+    parser.add_option("--blacklist", action="append",
+        help="skip tests listed in the specified section of "
+             "the blacklist file")
 
     for option, default in defaults.items():
         defaults[option] = int(os.environ.get(*default))
@@ -195,6 +201,14 @@
     if options.py3k_warnings:
         if sys.version_info[:2] < (2, 6) or sys.version_info[:2] >= (3, 0):
             parser.error('--py3k-warnings can only be used on Python 2.6+')
+    if options.blacklist:
+        configparser = ConfigParser()
+        configparser.read("blacklist")
+        blacklist = dict()
+        for section in options.blacklist:
+            for (item, value) in configparser.items(section):
+                blacklist["test-" + item] = section
+        options.blacklist = blacklist
 
     return (options, args)
 
@@ -457,6 +471,11 @@
     hgrc.write('backout = -d "0 0"\n')
     hgrc.write('commit = -d "0 0"\n')
     hgrc.write('tag = -d "0 0"\n')
+    if options.inotify:
+        hgrc.write('[extensions]\n')
+        hgrc.write('inotify=\n')
+        hgrc.write('[inotify]\n')
+        hgrc.write('pidfile=%s\n' % DAEMON_PIDS)
     hgrc.close()
 
     err = os.path.join(TESTDIR, test+".err")
@@ -723,6 +742,13 @@
         fails = []
 
         for test in tests:
+            if options.blacklist:
+                section = options.blacklist.get(test)
+                if section is not None:
+                    skips.append((test, "blacklisted (%s section)" % section))
+                    skipped += 1
+                    continue
+
             if options.retest and not os.path.exists(test + ".err"):
                 skipped += 1
                 continue
--- a/tests/test-command-template	Tue Dec 01 14:37:33 2009 -0600
+++ b/tests/test-command-template	Tue Dec 01 14:37:57 2009 -0600
@@ -93,7 +93,7 @@
 
 echo "# keys work"
 for key in author branches date desc file_adds file_dels file_mods \
-        files manifest node parents rev tags diffstat; do
+        files manifest node parents rev tags diffstat extras; do
     for mode in '' --verbose --debug; do
         hg log $mode --template "$key$mode: {$key}\n"
     done
--- a/tests/test-command-template.out	Tue Dec 01 14:37:33 2009 -0600
+++ b/tests/test-command-template.out	Tue Dec 01 14:37:57 2009 -0600
@@ -569,6 +569,33 @@
 diffstat--debug: 1: +4/-0
 diffstat--debug: 1: +2/-0
 diffstat--debug: 1: +1/-0
+extras: branch=default
+extras: branch=default
+extras: branch=default
+extras: branch=default
+extras: branch=foo
+extras: branch=default
+extras: branch=default
+extras: branch=default
+extras: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=foo
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=foo
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
 # filters work
 
 hostname
--- a/tests/test-convert	Tue Dec 01 14:37:33 2009 -0600
+++ b/tests/test-convert	Tue Dec 01 14:37:57 2009 -0600
@@ -50,3 +50,10 @@
 # override $PATH to ensure p4 not visible; use $PYTHON in case we're
 # running from a devel copy, not a temp installation
 PATH=$BINDIR $PYTHON $BINDIR/hg convert emptydir 2>&1 | sed 's,file://.*/emptydir,.../emptydir,g'
+
+echo % convert with imaginary source type
+hg convert --source-type foo a a-foo
+echo % convert with imaginary sink type
+hg convert --dest-type foo a a-foo
+
+true
--- a/tests/test-convert.out	Tue Dec 01 14:37:33 2009 -0600
+++ b/tests/test-convert.out	Tue Dec 01 14:37:57 2009 -0600
@@ -259,3 +259,8 @@
 emptydir does not look like a Bazaar repo
 cannot find required "p4" tool
 abort: emptydir: missing or unsupported repository
+% convert with imaginary source type
+initializing destination a-foo repository
+abort: foo: invalid source repository type
+% convert with imaginary sink type
+abort: foo: invalid destination repository type
--- a/tests/test-rollback	Tue Dec 01 14:37:33 2009 -0600
+++ b/tests/test-rollback	Tue Dec 01 14:37:57 2009 -0600
@@ -33,7 +33,7 @@
 
 echo '% rollback by pretxncommit saves commit message (issue 1635)'
 echo a >> a
-hg --config hooks.pretxncommit=/bin/false commit -m"precious commit message"
+hg --config hooks.pretxncommit=false commit -m"precious commit message"
 echo '.hg/last-message.txt:'
 cat .hg/last-message.txt ; echo
 
@@ -43,6 +43,6 @@
 echo "another precious commit message" > "$1"
 __EOF__
 chmod +x $HGTMP/editor
-HGEDITOR=$HGTMP/editor hg --config hooks.pretxncommit=/bin/false commit
+HGEDITOR=$HGTMP/editor hg --config hooks.pretxncommit=false commit
 echo '.hg/last-message.txt:'
 cat .hg/last-message.txt