Merge with crew
authorPatrick Mezard <pmezard@gmail.com>
Mon, 20 Sep 2010 23:42:23 +0200
changeset 12358 d0a97814b7d7
parent 12339 f85338f509e4 (diff)
parent 12357 cb59654c2c7a (current diff)
child 12362 3ee44b41b042
Merge with crew
--- a/contrib/shrink-revlog.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/contrib/shrink-revlog.py	Mon Sep 20 23:42:23 2010 +0200
@@ -117,8 +117,7 @@
 
     try:
         group = util.chunkbuffer(r1.group(order, lookup, progress))
-        chunkiter = changegroup.chunkiter(group)
-        r2.addgroup(chunkiter, unlookup, tr)
+        r2.addgroup(group, unlookup, tr)
     finally:
         ui.progress(_('writing'), None)
 
--- a/hgext/transplant.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/hgext/transplant.py	Mon Sep 20 23:42:23 2010 +0200
@@ -600,7 +600,6 @@
         tp.apply(repo, source, revmap, merges, opts)
     finally:
         if bundle:
-            source.close()
             os.unlink(bundle)
 
 cmdtable = {
--- a/mercurial/bundlerepo.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/mercurial/bundlerepo.py	Mon Sep 20 23:42:23 2010 +0200
@@ -18,11 +18,11 @@
 import localrepo, changelog, manifest, filelog, revlog, error
 
 class bundlerevlog(revlog.revlog):
-    def __init__(self, opener, indexfile, bundlefile,
+    def __init__(self, opener, indexfile, bundle,
                  linkmapper=None):
         # How it works:
         # to retrieve a revision, we need to know the offset of
-        # the revision in the bundlefile (an opened file).
+        # the revision in the bundle (an unbundle object).
         #
         # We store this offset in the index (start), to differentiate a
         # rev in the bundle and from a rev in the revlog, we check
@@ -30,11 +30,14 @@
         # (it is bigger since we store the node to which the delta is)
         #
         revlog.revlog.__init__(self, opener, indexfile)
-        self.bundlefile = bundlefile
+        self.bundle = bundle
         self.basemap = {}
         def chunkpositer():
-            for chunk in changegroup.chunkiter(bundlefile):
-                pos = bundlefile.tell()
+            while 1:
+                chunk = bundle.chunk()
+                if not chunk:
+                    break
+                pos = bundle.tell()
                 yield chunk, pos - len(chunk)
         n = len(self)
         prev = None
@@ -68,7 +71,7 @@
             prev = node
             n += 1
 
-    def bundle(self, rev):
+    def inbundle(self, rev):
         """is rev from the bundle"""
         if rev < 0:
             return False
@@ -79,19 +82,19 @@
         # Warning: in case of bundle, the diff is against bundlebase,
         # not against rev - 1
         # XXX: could use some caching
-        if not self.bundle(rev):
+        if not self.inbundle(rev):
             return revlog.revlog._chunk(self, rev)
-        self.bundlefile.seek(self.start(rev))
-        return self.bundlefile.read(self.length(rev))
+        self.bundle.seek(self.start(rev))
+        return self.bundle.read(self.length(rev))
 
     def revdiff(self, rev1, rev2):
         """return or calculate a delta between two revisions"""
-        if self.bundle(rev1) and self.bundle(rev2):
+        if self.inbundle(rev1) and self.inbundle(rev2):
             # hot path for bundle
             revb = self.rev(self.bundlebase(rev2))
             if revb == rev1:
                 return self._chunk(rev2)
-        elif not self.bundle(rev1) and not self.bundle(rev2):
+        elif not self.inbundle(rev1) and not self.inbundle(rev2):
             return revlog.revlog.revdiff(self, rev1, rev2)
 
         return mdiff.textdiff(self.revision(self.node(rev1)),
@@ -107,7 +110,7 @@
         iter_node = node
         rev = self.rev(iter_node)
         # reconstruct the revision if it is from a changegroup
-        while self.bundle(rev):
+        while self.inbundle(rev):
             if self._cache and self._cache[0] == iter_node:
                 text = self._cache[2]
                 break
@@ -139,20 +142,20 @@
         raise NotImplementedError
 
 class bundlechangelog(bundlerevlog, changelog.changelog):
-    def __init__(self, opener, bundlefile):
+    def __init__(self, opener, bundle):
         changelog.changelog.__init__(self, opener)
-        bundlerevlog.__init__(self, opener, self.indexfile, bundlefile)
+        bundlerevlog.__init__(self, opener, self.indexfile, bundle)
 
 class bundlemanifest(bundlerevlog, manifest.manifest):
-    def __init__(self, opener, bundlefile, linkmapper):
+    def __init__(self, opener, bundle, linkmapper):
         manifest.manifest.__init__(self, opener)
-        bundlerevlog.__init__(self, opener, self.indexfile, bundlefile,
+        bundlerevlog.__init__(self, opener, self.indexfile, bundle,
                               linkmapper)
 
 class bundlefilelog(bundlerevlog, filelog.filelog):
-    def __init__(self, opener, path, bundlefile, linkmapper):
+    def __init__(self, opener, path, bundle, linkmapper):
         filelog.filelog.__init__(self, opener, path)
-        bundlerevlog.__init__(self, opener, self.indexfile, bundlefile,
+        bundlerevlog.__init__(self, opener, self.indexfile, bundle,
                               linkmapper)
 
 class bundlerepository(localrepo.localrepository):
@@ -171,9 +174,10 @@
             self._url = 'bundle:' + bundlename
 
         self.tempfile = None
-        self.bundlefile = open(bundlename, "rb")
-        b = changegroup.readbundle(self.bundlefile, bundlename)
-        if b.compressed():
+        f = open(bundlename, "rb")
+        self.bundle = changegroup.readbundle(f, bundlename)
+        if self.bundle.compressed():
+            # we need a seekable, decompressed bundle
             fdtemp, temp = tempfile.mkstemp(prefix="hg-bundle-",
                                             suffix=".hg10un", dir=self.path)
             self.tempfile = temp
@@ -182,31 +186,30 @@
             try:
                 fptemp.write("HG10UN")
                 while 1:
-                    chunk = b.read(2**18)
+                    chunk = self.bundle.read(2**18)
                     if not chunk:
                         break
                     fptemp.write(chunk)
             finally:
                 fptemp.close()
-                self.bundlefile.close()
 
-            self.bundlefile = open(self.tempfile, "rb")
-            self.bundlefile.seek(6)
+            f = open(self.tempfile, "rb")
+            self.bundle = changegroup.readbundle(f, bundlename)
 
         # dict with the mapping 'filename' -> position in the bundle
         self.bundlefilespos = {}
 
     @util.propertycache
     def changelog(self):
-        c = bundlechangelog(self.sopener, self.bundlefile)
-        self.manstart = self.bundlefile.tell()
+        c = bundlechangelog(self.sopener, self.bundle)
+        self.manstart = self.bundle.tell()
         return c
 
     @util.propertycache
     def manifest(self):
-        self.bundlefile.seek(self.manstart)
-        m = bundlemanifest(self.sopener, self.bundlefile, self.changelog.rev)
-        self.filestart = self.bundlefile.tell()
+        self.bundle.seek(self.manstart)
+        m = bundlemanifest(self.sopener, self.bundle, self.changelog.rev)
+        self.filestart = self.bundle.tell()
         return m
 
     @util.propertycache
@@ -224,33 +227,28 @@
 
     def file(self, f):
         if not self.bundlefilespos:
-            self.bundlefile.seek(self.filestart)
+            self.bundle.seek(self.filestart)
             while 1:
-                chunk = changegroup.getchunk(self.bundlefile)
+                chunk = self.bundle.chunk()
                 if not chunk:
                     break
-                self.bundlefilespos[chunk] = self.bundlefile.tell()
-                for c in changegroup.chunkiter(self.bundlefile):
-                    pass
+                self.bundlefilespos[chunk] = self.bundle.tell()
+                while 1:
+                    c = self.bundle.chunk()
+                    if not c:
+                        break
 
         if f[0] == '/':
             f = f[1:]
         if f in self.bundlefilespos:
-            self.bundlefile.seek(self.bundlefilespos[f])
-            return bundlefilelog(self.sopener, f, self.bundlefile,
+            self.bundle.seek(self.bundlefilespos[f])
+            return bundlefilelog(self.sopener, f, self.bundle,
                                  self.changelog.rev)
         else:
             return filelog.filelog(self.sopener, f)
 
-    def close(self):
-        """Close assigned bundle file immediately."""
-        self.bundlefile.close()
-
     def __del__(self):
-        bundlefile = getattr(self, 'bundlefile', None)
-        if bundlefile and not bundlefile.closed:
-            bundlefile.close()
-        tempfile = getattr(self, 'tempfile', None)
+        del self.bundle
         if tempfile is not None:
             os.unlink(tempfile)
         if self._tempparent:
--- a/mercurial/changegroup.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/mercurial/changegroup.py	Mon Sep 20 23:42:23 2010 +0200
@@ -24,17 +24,6 @@
                           % (len(d), l - 4))
     return d
 
-def chunkiter(source, progress=None):
-    """iterate through the chunks in source, yielding a sequence of chunks
-    (strings)"""
-    while 1:
-        c = getchunk(source)
-        if not c:
-            break
-        elif progress is not None:
-            progress()
-        yield c
-
 def chunkheader(length):
     """return a changegroup chunk header (string)"""
     return struct.pack(">l", length + 4)
@@ -94,15 +83,18 @@
         # parse the changegroup data, otherwise we will block
         # in case of sshrepo because we don't know the end of the stream
 
-        # an empty chunkiter is the end of the changegroup
-        # a changegroup has at least 2 chunkiters (changelog and manifest).
-        # after that, an empty chunkiter is the end of the changegroup
+        # an empty chunkgroup is the end of the changegroup
+        # a changegroup has at least 2 chunkgroups (changelog and manifest).
+        # after that, an empty chunkgroup is the end of the changegroup
         empty = False
         count = 0
         while not empty or count <= 2:
             empty = True
             count += 1
-            for chunk in chunkiter(cg):
+            while 1:
+                chunk = getchunk(cg)
+                if not chunk:
+                    break
                 empty = False
                 fh.write(z.compress(chunkheader(len(chunk))))
                 pos = 0
@@ -136,16 +128,61 @@
                 yield zd.decompress(chunk)
     else:
         raise util.Abort("unknown bundle compression '%s'" % alg)
-    return generator(fh)
+    return util.chunkbuffer(generator(fh))
 
 class unbundle10(object):
     def __init__(self, fh, alg):
-        self._stream = util.chunkbuffer(decompressor(fh, alg))
+        self._stream = decompressor(fh, alg)
         self._type = alg
+        self.callback = None
     def compressed(self):
         return self._type != 'UN'
     def read(self, l):
         return self._stream.read(l)
+    def seek(self, pos):
+        return self._stream.seek(pos)
+    def tell(self):
+        return self._stream.tell()
+
+    def chunklength(self):
+        d = self.read(4)
+        if not d:
+            return 0
+        l = max(0, struct.unpack(">l", d)[0] - 4)
+        if l and self.callback:
+            self.callback()
+        return l
+
+    def chunk(self):
+        """return the next chunk from changegroup 'source' as a string"""
+        l = self.chunklength()
+        d = self.read(l)
+        if len(d) < l:
+            raise util.Abort(_("premature EOF reading chunk"
+                               " (got %d bytes, expected %d)")
+                             % (len(d), l))
+        return d
+
+    def parsechunk(self):
+        l = self.chunklength()
+        if not l:
+            return {}
+        h = self.read(80)
+        node, p1, p2, cs = struct.unpack("20s20s20s20s", h)
+        data = self.read(l - 80)
+        return dict(node=node, p1=p1, p2=p2, cs=cs, data=data)
+
+class headerlessfixup(object):
+    def __init__(self, fh, h):
+        self._h = h
+        self._fh = fh
+    def read(self, n):
+        if self._h:
+            d, self._h = self._h[:n], self._h[n:]
+            if len(d) < n:
+                d += self._fh.read(n - len(d))
+            return d
+        return self._fh.read(n)
 
 def readbundle(fh, fname):
     header = fh.read(6)
@@ -153,12 +190,7 @@
     if not fname:
         fname = "stream"
         if not header.startswith('HG') and header.startswith('\0'):
-            # headerless bundle, clean things up
-            def fixup(f, h):
-                yield h
-                for x in f:
-                    yield x
-            fh = fixup(fh, header)
+            fh = headerlessfixup(fh, header)
             header = "HG10UN"
 
     magic, version, alg = header[0:2], header[2:4], header[4:6]
--- a/mercurial/localrepo.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/mercurial/localrepo.py	Mon Sep 20 23:42:23 2010 +0200
@@ -1543,7 +1543,7 @@
             if msng_cl_lst:
                 self.hook('outgoing', node=hex(msng_cl_lst[0]), source=source)
 
-        return util.chunkbuffer(gengroup())
+        return changegroup.unbundle10(util.chunkbuffer(gengroup()), 'UN')
 
     def changegroup(self, basenodes, source):
         # to avoid a race we use changegroupsubset() (issue1320)
@@ -1621,7 +1621,7 @@
             if nodes:
                 self.hook('outgoing', node=hex(nodes[0]), source=source)
 
-        return util.chunkbuffer(gengroup())
+        return changegroup.unbundle10(util.chunkbuffer(gengroup()), 'UN')
 
     def addchangegroup(self, source, srctype, url, emptyok=False, lock=None):
         """Add the changegroup returned by source.read() to this repo.
@@ -1671,8 +1671,10 @@
                                      total=self.total)
                     self.count += 1
             pr = prog()
-            chunkiter = changegroup.chunkiter(source, progress=pr)
-            if cl.addgroup(chunkiter, csmap, trp) is None and not emptyok:
+            source.callback = pr
+
+            if (cl.addgroup(source, csmap, trp) is None
+                and not emptyok):
                 raise util.Abort(_("received changelog group is empty"))
             clend = len(cl)
             changesets = clend - clstart
@@ -1686,12 +1688,11 @@
             pr.step = _('manifests')
             pr.count = 1
             pr.total = changesets # manifests <= changesets
-            chunkiter = changegroup.chunkiter(source, progress=pr)
             # no need to check for empty manifest group here:
             # if the result of the merge of 1 and 2 is the same in 3 and 4,
             # no new manifest will be created and the manifest group will
             # be empty during the pull
-            self.manifest.addgroup(chunkiter, revmap, trp)
+            self.manifest.addgroup(source, revmap, trp)
             self.ui.progress(_('manifests'), None)
 
             needfiles = {}
@@ -1709,16 +1710,17 @@
             pr.step = 'files'
             pr.count = 1
             pr.total = efiles
+            source.callback = None
+
             while 1:
-                f = changegroup.getchunk(source)
+                f = source.chunk()
                 if not f:
                     break
                 self.ui.debug("adding %s revisions\n" % f)
                 pr()
                 fl = self.file(f)
                 o = len(fl)
-                chunkiter = changegroup.chunkiter(source)
-                if fl.addgroup(chunkiter, revmap, trp) is None:
+                if fl.addgroup(source, revmap, trp) is None:
                     raise util.Abort(_("received file revlog group is empty"))
                 revisions += len(fl) - o
                 files += 1
--- a/mercurial/revlog.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/mercurial/revlog.py	Mon Sep 20 23:42:23 2010 +0200
@@ -1269,7 +1269,7 @@
 
         yield changegroup.closechunk()
 
-    def addgroup(self, revs, linkmapper, transaction):
+    def addgroup(self, bundle, linkmapper, transaction):
         """
         add a delta group
 
@@ -1301,16 +1301,22 @@
         try:
             # loop through our set of deltas
             chain = None
-            for chunk in revs:
-                node, p1, p2, cs = struct.unpack("20s20s20s20s", chunk[:80])
+            while 1:
+                chunkdata = bundle.parsechunk()
+                if not chunkdata:
+                    break
+                node = chunkdata['node']
+                p1 = chunkdata['p1']
+                p2 = chunkdata['p2']
+                cs = chunkdata['cs']
+                delta = chunkdata['data']
+
                 link = linkmapper(cs)
                 if (node in self.nodemap and
                     (not self.flags(self.rev(node)) & REVIDX_PUNCHED_FLAG)):
                     # this can happen if two branches make the same change
                     chain = node
                     continue
-                delta = buffer(chunk, 80)
-                del chunk
 
                 for p in (p1, p2):
                     if not p in self.nodemap:
--- a/mercurial/sshserver.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/mercurial/sshserver.py	Mon Sep 20 23:42:23 2010 +0200
@@ -6,7 +6,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2 or any later version.
 
-import util, hook, wireproto
+import util, hook, wireproto, changegroup
 import os, sys
 
 class sshserver(object):
@@ -130,7 +130,8 @@
             return
 
         self.sendresponse("")
-        r = self.repo.addchangegroup(self.fin, 'serve', self._client(),
+        cg = changegroup.unbundle10(self.fin, "UN")
+        r = self.repo.addchangegroup(cg, 'serve', self._client(),
                                      lock=self.lock)
         return str(r)
 
--- a/mercurial/wireproto.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/mercurial/wireproto.py	Mon Sep 20 23:42:23 2010 +0200
@@ -102,14 +102,15 @@
     def changegroup(self, nodes, kind):
         n = encodelist(nodes)
         f = self._callstream("changegroup", roots=n)
-        return self._decompress(f)
+        return changegroupmod.unbundle10(self._decompress(f), 'UN')
 
     def changegroupsubset(self, bases, heads, kind):
         self.requirecap('changegroupsubset', _('look up remote changes'))
         bases = encodelist(bases)
         heads = encodelist(heads)
-        return self._decompress(self._callstream("changegroupsubset",
-                                                 bases=bases, heads=heads))
+        f = self._callstream("changegroupsubset",
+                             bases=bases, heads=heads)
+        return changegroupmod.unbundle10(self._decompress(f), 'UN')
 
     def unbundle(self, cg, heads, source):
         '''Send cg (a readable file-like object representing the
--- a/tests/run-tests.py	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/run-tests.py	Mon Sep 20 23:42:23 2010 +0200
@@ -503,6 +503,9 @@
 
     def rematch(el, l):
         try:
+            # hack to deal with graphlog, which looks like bogus regexes
+            if el.startswith('|'):
+                el = '\\' + el
             return re.match(el, l)
         except re.error:
             # el is an invalid regex
--- a/tests/test-abort-checkin.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-abort-checkin.t	Mon Sep 20 23:42:23 2010 +0200
@@ -31,5 +31,3 @@
   rollback completed
   abort: no commits allowed
   [255]
-
-  $ exit 0
--- a/tests/test-alias.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-alias.t	Mon Sep 20 23:42:23 2010 +0200
@@ -198,5 +198,3 @@
   
   use "hg -v help rt" to show global options
   [255]
-
-  $ exit 0
--- a/tests/test-archive.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-archive.t	Mon Sep 20 23:42:23 2010 +0200
@@ -227,11 +227,9 @@
   $ hg archive ../old.zip
   $ unzip -l ../old.zip
   Archive:  ../old.zip
-    Length      Date    Time    Name
-  ---------  ---------- -----   ----
-        147  1980-01-01 00:00   old/.hg_archival.txt
-          0  1980-01-01 00:00   old/old
-  ---------                     -------
-        147                     2 files
-
-  $ exit 0
+  \s*Length.*
+  .*-----.*
+  .*147.*80.*00:00.*old/.hg_archival.txt
+  .*0.*80.*00:00.*old/old
+  .*-----.*
+  \s*147\s+2 files
--- a/tests/test-audit-path.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-audit-path.t	Mon Sep 20 23:42:23 2010 +0200
@@ -80,5 +80,3 @@
   $ hg update -Cr4
   abort: No such file or directory: .*/test-audit-path.t/target//tmp/test
   [255]
-
-  $ exit 0
--- a/tests/test-backout.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-backout.t	Mon Sep 20 23:42:23 2010 +0200
@@ -3,7 +3,7 @@
   $ hg init basic
   $ cd basic
 
-# should complain
+should complain
 
   $ hg backout
   abort: please specify a revision to backout
@@ -12,7 +12,7 @@
   abort: please specify just one revision
   [255]
 
-# basic operation
+basic operation
 
   $ echo a > a
   $ hg commit -d '0 0' -A -m a
@@ -26,7 +26,7 @@
   $ cat a
   a
 
-# file that was removed is recreated
+file that was removed is recreated
 
   $ cd ..
   $ hg init remove
@@ -45,7 +45,7 @@
   $ cat a
   content
 
-# backout of backout is as if nothing happened
+backout of backout is as if nothing happened
 
   $ hg backout -d '3 0' --merge tip
   removing a
@@ -53,7 +53,7 @@
   $ cat a 2>/dev/null || echo cat: a: No such file or directory
   cat: a: No such file or directory
 
-# across branch
+across branch
 
   $ cd ..
   $ hg init branch
@@ -83,7 +83,7 @@
   abort: cannot backout change on a different branch
   [255]
 
-# backout with merge
+backout with merge
 
   $ cd ..
   $ hg init merge
@@ -119,7 +119,7 @@
   line 2
   line 3
 
-# backout should not back out subsequent changesets
+backout should not back out subsequent changesets
 
   $ hg init onecs
   $ cd onecs
@@ -167,25 +167,25 @@
   (branch merge, don't forget to commit)
   $ hg commit -d '4 0' -A -m d
 
-# backout of merge should fail
+backout of merge should fail
 
   $ hg backout 4
   abort: cannot backout a merge changeset without --parent
   [255]
 
-# backout of merge with bad parent should fail
+backout of merge with bad parent should fail
 
   $ hg backout --parent 0 4
   abort: cb9a9f314b8b is not a parent of b2f3bb92043e
   [255]
 
-# backout of non-merge with parent should fail
+backout of non-merge with parent should fail
 
   $ hg backout --parent 0 3
   abort: cannot use --parent on non-merge changeset
   [255]
 
-# backout with valid parent should be ok
+backout with valid parent should be ok
 
   $ hg backout -d '5 0' --parent 2 4
   removing d
@@ -202,7 +202,7 @@
 
   $ cd ..
 
-# named branches
+named branches
 
   $ hg init named_branches
   $ cd named_branches
@@ -259,5 +259,3 @@
   $ hg st -A
   C default
   C file1
-
-  $ exit 0
--- a/tests/test-commit-unresolved.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-commit-unresolved.t	Mon Sep 20 23:42:23 2010 +0200
@@ -45,5 +45,3 @@
 
   $ hg resolve -m A
   $ hg commit -m "Merged"
-
-  $ exit 0
--- a/tests/test-commit.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-commit.t	Mon Sep 20 23:42:23 2010 +0200
@@ -265,6 +265,3 @@
   HG: removed removed
   abort: empty commit message
   [255]
-  $ cd ..
-
-  $ exit 0
--- a/tests/test-copy2.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-copy2.t	Mon Sep 20 23:42:23 2010 +0200
@@ -100,5 +100,3 @@
   $ hg st -AC foo
   M foo
     bar
-
-  $ exit 0
--- a/tests/test-debugcomplete.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-debugcomplete.t	Mon Sep 20 23:42:23 2010 +0200
@@ -195,7 +195,7 @@
   summary: remote
   update: clean, check, date, rev
   addremove: similarity, include, exclude, dry-run
-  archive: no-decode, prefix, rev, type, include, exclude
+  archive: no-decode, prefix, rev, type, subrepos, include, exclude
   backout: merge, parent, rev, include, exclude, message, logfile, date, user
   bisect: reset, good, bad, skip, command, noupdate
   branch: force, clean
@@ -247,5 +247,3 @@
   unbundle: update
   verify: 
   version: 
-
-  $ exit 0
--- a/tests/test-dispatch.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-dispatch.t	Mon Sep 20 23:42:23 2010 +0200
@@ -64,5 +64,3 @@
   abort: There is no Mercurial repository here (.hg not found)!
   [255]
 
-  $ exit 0
-
--- a/tests/test-dumprevlog.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-dumprevlog.t	Mon Sep 20 23:42:23 2010 +0200
@@ -105,5 +105,3 @@
   no changes found
   [1]
 
-  $ exit 0
-
--- a/tests/test-empty-group.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-empty-group.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,3 @@
-#
 #  A          B
 #
 #  3  4       3
@@ -15,7 +14,6 @@
 #
 # (plus we test a failure where outgoing
 # wrongly reported the number of csets)
-#
 
   $ hg init a
   $ cd a
@@ -40,9 +38,6 @@
   (branch merge, don't forget to commit)
   $ hg ci -A -m m1
 
-#hg log
-#hg debugindex .hg/store/00manifest.i
-
   $ hg update -C 1
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg merge 2
@@ -51,9 +46,6 @@
   $ hg ci -A -m m2
   created new head
 
-#hg log
-#hg debugindex .hg/store/00manifest.i
-
   $ cd ..
 
   $ hg clone -r 3 a b
@@ -135,4 +127,3 @@
   adding file changes
   added 1 changesets with 0 changes to 0 files (+1 heads)
   (run 'hg heads' to see heads, 'hg merge' to merge)
-
--- a/tests/test-extdiff.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-extdiff.t	Mon Sep 20 23:42:23 2010 +0200
@@ -135,8 +135,9 @@
 
   $ chmod +x 'diff tool.py'
 
-# will change to /tmp/extdiff.TMP and populate directories a.TMP and a
-# and start tool
+will change to /tmp/extdiff.TMP and populate directories a.TMP and a
+and start tool
+
   $ hg extdiff -p "`pwd`/diff tool.py"
   [1]
 
--- a/tests/test-extension.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-extension.t	Mon Sep 20 23:42:23 2010 +0200
@@ -318,6 +318,3 @@
   $ hg --config extensions.path=./path.py help foo > /dev/null
   hg: unknown command 'foo'
   [255]
-
-  $ exit 0
-
--- a/tests/test-extra-filelog-entry.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-extra-filelog-entry.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# test for issue351
+test for issue351
 
   $ echo "[extensions]" >> $HGRCPATH
   $ echo "mq=" >> $HGRCPATH
--- a/tests/test-hardlinks-safety.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-hardlinks-safety.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,5 +1,5 @@
+some implementations of cp can't create hardlinks
 
-# some implementations of cp can't create hardlinks
   $ cat > cp.py <<EOF
   > from mercurial import util
   > import sys
--- a/tests/test-help.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-help.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-#!/bin/sh
+Short help:
 
   $ hg
   Mercurial Distributed SCM
--- a/tests/test-hook.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-hook.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,6 +1,6 @@
   $ cp "$TESTDIR"/printenv.py .
 
-# commit hooks can see env vars
+commit hooks can see env vars
 
   $ hg init a
   $ cd a
@@ -27,14 +27,14 @@
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ cd ../b
 
-# changegroup hooks can see env vars
+changegroup hooks can see env vars
 
   $ echo '[hooks]' > .hg/hgrc
   $ echo 'prechangegroup = python ../printenv.py prechangegroup' >> .hg/hgrc
   $ echo 'changegroup = python ../printenv.py changegroup' >> .hg/hgrc
   $ echo 'incoming = python ../printenv.py incoming' >> .hg/hgrc
 
-# pretxncommit and commit hooks can see both parents of merge
+pretxncommit and commit hooks can see both parents of merge
 
   $ cd ../a
   $ echo b >> a
@@ -65,7 +65,7 @@
   commit hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd 
   commit.b hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd 
 
-# test generic hooks
+test generic hooks
 
   $ hg id
   pre-identify hook: HG_ARGS=id HG_OPTS={'tags': None, 'rev': '', 'num': None, 'branch': None, 'id': None} HG_PATS=[] 
@@ -91,7 +91,7 @@
   added 3 changesets with 2 changes to 2 files
   (run 'hg update' to get a working copy)
 
-# tag hooks can see env vars
+tag hooks can see env vars
 
   $ cd ../a
   $ echo 'pretag = python ../printenv.py pretag' >> .hg/hgrc
@@ -108,7 +108,7 @@
   pretag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la 
   tag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la 
 
-# pretag hook can forbid tagging
+pretag hook can forbid tagging
 
   $ echo 'pretag.forbid = python ../printenv.py pretag.forbid 1' >> .hg/hgrc
   $ hg tag -d '4 0' fa
@@ -122,8 +122,8 @@
   abort: pretag.forbid hook exited with status 1
   [255]
 
-# pretxncommit hook can see changeset, can roll back txn, changeset
-# no more there after
+pretxncommit hook can see changeset, can roll back txn, changeset no
+more there after
 
   $ echo 'pretxncommit.forbid0 = hg tip -q' >> .hg/hgrc
   $ echo 'pretxncommit.forbid1 = python ../printenv.py pretxncommit.forbid 1' >> .hg/hgrc
@@ -144,7 +144,7 @@
   $ hg -q tip
   4:539e4b31b6dc
 
-# precommit hook can prevent commit
+precommit hook can prevent commit
 
   $ echo 'precommit.forbid = python ../printenv.py precommit.forbid 1' >> .hg/hgrc
   $ hg commit -m 'fail' -d '4 0'
@@ -155,14 +155,14 @@
   $ hg -q tip
   4:539e4b31b6dc
 
-# preupdate hook can prevent update
+preupdate hook can prevent update
 
   $ echo 'preupdate = python ../printenv.py preupdate' >> .hg/hgrc
   $ hg update 1
   preupdate hook: HG_PARENT1=ab228980c14d 
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
 
-# update hook
+update hook
 
   $ echo 'update = python ../printenv.py update' >> .hg/hgrc
   $ hg update
@@ -170,7 +170,7 @@
   update hook: HG_ERROR=0 HG_PARENT1=539e4b31b6dc 
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
-# prechangegroup hook can prevent incoming changes
+prechangegroup hook can prevent incoming changes
 
   $ cd ../b
   $ hg -q tip
@@ -184,8 +184,8 @@
   abort: prechangegroup.forbid hook exited with status 1
   [255]
 
-# pretxnchangegroup hook can see incoming changes, can roll back txn,
-# incoming changes no longer there after
+pretxnchangegroup hook can see incoming changes, can roll back txn,
+incoming changes no longer there after
 
   $ echo '[hooks]' > .hg/hgrc
   $ echo 'pretxnchangegroup.forbid0 = hg tip -q' >> .hg/hgrc
@@ -206,7 +206,7 @@
   $ hg -q tip
   3:07f3376c1e65
 
-# outgoing hooks can see env vars
+outgoing hooks can see env vars
 
   $ rm .hg/hgrc
   $ echo '[hooks]' > ../a/.hg/hgrc
@@ -225,7 +225,7 @@
   $ hg rollback
   rolling back to revision 3 (undo pull)
 
-# preoutgoing hook can prevent outgoing changes
+preoutgoing hook can prevent outgoing changes
 
   $ echo 'preoutgoing.forbid = python ../printenv.py preoutgoing.forbid 1' >> ../a/.hg/hgrc
   $ hg pull ../a
@@ -236,7 +236,7 @@
   abort: preoutgoing.forbid hook exited with status 1
   [255]
 
-# outgoing hooks work for local clones
+outgoing hooks work for local clones
 
   $ cd ..
   $ echo '[hooks]' > a/.hg/hgrc
@@ -249,7 +249,7 @@
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ rm -rf c
 
-# preoutgoing hook can prevent outgoing changes for local clones
+preoutgoing hook can prevent outgoing changes for local clones
 
   $ echo 'preoutgoing.forbid = python ../printenv.py preoutgoing.forbid 1' >> a/.hg/hgrc
   $ hg clone a zzz
@@ -296,7 +296,7 @@
   >     unreachable = 1
   > EOF
 
-# test python hooks
+test python hooks
 
   $ PYTHONPATH="`pwd`:$PYTHONPATH"
   $ export PYTHONPATH
@@ -385,7 +385,7 @@
   added 1 changesets with 1 changes to 1 files
   (run 'hg update' to get a working copy)
 
-# make sure --traceback works
+make sure --traceback works
 
   $ echo '[hooks]' > .hg/hgrc
   $ echo 'commit.abort = python:hooktests.aborthook' >> .hg/hgrc
@@ -422,7 +422,7 @@
   $ hg showconfig hooks
   hooks.commit.auto=<function autohook at .*>
 
-# test python hook configured with python:[file]:[hook] syntax
+test python hook configured with python:[file]:[hook] syntax
 
   $ cd ..
   $ mkdir d
@@ -446,7 +446,7 @@
 
   $ cd ../../b
 
-# make sure --traceback works on hook import failure
+make sure --traceback works on hook import failure
 
   $ cat > importfail.py <<EOF
   > import somebogusmodule
@@ -467,7 +467,7 @@
   ImportError: No module named hgext_importfail
   Traceback (most recent call last):
 
-# commit and update hooks should run after command completion (issue 1827)
+commit and update hooks should run after command completion (issue 1827)
 
   $ echo '[hooks]' > .hg/hgrc
   $ echo 'commit = hg id' >> .hg/hgrc
@@ -479,4 +479,3 @@
   cb9a9f314b8b
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
-  $ exit 0
--- a/tests/test-init.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-init.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# This test tries to exercise the ssh functionality with a dummy script
+This test tries to exercise the ssh functionality with a dummy script
 
   $ cat <<EOF > dummyssh
   > import sys
--- a/tests/test-issue1089.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue1089.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue1089
+http://mercurial.selenic.com/bts/issue1089
 
   $ hg init
   $ mkdir a
--- a/tests/test-issue1175.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue1175.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue1175
+http://mercurial.selenic.com/bts/issue1175
 
   $ hg init
   $ touch a
--- a/tests/test-issue1306.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue1306.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue1306
+http://mercurial.selenic.com/bts/issue1306
 
 Initialize remote repo with branches:
 
--- a/tests/test-issue1438.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue1438.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue1438
+http://mercurial.selenic.com/bts/issue1438
 
   $ "$TESTDIR/hghave" symlink || exit 80
 
--- a/tests/test-issue2137.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue2137.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,12 +1,12 @@
-# http://mercurial.selenic.com/bts/issue2137
+http://mercurial.selenic.com/bts/issue2137
 
 Setup:
 
-# create a little extension that has 3 side-effects:
-#   1) ensure changelog data is not inlined
-#   2) make revlog to use lazyparser
-#   3) test that repo.lookup() works
-# 1 and 2 are preconditions for the bug; 3 is the bug.
+create a little extension that has 3 side-effects:
+1) ensure changelog data is not inlined
+2) make revlog to use lazyparser
+3) test that repo.lookup() works
+1 and 2 are preconditions for the bug; 3 is the bug.
 
   $ cat > commitwrapper.py <<EOF
   > from mercurial import extensions, node, revlog
@@ -39,7 +39,6 @@
   adding a
   new tip: 553596fad57b
 
-
 Test that new changesets are visible to repo.lookup():
 
   $ echo a >> a
@@ -53,4 +52,3 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     one more commit to demonstrate the bug
   
-
--- a/tests/test-issue322.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue322.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue322
+http://mercurial.selenic.com/bts/issue322
 
 File replaced with directory:
 
@@ -57,5 +57,3 @@
   abort: directory 'b' already in dirstate
   [255]
 
-  $ exit 0
-
--- a/tests/test-issue433.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue433.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue433
+http://mercurial.selenic.com/bts/issue433
 
   $ hg init
   $ echo a > a
--- a/tests/test-issue436.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue436.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue436
+http://mercurial.selenic.com/bts/issue436
 
   $ hg init
   $ hg -v log -v
--- a/tests/test-issue522.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue522.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,10 +1,10 @@
-# http://mercurial.selenic.com/bts/issue522
+http://mercurial.selenic.com/bts/issue522
 
-# In the merge below, the file "foo" has the same contents in both
-# parents, but if we look at the file-level history, we'll notice that
-# the version in p1 is an ancestor of the version in p2.  This test
-# makes sure that we'll use the version from p2 in the manifest of the
-# merge revision.
+In the merge below, the file "foo" has the same contents in both
+parents, but if we look at the file-level history, we'll notice that
+the version in p1 is an ancestor of the version in p2. This test makes
+sure that we'll use the version from p2 in the manifest of the merge
+revision.
 
   $ hg init
 
--- a/tests/test-issue612.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue612.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue612
+http://mercurial.selenic.com/bts/issue612
 
   $ hg init
   $ mkdir src
--- a/tests/test-issue619.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue619.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue619
+http://mercurial.selenic.com/bts/issue619
 
   $ hg init
   $ echo a > a
--- a/tests/test-issue660.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue660.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue660
+http://mercurial.selenic.com/bts/issue660
 
   $ hg init
   $ echo a > a
--- a/tests/test-issue672.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue672.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue672
+http://mercurial.selenic.com/bts/issue672
 
 # 0-2-4
 #  \ \ \
--- a/tests/test-issue842.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-issue842.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# http://mercurial.selenic.com/bts/issue842
+http://mercurial.selenic.com/bts/issue842
 
   $ hg init
   $ echo foo > a
--- a/tests/test-journal-exists.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-journal-exists.t	Mon Sep 20 23:42:23 2010 +0200
@@ -32,5 +32,3 @@
 
   $ if test -f foo/.hg/store/journal; then echo 'journal exists :-('; fi
 
-  $ exit 0
-
--- a/tests/test-log.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-log.t	Mon Sep 20 23:42:23 2010 +0200
@@ -862,7 +862,6 @@
 #      \     /
 #         o
 #
-
 # Where "o" is a revision containing "foo" and
 # "x" is a revision without "foo"
 
@@ -1020,5 +1019,3 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     add foo, related
   
-
-  $ exit 0
--- a/tests/test-manifest.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-manifest.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,5 +1,5 @@
-# Source bundle was generated with the following script.
-#
+Source bundle was generated with the following script:
+
 # hg init
 # echo a > a
 # ln -s a l
@@ -12,12 +12,10 @@
   $ hg init
   $ hg -q pull "$TESTDIR/test-manifest.hg"
 
-
 The next call is expected to return nothing:
 
   $ hg manifest
 
-
   $ hg co
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
--- a/tests/test-merge-commit.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-merge-commit.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# Check that renames are correctly saved by a commit after a merge
+Check that renames are correctly saved by a commit after a merge
 
 Test with the merge on 3 having the rename on the local parent
 
--- a/tests/test-merge-internal-tools-pattern.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-merge-internal-tools-pattern.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,5 +1,5 @@
-# Make sure that the internal merge tools (internal:fail, internal:local, and
-# internal:other) are used when matched by a merge-pattern in hgrc
+Make sure that the internal merge tools (internal:fail, internal:local, and
+internal:other) are used when matched by a merge-pattern in hgrc
 
 Make sure HGMERGE doesn't interfere with the test:
 
--- a/tests/test-merge-prompt.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-merge-prompt.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,10 +1,9 @@
-# Test for
-#
-#   b5605d88dc27: Make ui.prompt repeat on "unrecognized response" again
-#                 (issue897)
-#
-#   840e2b315c1f: Fix misleading error and prompts during update/merge
-#                 (issue556)
+Test for
+b5605d88dc27: Make ui.prompt repeat on "unrecognized response" again
+ (issue897)
+
+840e2b315c1f: Fix misleading error and prompts during update/merge
+ (issue556)
 
   $ status() {
   >     [ $? -ne 0 ] && echo "failed."
--- a/tests/test-mq-git	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-# Test the plumbing of mq.git option
-# Automatic upgrade itself is tested elsewhere.
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-echo "[diff]" >> $HGRCPATH
-echo "nodates=1" >> $HGRCPATH
-
-hg init repo-auto
-cd repo-auto
-echo '% git=auto: regular patch creation'
-echo a > a
-hg add a
-hg qnew -d '0 0' -f adda
-cat .hg/patches/adda
-echo '% git=auto: git patch creation with copy'
-hg cp a b
-hg qnew -d '0 0' -f copy
-cat .hg/patches/copy
-echo '% git=auto: git patch when using --git'
-echo regular > regular
-hg add regular
-hg qnew -d '0 0' --git -f git
-cat .hg/patches/git
-echo '% git=auto: regular patch after qrefresh without --git'
-hg qrefresh -d '0 0'
-cat .hg/patches/git
-cd ..
-
-hg init repo-keep
-cd repo-keep
-echo '[mq]' > .hg/hgrc
-echo 'git = KEEP' >> .hg/hgrc
-echo '% git=keep: git patch with --git'
-echo a > a
-hg add a
-hg qnew -d '0 0' -f --git git
-cat .hg/patches/git
-echo '% git=keep: git patch after qrefresh without --git'
-echo a >> a
-hg qrefresh -d '0 0'
-cat .hg/patches/git
-cd ..
-
-hg init repo-yes
-cd repo-yes
-echo '[mq]' > .hg/hgrc
-echo 'git = yes' >> .hg/hgrc
-echo '% git=yes: git patch'
-echo a > a
-hg add a
-hg qnew -d '0 0' -f git
-cat .hg/patches/git
-echo '% git=yes: git patch after qrefresh'
-echo a >> a
-hg qrefresh -d '0 0'
-cat .hg/patches/git
-cd ..
-
-hg init repo-no
-cd repo-no
-echo '[diff]' > .hg/hgrc
-echo 'git = True' >> .hg/hgrc
-echo '[mq]' > .hg/hgrc
-echo 'git = False' >> .hg/hgrc
-echo '% git=no: regular patch with copy'
-echo a > a
-hg add a
-hg qnew -d '0 0' -f adda
-hg cp a b
-hg qnew -d '0 0' -f regular
-cat .hg/patches/regular
-echo '% git=no: regular patch after qrefresh with copy'
-hg cp a c
-hg qrefresh -d '0 0'
-cat .hg/patches/regular
-cd ..
--- a/tests/test-mq-git.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-% git=auto: regular patch creation
-# HG changeset patch
-# Parent 0000000000000000000000000000000000000000
-# Date 0 0
-
-diff -r 000000000000 -r ef8dafc9fa4c a
---- /dev/null
-+++ b/a
-@@ -0,0 +1,1 @@
-+a
-% git=auto: git patch creation with copy
-# HG changeset patch
-# Parent ef8dafc9fa4caff80f6e243eb0171bcd60c455b4
-# Date 0 0
-
-diff --git a/a b/b
-copy from a
-copy to b
-% git=auto: git patch when using --git
-# HG changeset patch
-# Parent 99586d5f048c399e20f81cee41fbb3809c0e735d
-# Date 0 0
-
-diff --git a/regular b/regular
-new file mode 100644
---- /dev/null
-+++ b/regular
-@@ -0,0 +1,1 @@
-+regular
-% git=auto: regular patch after qrefresh without --git
-# HG changeset patch
-# Parent 99586d5f048c399e20f81cee41fbb3809c0e735d
-# Date 0 0
-
-diff -r 99586d5f048c regular
---- /dev/null
-+++ b/regular
-@@ -0,0 +1,1 @@
-+regular
-% git=keep: git patch with --git
-# HG changeset patch
-# Parent 0000000000000000000000000000000000000000
-# Date 0 0
-
-diff --git a/a b/a
-new file mode 100644
---- /dev/null
-+++ b/a
-@@ -0,0 +1,1 @@
-+a
-% git=keep: git patch after qrefresh without --git
-# HG changeset patch
-# Parent 0000000000000000000000000000000000000000
-# Date 0 0
-
-diff --git a/a b/a
-new file mode 100644
---- /dev/null
-+++ b/a
-@@ -0,0 +1,2 @@
-+a
-+a
-% git=yes: git patch
-# HG changeset patch
-# Parent 0000000000000000000000000000000000000000
-# Date 0 0
-
-diff --git a/a b/a
-new file mode 100644
---- /dev/null
-+++ b/a
-@@ -0,0 +1,1 @@
-+a
-% git=yes: git patch after qrefresh
-# HG changeset patch
-# Parent 0000000000000000000000000000000000000000
-# Date 0 0
-
-diff --git a/a b/a
-new file mode 100644
---- /dev/null
-+++ b/a
-@@ -0,0 +1,2 @@
-+a
-+a
-% git=no: regular patch with copy
-# HG changeset patch
-# Parent ef8dafc9fa4caff80f6e243eb0171bcd60c455b4
-# Date 0 0
-
-diff -r ef8dafc9fa4c -r a70404f79ba3 b
---- /dev/null
-+++ b/b
-@@ -0,0 +1,1 @@
-+a
-% git=no: regular patch after qrefresh with copy
-# HG changeset patch
-# Parent ef8dafc9fa4caff80f6e243eb0171bcd60c455b4
-# Date 0 0
-
-diff -r ef8dafc9fa4c b
---- /dev/null
-+++ b/b
-@@ -0,0 +1,1 @@
-+a
-diff -r ef8dafc9fa4c c
---- /dev/null
-+++ b/c
-@@ -0,0 +1,1 @@
-+a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-git.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,210 @@
+# Test the plumbing of mq.git option
+# Automatic upgrade itself is tested elsewhere.
+
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+  $ echo "[diff]" >> $HGRCPATH
+  $ echo "nodates=1" >> $HGRCPATH
+
+  $ hg init repo-auto
+  $ cd repo-auto
+
+git=auto: regular patch creation:
+
+  $ echo a > a
+  $ hg add a
+  $ hg qnew -d '0 0' -f adda
+
+  $ cat .hg/patches/adda
+  # HG changeset patch
+  # Parent 0000000000000000000000000000000000000000
+  # Date 0 0
+  
+  diff -r 000000000000 -r ef8dafc9fa4c a
+  --- /dev/null
+  +++ b/a
+  @@ -0,0 +1,1 @@
+  +a
+
+git=auto: git patch creation with copy:
+
+  $ hg cp a b
+  $ hg qnew -d '0 0' -f copy
+
+  $ cat .hg/patches/copy
+  # HG changeset patch
+  # Parent ef8dafc9fa4caff80f6e243eb0171bcd60c455b4
+  # Date 0 0
+  
+  diff --git a/a b/b
+  copy from a
+  copy to b
+
+git=auto: git patch when using --git:
+
+  $ echo regular > regular
+  $ hg add regular
+  $ hg qnew -d '0 0' --git -f git
+
+  $ cat .hg/patches/git
+  # HG changeset patch
+  # Parent 99586d5f048c399e20f81cee41fbb3809c0e735d
+  # Date 0 0
+  
+  diff --git a/regular b/regular
+  new file mode 100644
+  --- /dev/null
+  +++ b/regular
+  @@ -0,0 +1,1 @@
+  +regular
+
+git=auto: regular patch after qrefresh without --git:
+
+  $ hg qrefresh -d '0 0'
+
+  $ cat .hg/patches/git
+  # HG changeset patch
+  # Parent 99586d5f048c399e20f81cee41fbb3809c0e735d
+  # Date 0 0
+  
+  diff -r 99586d5f048c regular
+  --- /dev/null
+  +++ b/regular
+  @@ -0,0 +1,1 @@
+  +regular
+
+  $ cd ..
+
+  $ hg init repo-keep
+  $ cd repo-keep
+  $ echo '[mq]' > .hg/hgrc
+  $ echo 'git = KEEP' >> .hg/hgrc
+
+git=keep: git patch with --git:
+
+  $ echo a > a
+  $ hg add a
+  $ hg qnew -d '0 0' -f --git git
+
+  $ cat .hg/patches/git
+  # HG changeset patch
+  # Parent 0000000000000000000000000000000000000000
+  # Date 0 0
+  
+  diff --git a/a b/a
+  new file mode 100644
+  --- /dev/null
+  +++ b/a
+  @@ -0,0 +1,1 @@
+  +a
+
+git=keep: git patch after qrefresh without --git:
+
+  $ echo a >> a
+  $ hg qrefresh -d '0 0'
+
+  $ cat .hg/patches/git
+  # HG changeset patch
+  # Parent 0000000000000000000000000000000000000000
+  # Date 0 0
+  
+  diff --git a/a b/a
+  new file mode 100644
+  --- /dev/null
+  +++ b/a
+  @@ -0,0 +1,2 @@
+  +a
+  +a
+  $ cd ..
+
+  $ hg init repo-yes
+  $ cd repo-yes
+  $ echo '[mq]' > .hg/hgrc
+  $ echo 'git = yes' >> .hg/hgrc
+
+git=yes: git patch:
+
+  $ echo a > a
+  $ hg add a
+  $ hg qnew -d '0 0' -f git
+
+  $ cat .hg/patches/git
+  # HG changeset patch
+  # Parent 0000000000000000000000000000000000000000
+  # Date 0 0
+  
+  diff --git a/a b/a
+  new file mode 100644
+  --- /dev/null
+  +++ b/a
+  @@ -0,0 +1,1 @@
+  +a
+
+git=yes: git patch after qrefresh:
+
+  $ echo a >> a
+  $ hg qrefresh -d '0 0'
+
+  $ cat .hg/patches/git
+  # HG changeset patch
+  # Parent 0000000000000000000000000000000000000000
+  # Date 0 0
+  
+  diff --git a/a b/a
+  new file mode 100644
+  --- /dev/null
+  +++ b/a
+  @@ -0,0 +1,2 @@
+  +a
+  +a
+  $ cd ..
+
+  $ hg init repo-no
+  $ cd repo-no
+  $ echo '[diff]' > .hg/hgrc
+  $ echo 'git = True' >> .hg/hgrc
+  $ echo '[mq]' > .hg/hgrc
+  $ echo 'git = False' >> .hg/hgrc
+
+git=no: regular patch with copy:
+
+  $ echo a > a
+  $ hg add a
+  $ hg qnew -d '0 0' -f adda
+  $ hg cp a b
+  $ hg qnew -d '0 0' -f regular
+
+  $ cat .hg/patches/regular
+  # HG changeset patch
+  # Parent ef8dafc9fa4caff80f6e243eb0171bcd60c455b4
+  # Date 0 0
+  
+  diff -r ef8dafc9fa4c -r a70404f79ba3 b
+  --- /dev/null
+  +++ b/b
+  @@ -0,0 +1,1 @@
+  +a
+
+git=no: regular patch after qrefresh with copy:
+
+  $ hg cp a c
+  $ hg qrefresh -d '0 0'
+
+  $ cat .hg/patches/regular
+  # HG changeset patch
+  # Parent ef8dafc9fa4caff80f6e243eb0171bcd60c455b4
+  # Date 0 0
+  
+  diff -r ef8dafc9fa4c b
+  --- /dev/null
+  +++ b/b
+  @@ -0,0 +1,1 @@
+  +a
+  diff -r ef8dafc9fa4c c
+  --- /dev/null
+  +++ b/c
+  @@ -0,0 +1,1 @@
+  +a
+
+  $ cd ..
+
--- a/tests/test-mq-merge	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-# Test issue 529 - mq aborts when merging patch deleting files
-
-checkundo()
-{
-    if [ -f .hg/store/undo ]; then
-	echo ".hg/store/undo still exists after $1"
-    fi
-}
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq =" >> $HGRCPATH
-echo "[mq]" >> $HGRCPATH
-echo "git = keep" >> $HGRCPATH
-
-# Commit two dummy files in "init" changeset
-hg init t
-cd t
-echo a > a
-echo b > b
-hg ci -Am init
-hg tag -l init
-
-# Create a patch removing a
-hg qnew rm_a
-hg rm a
-hg qrefresh -m "rm a"
-
-# Save the patch queue so we can merge it later
-hg qsave -c -e 2>&1 | grep -v '^copy'
-checkundo qsave
-
-# Update b and commit in an "update" changeset
-hg up -C init
-echo b >> b
-hg st
-hg ci -m update
-
-# Here, qpush used to abort with :
-# The system cannot find the file specified => a
-hg manifest
-hg qpush -a -m 2>&1 | grep -v '^merging'
-checkundo 'qpush -m'
-hg manifest
-
-# ensure status is correct after merge
-hg qpop -a
-cd ..
-
-# Classic MQ merge sequence *with an explicit named queue*
-echo
-echo % init t2
-hg init t2
-cd t2
-echo '[diff]' > .hg/hgrc
-echo 'nodates = 1' >> .hg/hgrc
-echo a > a
-hg ci -Am init
-echo b > a
-hg ci -m changea
-hg up -C 0
-hg cp a aa
-echo c >> a
-hg qnew --git -f -e patcha
-echo d >> a
-hg qnew -d '0 0' -f -e patcha2
-echo % create the reference queue
-hg qsave -c -e -n refqueue 2> /dev/null
-hg up -C 1
-echo % merge
-HGMERGE=internal:other hg qpush -a -m -n refqueue 2>&1 | \
-    sed 's/merging with queue at.*refqueue/merging with queue at refqueue/'
-echo % check patcha is still a git patch
-cat .hg/patches/patcha
-echo % check patcha2 is still a regular patch
-grep git .hg/patches/patcha2 && echo 'git patch found!'
-cd ..
-
--- a/tests/test-mq-merge.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-adding a
-adding b
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-M b
-created new head
-a
-b
-applying rm_a
-now at: rm_a
-b
-popping rm_a
-popping .hg.patches.merge.marker
-patch queue now empty
-
-% init t2
-adding a
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% create the reference queue
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-% merge
-merging with queue at refqueue
-applying patcha
-patching file a
-Hunk #1 FAILED at 0
-1 out of 1 hunks FAILED -- saving rejects to file a.rej
-patch failed, unable to continue (try -v)
-patch failed, rejects left in working dir
-patch didn't work out, merging patcha
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-0 files updated, 2 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-applying patcha2
-now at: patcha2
-% check patcha is still a git patch
-# HG changeset patch
-# Parent d3873e73d99ef67873dac33fbcc66268d5d2b6f4
-
-diff --git a/a b/a
---- a/a
-+++ b/a
-@@ -1,1 +1,2 @@
--b
-+a
-+c
-diff --git a/a b/aa
-copy from a
-copy to aa
---- a/a
-+++ b/aa
-@@ -1,1 +1,1 @@
--b
-+a
-% check patcha2 is still a regular patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-merge.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,153 @@
+# Test issue 529 - mq aborts when merging patch deleting files
+
+  $ checkundo()
+  > {
+  >     if [ -f .hg/store/undo ]; then
+  >         echo ".hg/store/undo still exists"
+  >     fi
+  > }
+
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq =" >> $HGRCPATH
+  $ echo "[mq]" >> $HGRCPATH
+  $ echo "git = keep" >> $HGRCPATH
+
+Commit two dummy files in "init" changeset:
+
+  $ hg init t
+  $ cd t
+  $ echo a > a
+  $ echo b > b
+  $ hg ci -Am init
+  adding a
+  adding b
+  $ hg tag -l init
+
+Create a patch removing a:
+
+  $ hg qnew rm_a
+  $ hg rm a
+  $ hg qrefresh -m "rm a"
+
+Save the patch queue so we can merge it later:
+
+  $ hg qsave -c -e
+  copy .*/t/.hg/patches to .*/t/.hg/patches.1
+  $ checkundo
+
+Update b and commit in an "update" changeset:
+
+  $ hg up -C init
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo b >> b
+  $ hg st
+  M b
+  $ hg ci -m update
+  created new head
+
+# Here, qpush used to abort with :
+# The system cannot find the file specified => a
+  $ hg manifest
+  a
+  b
+
+  $ hg qpush -a -m
+  merging with queue at: .*/t/.hg/patches.1
+  applying rm_a
+  now at: rm_a
+
+  $ checkundo
+  $ hg manifest
+  b
+
+Ensure status is correct after merge:
+
+  $ hg qpop -a
+  popping rm_a
+  popping .hg.patches.merge.marker
+  patch queue now empty
+
+  $ cd ..
+
+Classic MQ merge sequence *with an explicit named queue*:
+
+  $ hg init t2
+  $ cd t2
+  $ echo '[diff]' > .hg/hgrc
+  $ echo 'nodates = 1' >> .hg/hgrc
+  $ echo a > a
+  $ hg ci -Am init
+  adding a
+  $ echo b > a
+  $ hg ci -m changea
+  $ hg up -C 0
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg cp a aa
+  $ echo c >> a
+  $ hg qnew --git -f -e patcha
+  $ echo d >> a
+  $ hg qnew -d '0 0' -f -e patcha2
+
+Create the reference queue:
+
+  $ hg qsave -c -e -n refqueue
+  copy .*/t2/.hg/patches to .*/t2/.hg/refqueue
+  $ hg up -C 1
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+Merge:
+
+  $ HGMERGE=internal:other hg qpush -a -m -n refqueue
+  merging with queue at: .*/t2/.hg/refqueue
+  applying patcha
+  patching file a
+  Hunk #1 FAILED at 0
+  1 out of 1 hunks FAILED -- saving rejects to file a.rej
+  patch failed, unable to continue (try -v)
+  patch failed, rejects left in working dir
+  patch didn't work out, merging patcha
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  applying patcha2
+  now at: patcha2
+
+Check patcha is still a git patch:
+
+  $ cat .hg/patches/patcha
+  # HG changeset patch
+  # Parent d3873e73d99ef67873dac33fbcc66268d5d2b6f4
+  
+  diff --git a/a b/a
+  --- a/a
+  +++ b/a
+  @@ -1,1 +1,2 @@
+  -b
+  +a
+  +c
+  diff --git a/a b/aa
+  copy from a
+  copy to aa
+  --- a/a
+  +++ b/aa
+  @@ -1,1 +1,1 @@
+  -b
+  +a
+
+Check patcha2 is still a regular patch:
+
+  $ cat .hg/patches/patcha2
+  # HG changeset patch
+  # Parent ........................................
+  # Date 0 0
+  
+  diff -r ............ -r ............ a
+  --- a/a
+  +++ b/a
+  @@ -1,2 +1,3 @@
+   a
+   c
+  +d
+
+  $ cd ..
+
--- a/tests/test-mq-missingfiles	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-#!/bin/sh
-
-# Test issue835:
-# qpush fails immediately when patching a missing file, but
-# remaining added files are still created empty which will
-# trick a future qrefresh.
-
-cat > writelines.py <<EOF
-import sys
-path = sys.argv[1]
-args = sys.argv[2:]
-assert (len(args) % 2) == 0
-
-f = file(path, 'wb')
-for i in xrange(len(args)/2):
-   count, s = args[2*i:2*i+2]
-   count = int(count)
-   s = s.decode('string_escape')
-   f.write(s*count)
-f.close()
-
-EOF
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-
-hg init normal
-cd normal
-python ../writelines.py b 10 'a\n'
-hg ci -Am addb
-echo a > a
-python ../writelines.py b 2 'b\n' 10 'a\n' 2 'c\n'
-echo c > c
-hg add a c
-hg qnew -f changeb
-hg qpop
-hg rm b
-hg ci -Am rmb
-echo % push patch with missing target
-hg qpush
-echo % display added files
-cat a
-cat c
-echo % display rejections
-cat b.rej
-cd ..
-
-
-echo "[diff]" >> $HGRCPATH
-echo "git=1" >> $HGRCPATH
-
-hg init git
-cd git
-python ../writelines.py b 1 '\x00'
-hg ci -Am addb
-echo a > a
-python ../writelines.py b 1 '\x01' 1 '\x00'
-echo c > c
-hg add a c
-hg qnew -f changeb
-hg qpop
-hg rm b
-hg ci -Am rmb
-echo % push git patch with missing target
-hg qpush 2>&1 | sed -e 's/b:.*/b: No such file or directory/'
-hg st
-echo % display added files
-cat a
-cat c
-echo % display rejections
-cat b.rej
-cd ..
-
-echo % test push creating directory during git copy or rename
-hg init missingdir
-cd missingdir
-echo a > a
-hg ci -Am adda
-mkdir d
-hg copy a d/a2
-hg mv a d/a
-hg qnew -g -f patch
-hg qpop
-hg qpush
-cd ..
--- a/tests/test-mq-missingfiles.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-adding b
-popping changeb
-patch queue now empty
-% push patch with missing target
-applying changeb
-unable to find 'b' for patching
-2 out of 2 hunks FAILED -- saving rejects to file b.rej
-patch failed, unable to continue (try -v)
-patch failed, rejects left in working dir
-errors during apply, please fix and refresh changeb
-% display added files
-a
-c
-% display rejections
---- b
-+++ b
-@@ -1,3 +1,5 @@
-+b
-+b
- a
- a
- a
-@@ -8,3 +10,5 @@
- a
- a
- a
-+c
-+c
-adding b
-popping changeb
-patch queue now empty
-% push git patch with missing target
-applying changeb
-unable to find 'b' for patching
-1 out of 1 hunks FAILED -- saving rejects to file b.rej
-patch failed, unable to continue (try -v)
-b: No such file or directory
-patch failed, rejects left in working dir
-errors during apply, please fix and refresh changeb
-? b.rej
-% display added files
-a
-c
-% display rejections
---- b
-+++ b
-GIT binary patch
-literal 2
-Jc${No0000400IC2
-
-% test push creating directory during git copy or rename
-adding a
-popping patch
-patch queue now empty
-applying patch
-now at: patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-missingfiles.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,150 @@
+
+# Test issue835:
+# qpush fails immediately when patching a missing file, but
+# remaining added files are still created empty which will
+# trick a future qrefresh.
+
+  $ cat > writelines.py <<EOF
+  > import sys
+  > path = sys.argv[1]
+  > args = sys.argv[2:]
+  > assert (len(args) % 2) == 0
+  > 
+  > f = file(path, 'wb')
+  > for i in xrange(len(args)/2):
+  >    count, s = args[2*i:2*i+2]
+  >    count = int(count)
+  >    s = s.decode('string_escape')
+  >    f.write(s*count)
+  > f.close()
+  > EOF
+
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+
+  $ hg init normal
+  $ cd normal
+  $ python ../writelines.py b 10 'a\n'
+  $ hg ci -Am addb
+  adding b
+  $ echo a > a
+  $ python ../writelines.py b 2 'b\n' 10 'a\n' 2 'c\n'
+  $ echo c > c
+  $ hg add a c
+  $ hg qnew -f changeb
+  $ hg qpop
+  popping changeb
+  patch queue now empty
+  $ hg rm b
+  $ hg ci -Am rmb
+
+Push patch with missing target:
+
+  $ hg qpush
+  applying changeb
+  unable to find 'b' for patching
+  2 out of 2 hunks FAILED -- saving rejects to file b.rej
+  patch failed, unable to continue (try -v)
+  patch failed, rejects left in working dir
+  errors during apply, please fix and refresh changeb
+  [2]
+
+Display added files:
+
+  $ cat a
+  a
+  $ cat c
+  c
+
+Display rejections:
+
+  $ cat b.rej
+  --- b
+  +++ b
+  @@ -1,3 +1,5 @@
+  +b
+  +b
+   a
+   a
+   a
+  @@ -8,3 +10,5 @@
+   a
+   a
+   a
+  +c
+  +c
+
+  $ cd ..
+
+
+  $ echo "[diff]" >> $HGRCPATH
+  $ echo "git=1" >> $HGRCPATH
+
+  $ hg init git
+  $ cd git
+  $ python ../writelines.py b 1 '\x00'
+  $ hg ci -Am addb
+  adding b
+  $ echo a > a
+  $ python ../writelines.py b 1 '\x01' 1 '\x00'
+  $ echo c > c
+  $ hg add a c
+  $ hg qnew -f changeb
+  $ hg qpop
+  popping changeb
+  patch queue now empty
+  $ hg rm b
+  $ hg ci -Am rmb
+
+Push git patch with missing target:
+
+  $ hg qpush
+  applying changeb
+  unable to find 'b' for patching
+  1 out of 1 hunks FAILED -- saving rejects to file b.rej
+  patch failed, unable to continue (try -v)
+  b: No such file or directory
+  patch failed, rejects left in working dir
+  errors during apply, please fix and refresh changeb
+  [2]
+  $ hg st
+  ? b.rej
+
+Display added files:
+
+  $ cat a
+  a
+  $ cat c
+  c
+
+Display rejections:
+
+  $ cat b.rej
+  --- b
+  +++ b
+  GIT binary patch
+  literal 2
+  Jc${No0000400IC2
+  
+  $ cd ..
+
+Test push creating directory during git copy or rename:
+
+  $ hg init missingdir
+  $ cd missingdir
+  $ echo a > a
+  $ hg ci -Am adda
+  adding a
+  $ mkdir d
+  $ hg copy a d/a2
+  $ hg mv a d/a
+  $ hg qnew -g -f patch
+  $ hg qpop
+  popping patch
+  patch queue now empty
+  $ hg qpush
+  applying patch
+  now at: patch
+
+  $ cd ..
+
--- a/tests/test-mq-pull-from-bundle	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-cat <<EOF >> $HGRCPATH
-[extensions]
-mq=
-[defaults]
-log = --template "{rev}: {desc}\\n"
-heads = --template "{rev}: {desc}\\n"
-incoming = --template "{rev}: {desc}\\n"
-EOF
-
-echo "====== Setup main"
-hg init base
-cd base
-echo "One" > one
-hg add
-hg ci -m "main: one added."
-echo "++" >> one
-hg ci -m "main: one updated."
-
-echo "====== Bundle main"
-hg bundle --base=null ../main.hg
-cd ..
-
-echo "====== Incoming to fresh repo"
-hg init fresh
-echo ">> hg -R fresh incoming main.hg"
-hg -R fresh incoming main.hg
-echo ">> hg -R fresh incoming bundle:fresh+main.hg"
-hg -R fresh incoming bundle:fresh+main.hg
-
-
-echo "====== Setup queue"
-cd base
-hg qinit -c
-hg qnew -m "patch: two added." two.patch
-echo two > two
-hg add
-hg qrefresh
-hg qcommit -m "queue: two.patch added."
-hg qpop -a
-
-echo "====== Bundle queue"
-hg -R .hg/patches bundle --base=null ../queue.hgq
-cd ..
-
-
-echo "====== Clone base"
-hg clone base copy
-cd copy
-hg qinit -c
-
-echo "====== Incoming queue bundle"
-echo ">> hg -R .hg/patches incoming ../queue.hgq"
-hg -R .hg/patches incoming ../queue.hgq
-
-echo "====== Pull queue bundle"
-echo ">> hg -R .hg/patches pull --update ../queue.hgq"
-hg -R .hg/patches pull --update ../queue.hgq
-echo ">> hg -R .hg/patches heads"
-hg -R .hg/patches heads
-echo ">> hg -R .hg/patches log"
-hg -R .hg/patches log
-echo ">> hg qseries"
-hg qseries
-cd ..
-
-
-echo "====== Clone base again"
-hg clone base copy2
-cd copy2
-hg qinit -c
-
-echo "====== Unbundle queue bundle"
-echo ">> hg -R .hg/patches unbundle --update ../queue.hgq"
-hg -R .hg/patches unbundle --update ../queue.hgq
-echo ">> hg -R .hg/patches heads"
-hg -R .hg/patches heads
-echo ">> hg -R .hg/patches log"
-hg -R .hg/patches log
-echo ">> hg qseries"
-hg qseries
-cd ..
--- a/tests/test-mq-pull-from-bundle.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-====== Setup main
-adding one
-====== Bundle main
-2 changesets found
-====== Incoming to fresh repo
->> hg -R fresh incoming main.hg
-comparing with main.hg
-0: main: one added.
-1: main: one updated.
->> hg -R fresh incoming bundle:fresh+main.hg
-comparing with bundle:fresh+main.hg
-0: main: one added.
-1: main: one updated.
-====== Setup queue
-adding two
-popping two.patch
-patch queue now empty
-====== Bundle queue
-1 changesets found
-====== Clone base
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-====== Incoming queue bundle
->> hg -R .hg/patches incoming ../queue.hgq
-comparing with ../queue.hgq
-0: queue: two.patch added.
-====== Pull queue bundle
->> hg -R .hg/patches pull --update ../queue.hgq
-pulling from ../queue.hgq
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 3 changes to 3 files
-merging series
-2 files updated, 1 files merged, 0 files removed, 0 files unresolved
->> hg -R .hg/patches heads
-0: queue: two.patch added.
->> hg -R .hg/patches log
-0: queue: two.patch added.
->> hg qseries
-two.patch
-====== Clone base again
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-====== Unbundle queue bundle
->> hg -R .hg/patches unbundle --update ../queue.hgq
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 3 changes to 3 files
-merging series
-2 files updated, 1 files merged, 0 files removed, 0 files unresolved
->> hg -R .hg/patches heads
-0: queue: two.patch added.
->> hg -R .hg/patches log
-0: queue: two.patch added.
->> hg qseries
-two.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-pull-from-bundle.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,131 @@
+  $ cat <<EOF >> $HGRCPATH
+  > [extensions]
+  > mq=
+  > [alias]
+  > tlog = log --template "{rev}: {desc}\\n"
+  > theads = heads --template "{rev}: {desc}\\n"
+  > tincoming = incoming --template "{rev}: {desc}\\n"
+  > EOF
+
+Setup main:
+
+  $ hg init base
+  $ cd base
+  $ echo "One" > one
+  $ hg add
+  adding one
+  $ hg ci -m "main: one added"
+  $ echo "++" >> one
+  $ hg ci -m "main: one updated"
+
+Bundle main:
+
+  $ hg bundle --base=null ../main.hg
+  2 changesets found
+
+  $ cd ..
+
+Incoming to fresh repo:
+
+  $ hg init fresh
+
+  $ hg -R fresh tincoming main.hg
+  comparing with main.hg
+  0: main: one added
+  1: main: one updated
+
+  $ hg -R fresh tincoming bundle:fresh+main.hg
+  comparing with bundle:fresh+main.hg
+  0: main: one added
+  1: main: one updated
+
+
+Setup queue:
+
+  $ cd base
+  $ hg qinit -c
+  $ hg qnew -m "patch: two added" two.patch
+  $ echo two > two
+  $ hg add
+  adding two
+  $ hg qrefresh
+  $ hg qcommit -m "queue: two.patch added"
+  $ hg qpop -a
+  popping two.patch
+  patch queue now empty
+
+Bundle queue:
+
+  $ hg -R .hg/patches bundle --base=null ../queue.hgq
+  1 changesets found
+
+  $ cd ..
+
+
+Clone base:
+
+  $ hg clone base copy
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cd copy
+  $ hg qinit -c
+
+Incoming queue bundle:
+
+  $ hg -R .hg/patches tincoming ../queue.hgq
+  comparing with ../queue.hgq
+  0: queue: two.patch added
+
+Pull queue bundle:
+
+  $ hg -R .hg/patches pull --update ../queue.hgq
+  pulling from ../queue.hgq
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 3 changes to 3 files
+  merging series
+  2 files updated, 1 files merged, 0 files removed, 0 files unresolved
+
+  $ hg -R .hg/patches theads
+  0: queue: two.patch added
+
+  $ hg -R .hg/patches tlog
+  0: queue: two.patch added
+
+  $ hg qseries
+  two.patch
+
+  $ cd ..
+
+
+Clone base again:
+
+  $ hg clone base copy2
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cd copy2
+  $ hg qinit -c
+
+Unbundle queue bundle:
+
+  $ hg -R .hg/patches unbundle --update ../queue.hgq
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 3 changes to 3 files
+  merging series
+  2 files updated, 1 files merged, 0 files removed, 0 files unresolved
+
+  $ hg -R .hg/patches theads
+  0: queue: two.patch added
+
+  $ hg -R .hg/patches tlog
+  0: queue: two.patch added
+
+  $ hg qseries
+  two.patch
+
+  $ cd ..
+
--- a/tests/test-mq-qdelete	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-
-hg init a
-cd a
-
-echo 'base' > base
-hg ci -Ambase -d '1 0'
-
-hg qnew -d '1 0' a
-hg qnew -d '1 0' b
-hg qnew -d '1 0' c
-
-hg qdel
-
-hg qdel c
-hg qpop
-hg qdel c
-hg qseries
-ls .hg/patches
-hg qpop
-hg qdel -k 1
-ls .hg/patches
-hg qdel -r a
-hg qapplied
-hg log --template '{rev} {desc}\n'
-
-hg qnew d
-hg qnew e
-hg qnew f
-
-hg qdel -r e
-hg qdel -r qbase:e
-hg qapplied
-hg log --template '{rev} {desc}\n'
-
-cd ..
-hg init b
-cd b
-
-echo 'base' > base
-hg ci -Ambase -d '1 0'
-
-hg qfinish
-hg qfinish -a
-
-hg qnew -d '1 0' a
-hg qnew -d '1 0' b
-hg qnew c # XXX fails to apply by /usr/bin/patch if we put a date
-
-hg qfinish 0
-hg qfinish b
-
-hg qpop
-hg qfinish -a c
-hg qpush
-
-hg qfinish qbase:b
-hg qapplied
-hg log --template '{rev} {desc}\n'
-
-hg qfinish -a c
-hg qapplied
-hg log --template '{rev} {desc}\n'
-ls .hg/patches
--- a/tests/test-mq-qdelete.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-adding base
-abort: qdelete requires at least one revision or patch name
-abort: cannot delete applied patch c
-popping c
-now at: b
-a
-b
-a
-b
-series
-status
-popping b
-now at: a
-a
-b
-series
-status
-patch a finalized without changeset message
-1 [mq]: a
-0 base
-abort: cannot delete revision 3 above applied patches
-patch d finalized without changeset message
-patch e finalized without changeset message
-f
-4 [mq]: f
-3 [mq]: e
-2 [mq]: d
-1 [mq]: a
-0 base
-adding base
-abort: no revisions specified
-no patches applied
-abort: revision 0 is not managed
-abort: cannot delete revision 2 above applied patches
-popping c
-now at: b
-abort: unknown revision 'c'!
-applying c
-patch c is empty
-now at: c
-patch a finalized without changeset message
-patch b finalized without changeset message
-c
-3 imported patch c
-2 [mq]: b
-1 [mq]: a
-0 base
-patch c finalized without changeset message
-3 imported patch c
-2 [mq]: b
-1 [mq]: a
-0 base
-series
-status
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qdelete.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,150 @@
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+
+  $ hg init a
+  $ cd a
+
+  $ echo 'base' > base
+  $ hg ci -Ambase -d '1 0'
+  adding base
+
+  $ hg qnew -d '1 0' a
+  $ hg qnew -d '1 0' b
+  $ hg qnew -d '1 0' c
+
+  $ hg qdel
+  abort: qdelete requires at least one revision or patch name
+  [255]
+
+  $ hg qdel c
+  abort: cannot delete applied patch c
+  [255]
+
+  $ hg qpop
+  popping c
+  now at: b
+
+  $ hg qdel c
+
+  $ hg qseries
+  a
+  b
+
+  $ ls .hg/patches
+  a
+  b
+  series
+  status
+
+  $ hg qpop
+  popping b
+  now at: a
+
+  $ hg qdel -k 1
+
+  $ ls .hg/patches
+  a
+  b
+  series
+  status
+
+  $ hg qdel -r a
+  patch a finalized without changeset message
+
+  $ hg qapplied
+
+  $ hg log --template '{rev} {desc}\n'
+  1 [mq]: a
+  0 base
+
+  $ hg qnew d
+  $ hg qnew e
+  $ hg qnew f
+
+  $ hg qdel -r e
+  abort: cannot delete revision 3 above applied patches
+  [255]
+
+  $ hg qdel -r qbase:e
+  patch d finalized without changeset message
+  patch e finalized without changeset message
+
+  $ hg qapplied
+  f
+
+  $ hg log --template '{rev} {desc}\n'
+  4 [mq]: f
+  3 [mq]: e
+  2 [mq]: d
+  1 [mq]: a
+  0 base
+
+  $ cd ..
+
+  $ hg init b
+  $ cd b
+
+  $ echo 'base' > base
+  $ hg ci -Ambase -d '1 0'
+  adding base
+
+  $ hg qfinish
+  abort: no revisions specified
+  [255]
+
+  $ hg qfinish -a
+  no patches applied
+
+  $ hg qnew -d '1 0' a
+  $ hg qnew -d '1 0' b
+  $ hg qnew c # XXX fails to apply by /usr/bin/patch if we put a date
+
+  $ hg qfinish 0
+  abort: revision 0 is not managed
+  [255]
+
+  $ hg qfinish b
+  abort: cannot delete revision 2 above applied patches
+  [255]
+
+  $ hg qpop
+  popping c
+  now at: b
+
+  $ hg qfinish -a c
+  abort: unknown revision 'c'!
+  [255]
+
+  $ hg qpush
+  applying c
+  patch c is empty
+  now at: c
+
+  $ hg qfinish qbase:b
+  patch a finalized without changeset message
+  patch b finalized without changeset message
+
+  $ hg qapplied
+  c
+
+  $ hg log --template '{rev} {desc}\n'
+  3 imported patch c
+  2 [mq]: b
+  1 [mq]: a
+  0 base
+
+  $ hg qfinish -a c
+  patch c finalized without changeset message
+
+  $ hg qapplied
+
+  $ hg log --template '{rev} {desc}\n'
+  3 imported patch c
+  2 [mq]: b
+  1 [mq]: a
+  0 base
+
+  $ ls .hg/patches
+  series
+  status
+
--- a/tests/test-mq-qdiff	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-echo "[mq]" >> $HGRCPATH
-echo "git=keep" >> $HGRCPATH
-
-echo % init
-hg init a
-cd a
-
-echo % commit
-echo 'base' > base
-hg ci -Ambase -d '1 0'
-
-echo % qnew mqbase
-hg qnew -mmqbase mqbase
-
-echo % qrefresh
-echo 'patched' > base
-hg qrefresh
-
-echo % qdiff
-hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qdiff dirname
-hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qdiff filename
-hg qdiff --nodates base
-
-echo % revert
-hg revert -a
-
-echo % qpop
-hg qpop
-
-echo % qdelete mqbase
-hg qdelete mqbase
-
-echo % commit 2
-printf '1\n2\n3\n4\nhello world\ngoodbye world\n7\n8\n9\n' > lines
-hg ci -Amlines -d '2 0'
-
-echo % qnew 2
-hg qnew -mmqbase2 mqbase2
-printf '\n\n1\n2\n3\n4\nhello  world\n     goodbye world\n7\n8\n9\n' > lines
-
-echo % qdiff -U 1
-hg qdiff --nodates -U 1
-
-echo % qdiff -b
-hg qdiff --nodates -b
-
-echo % qdiff -U 1 -B
-hg qdiff --nodates -U 1 -B
-
-echo % qdiff -w
-hg qdiff --nodates -w
-
-echo % qdiff --reverse
-hg qdiff --nodates --reverse
-
-echo % qdiff preserve existing git flag
-hg qrefresh --git
-echo a >> lines
-hg qdiff
-
-echo % qdiff --stat
-hg qdiff --stat
--- a/tests/test-mq-qdiff.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-% init
-% commit
-adding base
-% qnew mqbase
-% qrefresh
-% qdiff
-diff -r 67e992f2c4f3 base
---- a/base
-+++ b/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qdiff dirname
-diff -r 67e992f2c4f3 base
---- a/base
-+++ b/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qdiff filename
-diff -r 67e992f2c4f3 base
---- a/base
-+++ b/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% revert
-% qpop
-popping mqbase
-patch queue now empty
-% qdelete mqbase
-% commit 2
-adding lines
-% qnew 2
-% qdiff -U 1
-diff -r 35fb829491c1 lines
---- a/lines
-+++ b/lines
-@@ -1,1 +1,3 @@
-+
-+
- 1
-@@ -4,4 +6,4 @@
- 4
--hello world
--goodbye world
-+hello  world
-+     goodbye world
- 7
-% qdiff -b
-diff -r 35fb829491c1 lines
---- a/lines
-+++ b/lines
-@@ -1,9 +1,11 @@
-+
-+
- 1
- 2
- 3
- 4
- hello world
--goodbye world
-+     goodbye world
- 7
- 8
- 9
-% qdiff -U 1 -B
-diff -r 35fb829491c1 lines
---- a/lines
-+++ b/lines
-@@ -4,4 +6,4 @@
- 4
--hello world
--goodbye world
-+hello  world
-+     goodbye world
- 7
-% qdiff -w
-diff -r 35fb829491c1 lines
---- a/lines
-+++ b/lines
-@@ -1,3 +1,5 @@
-+
-+
- 1
- 2
- 3
-% qdiff --reverse
-diff -r 35fb829491c1 lines
---- a/lines
-+++ b/lines
-@@ -1,11 +1,9 @@
--
--
- 1
- 2
- 3
- 4
--hello  world
--     goodbye world
-+hello world
-+goodbye world
- 7
- 8
- 9
-% qdiff preserve existing git flag
-diff --git a/lines b/lines
---- a/lines
-+++ b/lines
-@@ -1,9 +1,12 @@
-+
-+
- 1
- 2
- 3
- 4
--hello world
--goodbye world
-+hello  world
-+     goodbye world
- 7
- 8
- 9
-+a
-% qdiff --stat
- lines |  7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qdiff.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,166 @@
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+  $ echo "[mq]" >> $HGRCPATH
+  $ echo "git=keep" >> $HGRCPATH
+
+  $ hg init a
+  $ cd a
+
+  $ echo 'base' > base
+  $ hg ci -Ambase
+  adding base
+
+  $ hg qnew -mmqbase mqbase
+
+  $ echo 'patched' > base
+  $ hg qrefresh
+
+qdiff:
+
+  $ hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/"
+  diff -r d20a80d4def3 base
+  --- a/base	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+qdiff dirname:
+
+  $ hg qdiff --nodates .
+  diff -r d20a80d4def3 base
+  --- a/base
+  +++ b/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+qdiff filename:
+
+  $ hg qdiff --nodates base
+  diff -r d20a80d4def3 base
+  --- a/base
+  +++ b/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ hg revert -a
+
+  $ hg qpop
+  popping mqbase
+  patch queue now empty
+
+  $ hg qdelete mqbase
+
+  $ printf '1\n2\n3\n4\nhello world\ngoodbye world\n7\n8\n9\n' > lines
+  $ hg ci -Amlines -d '2 0'
+  adding lines
+
+  $ hg qnew -mmqbase2 mqbase2
+  $ printf '\n\n1\n2\n3\n4\nhello  world\n     goodbye world\n7\n8\n9\n' > lines
+
+  $ hg qdiff --nodates -U 1
+  diff -r b0c220e1cf43 lines
+  --- a/lines
+  +++ b/lines
+  @@ -1,1 +1,3 @@
+  +
+  +
+   1
+  @@ -4,4 +6,4 @@
+   4
+  -hello world
+  -goodbye world
+  +hello  world
+  +     goodbye world
+   7
+
+  $ hg qdiff --nodates -b
+  diff -r b0c220e1cf43 lines
+  --- a/lines
+  +++ b/lines
+  @@ -1,9 +1,11 @@
+  +
+  +
+   1
+   2
+   3
+   4
+   hello world
+  -goodbye world
+  +     goodbye world
+   7
+   8
+   9
+
+  $ hg qdiff --nodates -U 1 -B
+  diff -r b0c220e1cf43 lines
+  --- a/lines
+  +++ b/lines
+  @@ -4,4 +6,4 @@
+   4
+  -hello world
+  -goodbye world
+  +hello  world
+  +     goodbye world
+   7
+
+  $ hg qdiff --nodates -w
+  diff -r b0c220e1cf43 lines
+  --- a/lines
+  +++ b/lines
+  @@ -1,3 +1,5 @@
+  +
+  +
+   1
+   2
+   3
+
+  $ hg qdiff --nodates --reverse
+  diff -r b0c220e1cf43 lines
+  --- a/lines
+  +++ b/lines
+  @@ -1,11 +1,9 @@
+  -
+  -
+   1
+   2
+   3
+   4
+  -hello  world
+  -     goodbye world
+  +hello world
+  +goodbye world
+   7
+   8
+   9
+
+qdiff preserve existing git flag:
+
+  $ hg qrefresh --git
+  $ echo a >> lines
+  $ hg qdiff
+  diff --git a/lines b/lines
+  --- a/lines
+  +++ b/lines
+  @@ -1,9 +1,12 @@
+  +
+  +
+   1
+   2
+   3
+   4
+  -hello world
+  -goodbye world
+  +hello  world
+  +     goodbye world
+   7
+   8
+   9
+  +a
+
+  $ hg qdiff --stat
+   lines |  7 +++++--
+   1 files changed, 5 insertions(+), 2 deletions(-)
+
--- a/tests/test-mq-qfold	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-echo "[mq]" >> $HGRCPATH
-echo "git=keep" >> $HGRCPATH
-
-filterdiff()
-{
-    grep -v diff | \
-	sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-	-e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-}
-
-filterpatch()
-{
-    sed -e "s/\(# Parent \).*/\1/"
-}
-
-echo '% init'
-hg init repo
-cd repo
-echo a > a
-hg ci -Am adda
-echo a >> a
-hg qnew -f p1
-echo b >> a
-hg qnew -f p2
-echo c >> a
-hg qnew -f p3
-echo '% fold in the middle of the queue'
-hg qpop p1
-hg qdiff | filterdiff
-hg qfold p2
-grep git .hg/patches/p1 && echo 'git patch found!'
-hg qser
-hg qdiff | filterdiff
-echo '% fold with local changes'
-echo d >> a
-hg qfold p3
-hg diff -c . | filterdiff
-hg revert -a --no-backup
-
-echo '% fold git patch into a regular patch, expect git patch'
-echo a >> a
-hg qnew -f regular
-hg cp a aa
-hg qnew --git -f git
-hg qpop
-hg qfold git
-cat .hg/patches/regular | filterpatch
-hg qpop
-hg qdel regular
-
-echo '% fold regular patch into a git patch, expect git patch'
-hg cp a aa
-hg qnew --git -f git
-echo b >> aa
-hg qnew -f regular
-hg qpop
-hg qfold regular
-cat .hg/patches/git | filterpatch
-
-cd ..
-
-
--- a/tests/test-mq-qfold.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-% init
-adding a
-% fold in the middle of the queue
-popping p3
-popping p2
-now at: p1
---- a/a
-+++ b/a
-@@ -1,1 +1,2 @@
- a
-+a
-p1
-p3
---- a/a
-+++ b/a
-@@ -1,1 +1,3 @@
- a
-+a
-+b
-% fold with local changes
-abort: local changes found, refresh first
---- a/a
-+++ b/a
-@@ -1,1 +1,3 @@
- a
-+a
-+b
-reverting a
-% fold git patch into a regular patch, expect git patch
-popping git
-now at: regular
-# HG changeset patch
-# Parent 
-
-diff --git a/a b/a
---- a/a
-+++ b/a
-@@ -1,3 +1,4 @@
- a
- a
- b
-+a
-diff --git a/a b/aa
-copy from a
-copy to aa
---- a/a
-+++ b/aa
-@@ -1,3 +1,4 @@
- a
- a
- b
-+a
-popping regular
-now at: p1
-% fold regular patch into a git patch, expect git patch
-popping regular
-now at: git
-# HG changeset patch
-# Parent 
-
-diff --git a/a b/aa
-copy from a
-copy to aa
---- a/a
-+++ b/aa
-@@ -1,3 +1,4 @@
- a
- a
- b
-+b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qfold.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,144 @@
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+  $ echo "[mq]" >> $HGRCPATH
+  $ echo "git=keep" >> $HGRCPATH
+  $ echo "[diff]" >> $HGRCPATH
+  $ echo "nodates=1" >> $HGRCPATH
+
+init:
+
+  $ hg init repo
+  $ cd repo
+  $ echo a > a
+  $ hg ci -Am adda
+  adding a
+  $ echo a >> a
+  $ hg qnew -f p1
+  $ echo b >> a
+  $ hg qnew -f p2
+  $ echo c >> a
+  $ hg qnew -f p3
+
+Fold in the middle of the queue:
+
+  $ hg qpop p1
+  popping p3
+  popping p2
+  now at: p1
+
+  $ hg qdiff
+  diff -r 07f494440405 a
+  --- a/a
+  +++ b/a
+  @@ -1,1 +1,2 @@
+   a
+  +a
+
+  $ hg qfold p2
+  $ grep git .hg/patches/p1 && echo 'git patch found!'
+  [1]
+
+  $ hg qser
+  p1
+  p3
+
+  $ hg qdiff
+  diff -r 07f494440405 a
+  --- a/a
+  +++ b/a
+  @@ -1,1 +1,3 @@
+   a
+  +a
+  +b
+
+Fold with local changes:
+
+  $ echo d >> a
+  $ hg qfold p3
+  abort: local changes found, refresh first
+  [255]
+
+  $ hg diff -c .
+  diff -r 07f494440405 -r ............ a
+  --- a/a
+  +++ b/a
+  @@ -1,1 +1,3 @@
+   a
+  +a
+  +b
+
+  $ hg revert -a --no-backup
+  reverting a
+
+Fold git patch into a regular patch, expect git patch:
+
+  $ echo a >> a
+  $ hg qnew -f regular
+  $ hg cp a aa
+  $ hg qnew --git -f git
+
+  $ hg qpop
+  popping git
+  now at: regular
+
+  $ hg qfold git
+
+  $ cat .hg/patches/regular
+  # HG changeset patch
+  # Parent ........................................
+  
+  diff --git a/a b/a
+  --- a/a
+  +++ b/a
+  @@ -1,3 +1,4 @@
+   a
+   a
+   b
+  +a
+  diff --git a/a b/aa
+  copy from a
+  copy to aa
+  --- a/a
+  +++ b/aa
+  @@ -1,3 +1,4 @@
+   a
+   a
+   b
+  +a
+
+  $ hg qpop
+  popping regular
+  now at: p1
+
+  $ hg qdel regular
+
+Fold regular patch into a git patch, expect git patch:
+
+  $ hg cp a aa
+  $ hg qnew --git -f git
+  $ echo b >> aa
+  $ hg qnew -f regular
+
+  $ hg qpop
+  popping regular
+  now at: git
+
+  $ hg qfold regular
+
+  $ cat .hg/patches/git
+  # HG changeset patch
+  # Parent ........................................
+  
+  diff --git a/a b/aa
+  copy from a
+  copy to aa
+  --- a/a
+  +++ b/aa
+  @@ -1,3 +1,4 @@
+   a
+   a
+   b
+  +b
+
+  $ cd ..
+
--- a/tests/test-mq-qgoto	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-
-hg init a
-cd a
-echo a > a
-hg ci -Ama
-
-hg qnew a.patch
-echo a >> a
-hg qrefresh
-
-hg qnew b.patch
-echo b > b
-hg add b
-hg qrefresh
-
-hg qnew c.patch
-echo c > c
-hg add c
-hg qrefresh
-
-hg qgoto a.patch
-hg qgoto c.patch
-hg qgoto b.patch
-
-echo
-echo % Using index
-hg qgoto 0
-hg qgoto 2
-
-echo
-echo % No warnings when using index
-hg qnew bug314159
-echo d >> c
-hg qrefresh
-hg qnew bug141421
-echo e >> c
-hg qrefresh
-hg qgoto 1
-hg qgoto 3
-
-echo
-echo % Detect ambiguous non-index
-hg qgoto 14
-
-exit 0
--- a/tests/test-mq-qgoto.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-adding a
-popping c.patch
-popping b.patch
-now at: a.patch
-applying b.patch
-applying c.patch
-now at: c.patch
-popping c.patch
-now at: b.patch
-
-% Using index
-popping b.patch
-now at: a.patch
-applying b.patch
-applying c.patch
-now at: c.patch
-
-% No warnings when using index
-popping bug141421
-popping bug314159
-popping c.patch
-now at: b.patch
-applying c.patch
-applying bug314159
-now at: bug314159
-
-% Detect ambiguous non-index
-patch name "14" is ambiguous:
-  bug314159
-  bug141421
-abort: patch 14 not in series
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qgoto.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,77 @@
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+
+  $ hg init a
+  $ cd a
+  $ echo a > a
+  $ hg ci -Ama
+  adding a
+
+  $ hg qnew a.patch
+  $ echo a >> a
+  $ hg qrefresh
+
+  $ hg qnew b.patch
+  $ echo b > b
+  $ hg add b
+  $ hg qrefresh
+
+  $ hg qnew c.patch
+  $ echo c > c
+  $ hg add c
+  $ hg qrefresh
+
+  $ hg qgoto a.patch
+  popping c.patch
+  popping b.patch
+  now at: a.patch
+
+  $ hg qgoto c.patch
+  applying b.patch
+  applying c.patch
+  now at: c.patch
+
+  $ hg qgoto b.patch
+  popping c.patch
+  now at: b.patch
+
+Using index:
+
+  $ hg qgoto 0
+  popping b.patch
+  now at: a.patch
+
+  $ hg qgoto 2
+  applying b.patch
+  applying c.patch
+  now at: c.patch
+
+No warnings when using index:
+
+  $ hg qnew bug314159
+  $ echo d >> c
+  $ hg qrefresh
+  $ hg qnew bug141421
+  $ echo e >> c
+  $ hg qrefresh
+
+  $ hg qgoto 1
+  popping bug141421
+  popping bug314159
+  popping c.patch
+  now at: b.patch
+
+  $ hg qgoto 3
+  applying c.patch
+  applying bug314159
+  now at: bug314159
+
+Detect ambiguous non-index:
+
+  $ hg qgoto 14
+  patch name "14" is ambiguous:
+    bug314159
+    bug141421
+  abort: patch 14 not in series
+  [255]
+
--- a/tests/test-mq-qqueue	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-
-hg init foo
-cd foo
-echo a > a
-hg ci -qAm a
-
-echo %% default queue
-hg qqueue
-
-echo b > a
-hg qnew -fgDU somestuff
-
-echo %% applied patches in default queue
-hg qap
-
-echo %% try to change patch \(create succeeds, switch fails\)
-hg qqueue foo --create
-hg qqueue
-
-echo %% empty default queue
-hg qpop
-
-echo %% switch queue
-hg qqueue foo
-hg qqueue
-
-echo %% list queues, quiet
-hg qqueue --quiet
-
-echo %% fail creating queue with already existing name
-hg qqueue --create foo
-hg qqueue
-
-echo %% create new queue for rename
-hg qqueue --create bar
-hg qqueue
-
-echo %% rename queue, same name
-hg qqueue --rename bar
-
-echo %% rename queue to existing
-hg qqueue --rename foo
-
-echo %% rename queue
-hg qqueue --rename buz
-hg qqueue
-
-echo %% switch back to previous queue
-hg qqueue foo
-hg qqueue --delete buz
-hg qqueue
-
-echo %% create queue for purge
-hg qqueue --create purge-me
-hg qqueue
-
-echo %% create patch for purge
-hg qnew patch-purge-me
-ls -1d .hg/patches-purge-me 2>/dev/null || true
-hg qpop -a
-
-echo %% purge queue
-hg qqueue foo
-hg qqueue --purge purge-me
-hg qqueue
-ls -1d .hg/patches-purge-me 2>/dev/null || true
-
-echo %% unapplied patches
-hg qun
-echo c > a
-hg qnew -fgDU otherstuff
-
-echo %% fail switching back
-hg qqueue patches
-
-echo %% fail deleting current
-hg qqueue foo --delete
-
-echo %% switch back and delete foo
-hg qpop -a
-hg qqueue patches
-hg qqueue foo --delete
-hg qqueue
-
-echo %% tricky cases
-hg qqueue store --create
-hg qnew journal
-hg qqueue
-hg qpop -a
-hg qqueue patches
-hg qun
-
-echo %% invalid names
-hg qqueue test/../../bar --create
-hg qqueue . --create
-
-cd ..
--- a/tests/test-mq-qqueue.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-%% default queue
-patches (active)
-%% applied patches in default queue
-somestuff
-%% try to change patch (create succeeds, switch fails)
-abort: patches applied - cannot set new queue active
-foo
-patches (active)
-%% empty default queue
-popping somestuff
-patch queue now empty
-%% switch queue
-foo (active)
-patches
-%% list queues, quiet
-foo
-patches
-%% fail creating queue with already existing name
-abort: queue "foo" already exists
-foo (active)
-patches
-%% create new queue for rename
-bar (active)
-foo
-patches
-%% rename queue, same name
-abort: can't rename "bar" to its current name
-%% rename queue to existing
-abort: queue "foo" already exists
-%% rename queue
-buz (active)
-foo
-patches
-%% switch back to previous queue
-foo (active)
-patches
-%% create queue for purge
-foo
-patches
-purge-me (active)
-%% create patch for purge
-.hg/patches-purge-me
-popping patch-purge-me
-patch queue now empty
-%% purge queue
-foo (active)
-patches
-%% unapplied patches
-%% fail switching back
-abort: patches applied - cannot set new queue active
-%% fail deleting current
-abort: cannot delete currently active queue
-%% switch back and delete foo
-popping otherstuff
-patch queue now empty
-patches (active)
-%% tricky cases
-patches
-store (active)
-popping journal
-patch queue now empty
-somestuff
-%% invalid names
-abort: invalid queue name, may not contain the characters ":\/."
-abort: invalid queue name, may not contain the characters ":\/."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qqueue.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,188 @@
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+
+  $ hg init foo
+  $ cd foo
+  $ echo a > a
+  $ hg ci -qAm a
+
+Default queue:
+
+  $ hg qqueue
+  patches (active)
+
+  $ echo b > a
+  $ hg qnew -fgDU somestuff
+
+Applied patches in default queue:
+
+  $ hg qap
+  somestuff
+
+Try to change patch (create succeeds, switch fails):
+
+  $ hg qqueue foo --create
+  abort: patches applied - cannot set new queue active
+  [255]
+
+  $ hg qqueue
+  foo
+  patches (active)
+
+Empty default queue:
+
+  $ hg qpop
+  popping somestuff
+  patch queue now empty
+
+Switch queue:
+
+  $ hg qqueue foo
+  $ hg qqueue
+  foo (active)
+  patches
+
+List queues, quiet:
+
+  $ hg qqueue --quiet
+  foo
+  patches
+
+Fail creating queue with already existing name:
+
+  $ hg qqueue --create foo
+  abort: queue "foo" already exists
+  [255]
+
+  $ hg qqueue
+  foo (active)
+  patches
+
+Create new queue for rename:
+
+  $ hg qqueue --create bar
+
+  $ hg qqueue
+  bar (active)
+  foo
+  patches
+
+Rename queue, same name:
+
+  $ hg qqueue --rename bar
+  abort: can't rename "bar" to its current name
+  [255]
+
+Rename queue to existing:
+
+  $ hg qqueue --rename foo
+  abort: queue "foo" already exists
+  [255]
+
+Rename queue:
+
+  $ hg qqueue --rename buz
+
+  $ hg qqueue
+  buz (active)
+  foo
+  patches
+
+Switch back to previous queue:
+
+  $ hg qqueue foo
+  $ hg qqueue --delete buz
+
+  $ hg qqueue
+  foo (active)
+  patches
+
+Create queue for purge:
+
+  $ hg qqueue --create purge-me
+
+  $ hg qqueue
+  foo
+  patches
+  purge-me (active)
+
+Create patch for purge:
+
+  $ hg qnew patch-purge-me
+
+  $ ls -1d .hg/patches-purge-me 2>/dev/null || true
+  .hg/patches-purge-me
+
+  $ hg qpop -a
+  popping patch-purge-me
+  patch queue now empty
+
+Purge queue:
+
+  $ hg qqueue foo
+  $ hg qqueue --purge purge-me
+
+  $ hg qqueue
+  foo (active)
+  patches
+
+  $ ls -1d .hg/patches-purge-me 2>/dev/null || true
+
+Unapplied patches:
+
+  $ hg qun
+  $ echo c > a
+  $ hg qnew -fgDU otherstuff
+
+Fail switching back:
+
+  $ hg qqueue patches
+  abort: patches applied - cannot set new queue active
+  [255]
+
+Fail deleting current:
+
+  $ hg qqueue foo --delete
+  abort: cannot delete currently active queue
+  [255]
+
+Switch back and delete foo:
+
+  $ hg qpop -a
+  popping otherstuff
+  patch queue now empty
+
+  $ hg qqueue patches
+  $ hg qqueue foo --delete
+  $ hg qqueue
+  patches (active)
+
+Tricky cases:
+
+  $ hg qqueue store --create
+  $ hg qnew journal
+
+  $ hg qqueue
+  patches
+  store (active)
+
+  $ hg qpop -a
+  popping journal
+  patch queue now empty
+
+  $ hg qqueue patches
+  $ hg qun
+  somestuff
+
+Invalid names:
+
+  $ hg qqueue test/../../bar --create
+  abort: invalid queue name, may not contain the characters ":\/."
+  [255]
+
+  $ hg qqueue . --create
+  abort: invalid queue name, may not contain the characters ":\/."
+  [255]
+
+  $ cd ..
+
--- a/tests/test-mq-qrefresh	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,198 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-
-catpatch() {
-    cat $1 | sed -e "s/^\(# Parent \).*/\1/"
-}
-
-echo % init
-hg init a
-cd a
-
-echo % commit
-mkdir 1 2
-echo 'base' > 1/base
-echo 'base' > 2/base
-hg ci -Ambase -d '1 0'
-
-echo % qnew mqbase
-hg qnew -mmqbase mqbase
-
-echo % qrefresh
-echo 'patched' > 1/base
-echo 'patched' > 2/base
-hg qrefresh
-
-echo % qdiff
-hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qdiff dirname
-hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % patch file contents
-catpatch .hg/patches/mqbase | \
-sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qrefresh 1
-echo 'patched again' > base
-hg qrefresh 1
-
-echo % qdiff
-hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qdiff dirname
-hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % patch file contents
-catpatch .hg/patches/mqbase | \
-sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qrefresh . in subdir
-( cd 1 ; hg qrefresh . )
-
-echo % qdiff
-hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qdiff dirname
-hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % patch file contents
-catpatch .hg/patches/mqbase | \
-sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qrefresh in hg-root again
-hg qrefresh
-
-echo % qdiff
-hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % qdiff dirname
-hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % patch file contents
-catpatch .hg/patches/mqbase | \
-sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo
-echo % qrefresh --short tests:
-echo 'orphan' > orphanchild
-hg add orphanchild
-
-echo % - add 1/base and 2/base one by one
-hg qrefresh nonexistingfilename # clear patch
-hg qrefresh --short 1/base
-hg qrefresh --short 2/base
-
-echo % -- qdiff output
-hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-
-echo % -- patch file content
-catpatch .hg/patches/mqbase | \
-sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
-hg st
-
-echo % -- diff shows what is not in patch
-hg diff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-              -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" \
-              -e "s/^\(diff\).*/\1/"
-echo % - before starting exclusive tests
-sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
-echo % - exclude 2/base
-hg qref -s -X 2/base
-sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
-echo % -- status shows 2/base as dirty
-hg st
-echo % - remove 1/base and add 2/base again but not orphanchild
-hg qref -s -X orphanchild -X 1/base 2/base orphanchild
-sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
-echo % - add 1/base with include filter - and thus remove 2/base from patch
-hg qref -s -I 1/ o* */*
-sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
-echo
-cd ..
-
-# Test qrefresh --git losing copy metadata
-echo % create test repo
-hg init repo
-cd repo
-echo "[diff]" >> .hg/hgrc
-echo "git=True" >> .hg/hgrc
-echo a > a
-hg ci -Am adda
-hg copy a ab
-echo b >> ab
-hg copy a ac
-echo c >> ac
-echo % capture changes
-hg qnew -f p1
-hg qdiff
-echo % refresh and check changes again
-hg qref
-hg qdiff
-cd ..
-
-# Test issue 1441: qrefresh confused after hg rename
-echo % issue1441 without git patches
-hg init repo-1441
-cd repo-1441
-echo a > a
-hg add a
-hg qnew -f p
-hg mv a b
-hg qrefresh
-hg qdiff --nodates
-cd ..
-
-echo '% issue2025: qrefresh does not honor filtering options when tip != qtip'
-hg init repo-2025
-cd repo-2025
-echo a > a
-echo b > b
-hg ci -qAm addab
-echo a >> a
-echo b >> b
-hg qnew -f patch
-hg up -qC 0
-echo c > c
-hg ci -qAm addc
-hg up -qC 1
-echo '% refresh with tip != qtip'
-hg --config diff.nodates=1 qrefresh -I b 2>&1 \
-    | sed 's/saving bundle.*/saving bundle.../g'
-echo '% status after refresh'
-hg st
-echo '% b after refresh'
-cat b
-echo '% patch file after refresh'
-catpatch .hg/patches/patch
-cd ..
-
-
-echo % issue1441 with git patches
-hg init repo-1441-git
-cd repo-1441-git
-echo "[diff]" >> .hg/hgrc
-echo "git=True" >> .hg/hgrc
-echo a > a
-hg add a
-hg qnew -f p
-hg mv a b
-hg qrefresh
-hg qdiff --nodates
-cd ..
--- a/tests/test-mq-qrefresh.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,295 +0,0 @@
-% init
-% commit
-adding 1/base
-adding 2/base
-% qnew mqbase
-% qrefresh
-% qdiff
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qdiff dirname
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% patch file contents
-# HG changeset patch
-# Parent 
-mqbase
-
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qrefresh 1
-% qdiff
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qdiff dirname
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% patch file contents
-# HG changeset patch
-# Parent 
-mqbase
-
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qrefresh . in subdir
-% qdiff
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qdiff dirname
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% patch file contents
-# HG changeset patch
-# Parent 
-mqbase
-
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qrefresh in hg-root again
-% qdiff
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% qdiff dirname
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-% patch file contents
-# HG changeset patch
-# Parent 
-mqbase
-
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-
-% qrefresh --short tests:
-% - add 1/base and 2/base one by one
-% -- qdiff output
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf orphanchild
---- /dev/null
-+++ b/orphanchild
-@@ -0,0 +1,1 @@
-+orphan
-% -- patch file content
-# HG changeset patch
-# Parent 
-mqbase
-
-diff -r b55ecdccb5cf 1/base
---- a/1/base
-+++ b/1/base
-@@ -1,1 +1,1 @@
--base
-+patched
-diff -r b55ecdccb5cf 2/base
---- a/2/base
-+++ b/2/base
-@@ -1,1 +1,1 @@
--base
-+patched
-A orphanchild
-? base
-% -- diff shows what is not in patch
-diff
---- /dev/null
-+++ b/orphanchild
-@@ -0,0 +1,1 @@
-+orphan
-% - before starting exclusive tests
-1/base
-2/base
-% - exclude 2/base
-1/base
-% -- status shows 2/base as dirty
-M 2/base
-A orphanchild
-? base
-% - remove 1/base and add 2/base again but not orphanchild
-2/base
-% - add 1/base with include filter - and thus remove 2/base from patch
-1/base
-
-% create test repo
-adding a
-% capture changes
-diff --git a/a b/ab
-copy from a
-copy to ab
---- a/a
-+++ b/ab
-@@ -1,1 +1,2 @@
- a
-+b
-diff --git a/a b/ac
-copy from a
-copy to ac
---- a/a
-+++ b/ac
-@@ -1,1 +1,2 @@
- a
-+c
-% refresh and check changes again
-diff --git a/a b/ab
-copy from a
-copy to ab
---- a/a
-+++ b/ab
-@@ -1,1 +1,2 @@
- a
-+b
-diff --git a/a b/ac
-copy from a
-copy to ac
---- a/a
-+++ b/ac
-@@ -1,1 +1,2 @@
- a
-+c
-% issue1441 without git patches
-diff -r 000000000000 b
---- /dev/null
-+++ b/b
-@@ -0,0 +1,1 @@
-+a
-% issue2025: qrefresh does not honor filtering options when tip != qtip
-% refresh with tip != qtip
-% status after refresh
-M a
-% b after refresh
-b
-b
-% patch file after refresh
-# HG changeset patch
-# Parent 
-
-diff -r 1a60229be7ac b
---- a/b
-+++ b/b
-@@ -1,1 +1,2 @@
- b
-+b
-% issue1441 with git patches
-diff --git a/b b/b
-new file mode 100644
---- /dev/null
-+++ b/b
-@@ -0,0 +1,1 @@
-+a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qrefresh.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,488 @@
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+  $ echo "[diff]" >> $HGRCPATH
+  $ echo "nodates=1" >> $HGRCPATH
+
+  $ hg init a
+  $ cd a
+
+  $ mkdir 1 2
+  $ echo 'base' > 1/base
+  $ echo 'base' > 2/base
+  $ hg ci -Ambase
+  adding 1/base
+  adding 2/base
+
+  $ hg qnew -mmqbase mqbase
+
+  $ echo 'patched' > 1/base
+  $ echo 'patched' > 2/base
+  $ hg qrefresh
+
+  $ hg qdiff
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ hg qdiff .
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ echo 'patched again' > base
+  $ hg qrefresh 1
+
+  $ hg qdiff
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ hg qdiff .
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+qrefresh . in subdir:
+
+  $ ( cd 1 ; hg qrefresh . )
+
+  $ hg qdiff
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ hg qdiff .
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+qrefresh in hg-root again:
+
+  $ hg qrefresh
+
+  $ hg qdiff
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ hg qdiff .
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+
+qrefresh --short tests:
+
+  $ echo 'orphan' > orphanchild
+  $ hg add orphanchild
+  $ hg qrefresh nonexistingfilename # clear patch
+  $ hg qrefresh --short 1/base
+  $ hg qrefresh --short 2/base
+
+  $ hg qdiff
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 orphanchild
+  --- /dev/null
+  +++ b/orphanchild
+  @@ -0,0 +1,1 @@
+  +orphan
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ hg st
+  A orphanchild
+  ? base
+
+diff shows what is not in patch:
+
+  $ hg diff
+  diff -r ............ orphanchild
+  --- /dev/null
+  +++ b/orphanchild
+  @@ -0,0 +1,1 @@
+  +orphan
+
+Before starting exclusive tests:
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+Exclude 2/base:
+
+  $ hg qref -s -X 2/base
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+status shows 2/base as dirty:
+
+  $ hg status
+  M 2/base
+  A orphanchild
+  ? base
+
+Remove 1/base and add 2/base again but not orphanchild:
+
+  $ hg qref -s -X orphanchild -X 1/base 2/base orphanchild
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 2/base
+  --- a/2/base
+  +++ b/2/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+Add 1/base with include filter - and thus remove 2/base from patch:
+
+  $ hg qref -s -I 1/ o* */*
+
+  $ cat .hg/patches/mqbase
+  # HG changeset patch
+  # Parent e7af5904b465cd1f4f3cf6b26fe14e8db6f63eaa
+  mqbase
+  
+  diff -r e7af5904b465 1/base
+  --- a/1/base
+  +++ b/1/base
+  @@ -1,1 +1,1 @@
+  -base
+  +patched
+
+  $ cd ..
+
+
+Test qrefresh --git losing copy metadata:
+
+  $ hg init repo
+  $ cd repo
+
+  $ echo "[diff]" >> .hg/hgrc
+  $ echo "git=True" >> .hg/hgrc
+  $ echo a > a
+
+  $ hg ci -Am adda
+  adding a
+  $ hg copy a ab
+  $ echo b >> ab
+  $ hg copy a ac
+  $ echo c >> ac
+
+Capture changes:
+
+  $ hg qnew -f p1
+
+  $ hg qdiff
+  diff --git a/a b/ab
+  copy from a
+  copy to ab
+  --- a/a
+  +++ b/ab
+  @@ -1,1 +1,2 @@
+   a
+  +b
+  diff --git a/a b/ac
+  copy from a
+  copy to ac
+  --- a/a
+  +++ b/ac
+  @@ -1,1 +1,2 @@
+   a
+  +c
+
+Refresh and check changes again:
+
+  $ hg qrefresh
+
+  $ hg qdiff
+  diff --git a/a b/ab
+  copy from a
+  copy to ab
+  --- a/a
+  +++ b/ab
+  @@ -1,1 +1,2 @@
+   a
+  +b
+  diff --git a/a b/ac
+  copy from a
+  copy to ac
+  --- a/a
+  +++ b/ac
+  @@ -1,1 +1,2 @@
+   a
+  +c
+
+  $ cd ..
+
+
+Test issue 1441: qrefresh confused after hg rename:
+
+  $ hg init repo-1441
+  $ cd repo-1441
+  $ echo a > a
+  $ hg add a
+  $ hg qnew -f p
+  $ hg mv a b
+  $ hg qrefresh
+
+  $ hg qdiff
+  diff -r 000000000000 b
+  --- /dev/null
+  +++ b/b
+  @@ -0,0 +1,1 @@
+  +a
+
+  $ cd ..
+
+
+Issue2025: qrefresh does not honor filtering options when tip != qtip:
+
+  $ hg init repo-2025
+  $ cd repo-2025
+  $ echo a > a
+  $ echo b > b
+  $ hg ci -qAm addab
+  $ echo a >> a
+  $ echo b >> b
+  $ hg qnew -f patch
+  $ hg up -qC 0
+  $ echo c > c
+  $ hg ci -qAm addc
+  $ hg up -qC 1
+
+refresh with tip != qtip:
+
+  $ hg --config diff.nodates=1 qrefresh -I b
+
+  $ hg st
+  M a
+
+  $ cat b
+  b
+  b
+
+  $ cat .hg/patches/patch
+  # HG changeset patch
+  # Parent 1a60229be7ac3e4a7f647508e99b87bef1f03593
+  
+  diff -r 1a60229be7ac b
+  --- a/b
+  +++ b/b
+  @@ -1,1 +1,2 @@
+   b
+  +b
+
+  $ cd ..
+
+
+Issue1441 with git patches:
+
+  $ hg init repo-1441-git
+  $ cd repo-1441-git
+
+  $ echo "[diff]" >> .hg/hgrc
+  $ echo "git=True" >> .hg/hgrc
+
+  $ echo a > a
+  $ hg add a
+  $ hg qnew -f p
+  $ hg mv a b
+  $ hg qrefresh
+
+  $ hg qdiff --nodates
+  diff --git a/b b/b
+  new file mode 100644
+  --- /dev/null
+  +++ b/b
+  @@ -0,0 +1,1 @@
+  +a
+
+  $ cd ..
+
--- a/tests/test-mq-qrename	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-
-hg init a
-cd a
-
-echo 'base' > base
-hg ci -Ambase -d '1 0'
-
-hg qnew -mmqbase mqbase
-hg qrename mqbase renamed
-mkdir .hg/patches/foo
-hg qrename renamed foo
-hg qseries
-ls .hg/patches/foo
-mkdir .hg/patches/bar
-hg qrename foo/renamed bar
-hg qseries
-ls .hg/patches/bar
-hg qrename bar/renamed baz
-hg qseries
-ls .hg/patches/baz
-hg qrename baz new/dir
-hg qseries
-ls .hg/patches/new/dir
-cd ..
-
-echo % test patch being renamed before committed
-hg init b
-cd b
-hg qinit -c
-hg qnew x
-hg qrename y
-hg qcommit -m rename
-cd ..
-
-
--- a/tests/test-mq-qrename.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-adding base
-foo/renamed
-renamed
-bar/renamed
-renamed
-baz
-.hg/patches/baz
-new/dir
-.hg/patches/new/dir
-% test patch being renamed before committed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qrename.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,62 @@
+
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+
+  $ hg init a
+  $ cd a
+
+  $ echo 'base' > base
+  $ hg ci -Ambase
+  adding base
+
+  $ hg qnew -mmqbase mqbase
+
+  $ hg qrename mqbase renamed
+  $ mkdir .hg/patches/foo
+  $ hg qrename renamed foo
+
+  $ hg qseries
+  foo/renamed
+
+  $ ls .hg/patches/foo
+  renamed
+
+  $ mkdir .hg/patches/bar
+  $ hg qrename foo/renamed bar
+
+  $ hg qseries
+  bar/renamed
+
+  $ ls .hg/patches/bar
+  renamed
+
+  $ hg qrename bar/renamed baz
+
+  $ hg qseries
+  baz
+
+  $ ls .hg/patches/baz
+  .hg/patches/baz
+
+  $ hg qrename baz new/dir
+
+  $ hg qseries
+  new/dir
+
+  $ ls .hg/patches/new/dir
+  .hg/patches/new/dir
+
+  $ cd ..
+
+Test patch being renamed before committed:
+
+  $ hg init b
+  $ cd b
+  $ hg qinit -c
+  $ hg qnew x
+  $ hg qrename y
+  $ hg qcommit -m rename
+
+  $ cd ..
+
+
--- a/tests/test-mq-qsave	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-
-hg init a
-cd a
-
-echo 'base' > base
-hg ci -Ambase -d '1 0'
-
-hg qnew -mmqbase mqbase
-
-hg qsave
-hg qrestore 2
--- a/tests/test-mq-qsave.out	Mon Sep 20 22:41:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-adding base
-restoring status: hg patches saved state
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qsave.t	Mon Sep 20 23:42:23 2010 +0200
@@ -0,0 +1,15 @@
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+
+  $ hg init
+
+  $ echo 'base' > base
+  $ hg ci -Ambase
+  adding base
+
+  $ hg qnew -mmqbase mqbase
+
+  $ hg qsave
+  $ hg qrestore 2
+  restoring status: hg patches saved state
+
--- a/tests/test-pull.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-pull.t	Mon Sep 20 23:42:23 2010 +0200
@@ -73,8 +73,8 @@
 
   $ hg pull -q file:../test
 
-# It's tricky to make file:// URLs working on every platforms
-# with regular shell commands.
+It's tricky to make file:// URLs working on every platform with
+regular shell commands.
 
   $ URL=`python -c "import os; print 'file://foobar' + ('/' + os.getcwd().replace(os.sep, '/')).replace('//', '/') + '/../test'"`
   $ hg pull -q "$URL"
--- a/tests/test-push-warn.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-push-warn.t	Mon Sep 20 23:42:23 2010 +0200
@@ -466,8 +466,8 @@
   $ hg ci -Amb
   adding b
 
-# b is now branch head of B, and a topological head
-# a is now branch head of A, but not a topological head
+b is now branch head of B, and a topological head
+a is now branch head of A, but not a topological head
 
   $ hg clone . inner
   updating to branch B
@@ -479,7 +479,7 @@
   $ hg ci -Amb1
   adding b1
 
-# in the clone b1 is now the head of B
+in the clone b1 is now the head of B
 
   $ cd ..
   $ hg up 0
@@ -488,8 +488,9 @@
   $ hg ci -Ama2
   adding a2
 
-# a2 is now the new branch head of A, and a new topological head
-# it replaces a former inner branch head, so it should at most warn about A, not B
+a2 is now the new branch head of A, and a new topological head 
+it replaces a former inner branch head, so it should at most warn about
+A, not B
 
 glog of local:
 
@@ -542,7 +543,7 @@
   $ hg ci -Amb
   adding b
 
-# b is now branch head of B, and a topological head
+b is now branch head of B, and a topological head
 
   $ hg up 0
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
@@ -550,7 +551,7 @@
   $ hg ci -Ama1
   adding a1
 
-# a1 is now branch head of A, and a topological head
+a1 is now branch head of A, and a topological head
 
   $ hg clone . inner
   updating to branch A
@@ -562,15 +563,15 @@
   $ hg ci -Amb1
   adding b1
 
-# in the clone b1 is now the head of B
+in the clone b1 is now the head of B
 
   $ cd ..
   $ echo a2 >a2
   $ hg ci -Ama2
   adding a2
 
-# a2 is now the new branch head of A, and a topological head
-# it replaces a former topological and branch head, so this should not warn
+a2 is now the new branch head of A, and a topological head
+it replaces a former topological and branch head, so this should not warn
 
 glog of local:
 
@@ -706,6 +707,3 @@
   searching for changes
   no changes found
   [1]
-
-  $ cd ..
-
--- a/tests/test-record.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-record.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,57 +1,10 @@
-#!/bin/sh
+Set up a repo
 
   $ echo "[ui]" >> $HGRCPATH
   $ echo "interactive=true" >> $HGRCPATH
   $ echo "[extensions]" >> $HGRCPATH
   $ echo "record=" >> $HGRCPATH
 
-Help
-
-  $ hg help record
-  hg record [OPTION]... [FILE]...
-  
-  interactively select changes to commit
-  
-      If a list of files is omitted, all changes reported by "hg status" will be
-      candidates for recording.
-  
-      See "hg help dates" for a list of formats valid for -d/--date.
-  
-      You will be prompted for whether to record changes to each modified file,
-      and for files with multiple changes, for each change to use. For each
-      query, the following responses are possible:
-  
-        y - record this change
-        n - skip this change
-  
-        s - skip remaining changes to this file
-        f - record remaining changes to this file
-  
-        d - done, skip remaining changes and files
-        a - record all changes to all remaining files
-        q - quit, recording no changes
-  
-        ? - display help
-  
-      This command is not available when committing a merge.
-  
-  options:
-  
-   -A --addremove            mark new/missing files as added/removed before
-                             committing
-      --close-branch         mark a branch as closed, hiding it from the branch
-                             list
-   -I --include PATTERN [+]  include names matching the given patterns
-   -X --exclude PATTERN [+]  exclude names matching the given patterns
-   -m --message TEXT         use text as commit message
-   -l --logfile FILE         read commit message from file
-   -d --date DATE            record datecode as commit date
-   -u --user USER            record the specified user as committer
-  
-  [+] marked option can be specified multiple times
-  
-  use "hg -v help record" to show global options
-
   $ hg init a
   $ cd a
 
--- a/tests/test-remove-new.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-remove-new.t	Mon Sep 20 23:42:23 2010 +0200
@@ -11,4 +11,3 @@
   removing b
   nothing changed
   [1]
-  $ exit 0
--- a/tests/test-rename-after-merge.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-rename-after-merge.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,5 +1,5 @@
-# Test issue 746: renaming files brought by the
-# second parent of a merge was broken.
+Test issue 746: renaming files brought by the second parent of a merge
+was broken.
 
 Create source repository:
 
@@ -59,9 +59,8 @@
 
   $ cd ..
 
-# Test issue 1476: renaming a first parent file into
-# another first parent file while none of them belong to
-# the second parent was broken
+Test issue 1476: renaming a first parent file into another first
+parent file while none of them belong to the second parent was broken
 
   $ hg init repo1476
   $ cd repo1476
--- a/tests/test-revlog-group-emptyiter.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-revlog-group-emptyiter.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,5 @@
-# issue 1678
+issue 1678
+
 setting up base repo
   $ hg init a
   $ cd a
--- a/tests/test-status-color.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-status-color.t	Mon Sep 20 23:42:23 2010 +0200
@@ -178,7 +178,7 @@
   I ignoreddir/file
   $ cd ..
 
-# check 'status -q' and some combinations
+check 'status -q' and some combinations
 
   $ hg init repo3
   $ cd repo3
@@ -207,9 +207,10 @@
   ! deleted
   ? unknown
 
-# Run status with 2 different flags.
-# Check if result is the same or different.
-# If result is not as expected, raise error
+Run status with 2 different flags.
+Check if result is the same or different.
+If result is not as expected, raise error
+
   $ assert() {
   >     hg status --color=always $1 > ../a
   >     hg status --color=always $2 > ../b
@@ -229,7 +230,7 @@
   >     fi
   > }
 
-# assert flag1 flag2 [0-same | 1-different]
+assert flag1 flag2 [0-same | 1-different]
 
   $ assert "-q" "-mard"      0
   $ assert "-A" "-marduicC"  0
@@ -243,7 +244,8 @@
   $ assert "-r" "-d"         1
   $ cd ..
 
-# test 'resolve -l'
+test 'resolve -l'
+
   $ hg init repo4
   $ cd repo4
   $ echo "file a" > a
--- a/tests/test-status.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-status.t	Mon Sep 20 23:42:23 2010 +0200
@@ -173,7 +173,7 @@
   I ignoreddir/file
   $ cd ..
 
-# check 'status -q' and some combinations
+Check 'status -q' and some combinations
 
   $ hg init repo3
   $ cd repo3
@@ -191,9 +191,9 @@
   $ rm deleted
   $ hg copy modified copied
 
-# Run status with 2 different flags.
-# Check if result is the same or different.
-# If result is not as expected, raise error
+Run status with 2 different flags.
+Check if result is the same or different.
+If result is not as expected, raise error
 
   $ assert() {
   >    hg status $1 > ../a
@@ -214,7 +214,7 @@
   >     fi
   > }
 
-# assert flag1 flag2 [0-same | 1-different]
+Assert flag1 flag2 [0-same | 1-different]
 
   $ assert "-q" "-mard"      0
   $ assert "-A" "-marduicC"  0
--- a/tests/test-subrepo-deep-nested-change.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-subrepo-deep-nested-change.t	Mon Sep 20 23:42:23 2010 +0200
@@ -115,5 +115,3 @@
   path sub2
    source   ../sub2
    revision 53dd3430bcaf5ab4a7c48262bcad6d441f510487
-
-  $ exit 0
--- a/tests/test-subrepo-paths.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-subrepo-paths.t	Mon Sep 20 23:42:23 2010 +0200
@@ -30,5 +30,3 @@
   $ hg debugsub
   abort: bad subrepository pattern in .*/test-subrepo-paths.t/outer/.hg/hgrc:2: invalid group reference
   [255]
-
-  $ exit 0
--- a/tests/test-subrepo-recursion.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-subrepo-recursion.t	Mon Sep 20 23:42:23 2010 +0200
@@ -243,23 +243,9 @@
   ../archive/.hgsub
   ../archive/.hg_archival.txt
 
-Test archiving to zip file:
+Test archiving to zip file (unzip output is unstable):
 
   $ hg archive --subrepos ../archive.zip
-  $ unzip -l ../archive.zip
-  Archive:  ../archive.zip
-    Length      Date    Time    Name
-  ---------  ---------- -----   ----
-        147  1980-01-01 00:00   archive/.hg_archival.txt
-         10  1980-01-01 00:00   archive/.hgsub
-         45  1980-01-01 00:00   archive/.hgsubstate
-          3  1980-01-01 00:00   archive/x.txt
-          9  1980-01-01 00:00   archive/foo/y.txt
-         10  1980-01-01 00:00   archive/foo/.hgsub
-         45  1980-01-01 00:00   archive/foo/.hgsubstate
-          9  1980-01-01 00:00   archive/foo/bar/z.txt
-  ---------                     -------
-        278                     8 files
 
 Clone and test outgoing:
 
--- a/tests/test-subrepo-relative-path.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-subrepo-relative-path.t	Mon Sep 20 23:42:23 2010 +0200
@@ -67,5 +67,3 @@
    revision 863c1745b441bd97a8c4a096e87793073f4fb215
 
   $ "$TESTDIR/killdaemons.py"
-
-  $ exit 0
--- a/tests/test-subrepo.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-subrepo.t	Mon Sep 20 23:42:23 2010 +0200
@@ -584,5 +584,3 @@
   $ hg -R repo update
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ rm -rf repo2 repo
-
-  $ exit 0
--- a/tests/test-tags.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-tags.t	Mon Sep 20 23:42:23 2010 +0200
@@ -368,4 +368,3 @@
   tip                                1:a0b6fe111088
   localtag                           0:bbd179dfa0a7 local
   globaltag                          0:bbd179dfa0a7
-  $ exit 0
--- a/tests/test-update-branches.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-update-branches.t	Mon Sep 20 23:42:23 2010 +0200
@@ -69,8 +69,8 @@
   >     hg stat
   > }    
 
-# Test cases are documented in a table in the update function of merge.py.
-# Cases are run as shown in that table, row by row.
+Test cases are documented in a table in the update function of merge.py.
+Cases are run as shown in that table, row by row.
 
   $ norevtest 'none clean linear' clean 4
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-update-renames.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-update-renames.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,6 +1,6 @@
-# test update logic when there are renames
+Test update logic when there are renames
 
-# update with local changes across a file rename
+Update with local changes across a file rename
 
   $ hg init
 
--- a/tests/test-url-rev.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-url-rev.t	Mon Sep 20 23:42:23 2010 +0200
@@ -1,4 +1,4 @@
-# test basic functionality of url#rev syntax
+Test basic functionality of url#rev syntax
 
   $ hg init repo
   $ cd repo
--- a/tests/test-verify.t	Mon Sep 20 22:41:10 2010 +0200
+++ b/tests/test-verify.t	Mon Sep 20 23:42:23 2010 +0200
@@ -99,5 +99,3 @@
   crosschecking files in changesets and manifests
   checking files
   1 files, 1 changesets, 1 total revisions
-
-  $ exit 0