# HG changeset patch # User Matt Mackall # Date 1321902677 21600 # Node ID 49a5db5b10de5dfe281647239a8da7b7934b0188 # Parent e19302598df88b5d16aed57fbbec07f547470946# Parent b0a88bda3381a04f2294d9fdcf9101283b62c006 merge with stable diff -r b0a88bda3381 -r 49a5db5b10de contrib/check-code.py --- a/contrib/check-code.py Sun Nov 20 23:09:32 2011 +0100 +++ b/contrib/check-code.py Mon Nov 21 13:11:17 2011 -0600 @@ -131,7 +131,8 @@ (r'[^\n]\Z', "no trailing newline"), (r'(\S[ \t]+|^[ \t]+)\n', "trailing whitespace"), # (r'^\s+[^_ \n][^_. \n]+_[^_\n]+\s*=', "don't use underbars in identifiers"), -# (r'\w*[a-z][A-Z]\w*\s*=', "don't use camelcase in identifiers"), + (r'^\s+(self\.)?[A-za-z][a-z0-9]+[A-Z]\w* = ', + "don't use camelcase in identifiers"), (r'^\s*(if|while|def|class|except|try)\s[^[\n]*:\s*[^\\n]#\s]+', "linebreak after :"), (r'class\s[^( \n]+:', "old-style class, use class foo(object)"), @@ -301,7 +302,7 @@ return lines def checkfile(f, logfunc=_defaultlogger.log, maxerr=None, warnings=False, - blame=False, debug=False): + blame=False, debug=False, lineno=True): """checks style and portability of a given file :f: filepath @@ -384,7 +385,7 @@ bl, bu, br = blamecache[n] if bl == l: bd = '%s@%s' % (bu, br) - errors.append((f, n + 1, l, msg, bd)) + errors.append((f, lineno and n + 1, l, msg, bd)) result = False errors.sort() @@ -407,8 +408,11 @@ help="use annotate to generate blame info") parser.add_option("", "--debug", action="store_true", help="show debug information") + parser.add_option("", "--nolineno", action="store_false", + dest='lineno', help="don't show line numbers") - parser.set_defaults(per_file=15, warnings=False, blame=False, debug=False) + parser.set_defaults(per_file=15, warnings=False, blame=False, debug=False, + lineno=True) (options, args) = parser.parse_args() if len(args) == 0: @@ -419,6 +423,7 @@ for f in check: ret = 0 if not checkfile(f, maxerr=options.per_file, warnings=options.warnings, - blame=options.blame, debug=options.debug): + blame=options.blame, debug=options.debug, + lineno=options.lineno): ret = 1 sys.exit(ret) diff -r b0a88bda3381 -r 49a5db5b10de hgext/convert/darcs.py --- a/hgext/convert/darcs.py Sun Nov 20 23:09:32 2011 +0100 +++ b/hgext/convert/darcs.py Mon Nov 21 13:11:17 2011 -0600 @@ -24,7 +24,7 @@ try: from elementtree.ElementTree import ElementTree, XMLParser except ImportError: - ElementTree = None + pass class darcs_source(converter_source, commandline): def __init__(self, ui, path, rev=None): @@ -42,7 +42,7 @@ raise util.Abort(_('darcs version 2.1 or newer needed (found %r)') % version) - if ElementTree is None: + if "ElementTree" not in globals(): raise util.Abort(_("Python ElementTree module is not available")) self.path = os.path.realpath(path) diff -r b0a88bda3381 -r 49a5db5b10de hgext/mq.py --- a/hgext/mq.py Sun Nov 20 23:09:32 2011 +0100 +++ b/hgext/mq.py Mon Nov 21 13:11:17 2011 -0600 @@ -2915,6 +2915,9 @@ return 0 revs = scmutil.revrange(repo, revrange) + if repo['.'].rev() in revs and repo[None].files(): + ui.warn(_('warning: uncommitted changes in the working directory\n')) + q.finish(repo, revs) q.savedirty() return 0 diff -r b0a88bda3381 -r 49a5db5b10de hgext/rebase.py --- a/hgext/rebase.py Sun Nov 20 23:09:32 2011 +0100 +++ b/hgext/rebase.py Mon Nov 21 13:11:17 2011 -0600 @@ -185,21 +185,19 @@ dest = repo[destf] if revf: - revgen = repo.set('%lr', revf) + rebaseset = repo.revs('%lr', revf) elif srcf: - revgen = repo.set('(%r)::', srcf) + rebaseset = repo.revs('(%r)::', srcf) else: base = basef or '.' - revgen = repo.set('(children(ancestor(%r, %d)) and ::(%r))::', - base, dest, base) - - rebaseset = [c.rev() for c in revgen] + rebaseset = repo.revs('(children(ancestor(%r, %d)) & ::%r)::', + base, dest, base) if not rebaseset: repo.ui.debug('base is ancestor of destination') result = None - elif not keepf and list(repo.set('first(children(%ld) - %ld)', - rebaseset, rebaseset)): + elif not keepf and list(repo.revs('first(children(%ld) - %ld)', + rebaseset, rebaseset)): raise util.Abort( _("can't remove original changesets with" " unrebased descendants"), @@ -589,8 +587,7 @@ # rebase on ancestor, force detach detach = True if detach: - detachset = [c.rev() for c in repo.set('::%d - ::%d - %d', - root, commonbase, root)] + detachset = repo.revs('::%d - ::%d - %d', root, commonbase, root) repo.ui.debug('rebase onto %d starting from %d\n' % (dest, root)) state = dict.fromkeys(rebaseset, nullrev) diff -r b0a88bda3381 -r 49a5db5b10de mercurial/bdiff.c --- a/mercurial/bdiff.c Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/bdiff.c Mon Nov 21 13:11:17 2011 -0600 @@ -425,11 +425,55 @@ return result ? result : PyErr_NoMemory(); } +/* + * If allws != 0, remove all whitespace (' ', \t and \r). Otherwise, + * reduce whitespace sequences to a single space and trim remaining whitespace + * from end of lines. + */ +static PyObject *fixws(PyObject *self, PyObject *args) +{ + PyObject *s, *result = NULL; + char allws, c; + const char *r; + int i, rlen, wlen = 0; + char *w; + + if (!PyArg_ParseTuple(args, "Sb:fixws", &s, &allws)) + return NULL; + r = PyBytes_AsString(s); + rlen = PyBytes_Size(s); + + w = (char *)malloc(rlen); + if (!w) + goto nomem; + + for (i = 0; i != rlen; i++) { + c = r[i]; + if (c == ' ' || c == '\t' || c == '\r') { + if (!allws && (wlen == 0 || w[wlen - 1] != ' ')) + w[wlen++] = ' '; + } else if (c == '\n' && !allws + && wlen > 0 && w[wlen - 1] == ' ') { + w[wlen - 1] = '\n'; + } else { + w[wlen++] = c; + } + } + + result = PyBytes_FromStringAndSize(w, wlen); + +nomem: + free(w); + return result ? result : PyErr_NoMemory(); +} + + static char mdiff_doc[] = "Efficient binary diff."; static PyMethodDef methods[] = { {"bdiff", bdiff, METH_VARARGS, "calculate a binary diff\n"}, {"blocks", blocks, METH_VARARGS, "find a list of matching lines\n"}, + {"fixws", fixws, METH_VARARGS, "normalize diff whitespaces\n"}, {NULL, NULL} }; diff -r b0a88bda3381 -r 49a5db5b10de mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/cmdutil.py Mon Nov 21 13:11:17 2011 -0600 @@ -1165,15 +1165,19 @@ if ui.verbose or not exact: ui.status(_('adding %s\n') % match.rel(join(f))) - if listsubrepos: - for subpath in wctx.substate: - sub = wctx.sub(subpath) - try: - submatch = matchmod.narrowmatcher(subpath, match) + for subpath in wctx.substate: + sub = wctx.sub(subpath) + try: + submatch = matchmod.narrowmatcher(subpath, match) + if listsubrepos: bad.extend(sub.add(ui, submatch, dryrun, prefix)) - except error.LookupError: - ui.status(_("skipping missing subrepository: %s\n") - % join(subpath)) + else: + for f in sub.walk(submatch): + if submatch.exact(f): + bad.extend(sub.add(ui, submatch, dryrun, prefix)) + except error.LookupError: + ui.status(_("skipping missing subrepository: %s\n") + % join(subpath)) if not dryrun: rejected = wctx.add(names, prefix) diff -r b0a88bda3381 -r 49a5db5b10de mercurial/commands.py --- a/mercurial/commands.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/commands.py Mon Nov 21 13:11:17 2011 -0600 @@ -13,6 +13,7 @@ import patch, help, url, encoding, templatekw, discovery import archival, changegroup, cmdutil, hbisect import sshserver, hgweb, hgweb.server, commandserver +import match as matchmod import merge as mergemod import minirst, revset, fileset import dagparser, context, simplemerge @@ -105,15 +106,19 @@ ('', 'nodates', None, _('omit dates from diff headers')) ] -diffopts2 = [ - ('p', 'show-function', None, _('show which function each change is in')), - ('', 'reverse', None, _('produce a diff that undoes the changes')), +diffwsopts = [ ('w', 'ignore-all-space', None, _('ignore white space when comparing lines')), ('b', 'ignore-space-change', None, _('ignore changes in the amount of white space')), ('B', 'ignore-blank-lines', None, _('ignore changes whose lines are all blank')), + ] + +diffopts2 = [ + ('p', 'show-function', None, _('show which function each change is in')), + ('', 'reverse', None, _('produce a diff that undoes the changes')), + ] + diffwsopts + [ ('U', 'unified', '', _('number of lines of context to show'), _('NUM')), ('', 'stat', None, _('output diffstat-style summary of changes')), @@ -214,7 +219,7 @@ ('n', 'number', None, _('list the revision number (default)')), ('c', 'changeset', None, _('list the changeset')), ('l', 'line-number', None, _('show line number at the first appearance')) - ] + walkopts, + ] + diffwsopts + walkopts, _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...')) def annotate(ui, repo, *pats, **opts): """show changeset information by line for each file @@ -269,13 +274,15 @@ m = scmutil.match(ctx, pats, opts) m.bad = bad follow = not opts.get('no_follow') + diffopts = patch.diffopts(ui, opts, section='annotate') for abs in ctx.walk(m): fctx = ctx[abs] if not opts.get('text') and util.binary(fctx.data()): ui.write(_("%s: binary file\n") % ((pats and m.rel(abs)) or abs)) continue - lines = fctx.annotate(follow=follow, linenumber=linenumber) + lines = fctx.annotate(follow=follow, linenumber=linenumber, + diffopts=diffopts) pieces = [] for f, sep in funcmap: @@ -738,6 +745,17 @@ marks = repo._bookmarks cur = repo.changectx('.').node() + if delete: + if mark is None: + raise util.Abort(_("bookmark name required")) + if mark not in marks: + raise util.Abort(_("bookmark '%s' does not exist") % mark) + if mark == repo._bookmarkcurrent: + bookmarks.setcurrent(repo, None) + del marks[mark] + bookmarks.write(repo) + return + if rename: if rename not in marks: raise util.Abort(_("bookmark '%s' does not exist") % rename) @@ -753,17 +771,6 @@ bookmarks.write(repo) return - if delete: - if mark is None: - raise util.Abort(_("bookmark name required")) - if mark not in marks: - raise util.Abort(_("bookmark '%s' does not exist") % mark) - if mark == repo._bookmarkcurrent: - bookmarks.setcurrent(repo, None) - del marks[mark] - bookmarks.write(repo) - return - if mark is not None: if "\n" in mark: raise util.Abort(_("bookmark name cannot contain newlines")) @@ -784,8 +791,8 @@ if rev: marks[mark] = repo.lookup(rev) else: - marks[mark] = repo.changectx('.').node() - if not inactive and repo.changectx('.').node() == marks[mark]: + marks[mark] = cur + if not inactive and cur == marks[mark]: bookmarks.setcurrent(repo, mark) bookmarks.write(repo) return @@ -2189,7 +2196,7 @@ if ent[1] & 020000: mode = 'lnk' else: - mode = '%3o' % (ent[1] & 0777) + mode = '%3o' % (ent[1] & 0777 & ~util.umask) ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_)) for f in repo.dirstate.copies(): ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f)) @@ -2432,23 +2439,45 @@ if not pats: raise util.Abort(_('no files specified')) - m = scmutil.match(repo[None], pats, opts) + wctx = repo[None] + m = scmutil.match(wctx, pats, opts) s = repo.status(match=m, clean=True) forget = sorted(s[0] + s[1] + s[3] + s[6]) + subforget = {} errs = 0 + for subpath in wctx.substate: + sub = wctx.sub(subpath) + try: + submatch = matchmod.narrowmatcher(subpath, m) + for fsub in sub.walk(submatch): + if submatch.exact(fsub): + subforget[subpath + '/' + fsub] = (fsub, sub) + except error.LookupError: + ui.status(_("skipping missing subrepository: %s\n") % subpath) + for f in m.files(): if f not in repo.dirstate and not os.path.isdir(m.rel(f)): - if os.path.exists(m.rel(f)): - ui.warn(_('not removing %s: file is already untracked\n') - % m.rel(f)) - errs = 1 + if f not in subforget: + if os.path.exists(m.rel(f)): + ui.warn(_('not removing %s: file is already untracked\n') + % m.rel(f)) + errs = 1 for f in forget: if ui.verbose or not m.exact(f): ui.status(_('removing %s\n') % m.rel(f)) - repo[None].forget(forget) + if ui.verbose: + for f in sorted(subforget.keys()): + ui.status(_('removing %s\n') % m.rel(f)) + + wctx.forget(forget) + + for f in sorted(subforget.keys()): + fsub, sub = subforget[f] + sub.forget([fsub]) + return errs @command( @@ -2534,16 +2563,16 @@ revs = scmutil.revrange(repo, revs) # check for merges - for ctx in repo.set('%ld and merge()', revs): - ui.warn(_('skipping ungraftable merge revision %s\n') % ctx.rev()) - revs.remove(ctx.rev()) + for rev in repo.revs('%ld and merge()', revs): + ui.warn(_('skipping ungraftable merge revision %s\n') % rev) + revs.remove(rev) if not revs: return -1 # check for ancestors of dest branch - for ctx in repo.set('::. and %ld', revs): - ui.warn(_('skipping ancestor revision %s\n') % ctx.rev()) - revs.remove(ctx.rev()) + for rev in repo.revs('::. and %ld', revs): + ui.warn(_('skipping ancestor revision %s\n') % rev) + revs.remove(rev) if not revs: return -1 @@ -3734,14 +3763,14 @@ [('f', 'follow', None, _('follow changeset history, or file history across copies and renames')), ('', 'follow-first', None, - _('only follow the first parent of merge changesets')), + _('only follow the first parent of merge changesets (DEPRECATED)')), ('d', 'date', '', _('show revisions matching date spec'), _('DATE')), ('C', 'copies', None, _('show copied files')), ('k', 'keyword', [], _('do case-insensitive search for a given text'), _('TEXT')), ('r', 'rev', [], _('show the specified revision or range'), _('REV')), ('', 'removed', None, _('include revisions where files were removed')), - ('m', 'only-merges', None, _('show only merges')), + ('m', 'only-merges', None, _('show only merges (DEPRECATED)')), ('u', 'user', [], _('revisions committed by user'), _('USER')), ('', 'only-branch', [], _('show only changesets within the given named branch (DEPRECATED)'), @@ -3750,7 +3779,7 @@ _('show changesets within the given named branch'), _('BRANCH')), ('P', 'prune', [], _('do not display revision or any of its ancestors'), _('REV')), - ('', 'hidden', False, _('show hidden changesets')), + ('', 'hidden', False, _('show hidden changesets (DEPRECATED)')), ] + logopts + walkopts, _('[OPTION]... [FILE]')) def log(ui, repo, *pats, **opts): diff -r b0a88bda3381 -r 49a5db5b10de mercurial/context.py --- a/mercurial/context.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/context.py Mon Nov 21 13:11:17 2011 -0600 @@ -7,7 +7,7 @@ from node import nullid, nullrev, short, hex from i18n import _ -import ancestor, bdiff, error, util, scmutil, subrepo, patch, encoding +import ancestor, mdiff, error, util, scmutil, subrepo, patch, encoding import match as matchmod import os, errno, stat @@ -117,6 +117,13 @@ return self._repo.nodetags(self._node) def bookmarks(self): return self._repo.nodebookmarks(self._node) + def phase(self): + if self._rev == -1: + return 0 + if self._rev >= len(self._repo._phaserev): + # outdated cache + del self._repo._phaserev + return self._repo._phaserev[self._rev] def hidden(self): return self._rev in self._repo.changelog.hiddenrevs @@ -426,7 +433,7 @@ return [filectx(self._repo, self._path, fileid=x, filelog=self._filelog) for x in c] - def annotate(self, follow=False, linenumber=None): + def annotate(self, follow=False, linenumber=None, diffopts=None): '''returns a list of tuples of (ctx, line) for each line in the file, where ctx is the filectx of the node where that line was last changed. @@ -453,8 +460,13 @@ without_linenumber) def pair(parent, child): - for a1, a2, b1, b2 in bdiff.blocks(parent[1], child[1]): - child[0][b1:b2] = parent[0][a1:a2] + blocks = mdiff.allblocks(parent[1], child[1], opts=diffopts, + refine=True) + for (a1, a2, b1, b2), t in blocks: + # Changed blocks ('!') or blocks made only of blank lines ('~') + # belong to the child. + if t == '=': + child[0][b1:b2] = parent[0][a1:a2] return child getlog = util.lrucachefunc(lambda x: self._repo.file(x)) diff -r b0a88bda3381 -r 49a5db5b10de mercurial/discovery.py --- a/mercurial/discovery.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/discovery.py Mon Nov 21 13:11:17 2011 -0600 @@ -67,14 +67,18 @@ on circumstances: If we are not going to push anything, return a tuple (None, - outgoing) where outgoing is 0 if there are no outgoing + outgoing, common) where outgoing is 0 if there are no outgoing changesets and 1 if there are, but we refuse to push them - (e.g. would create new remote heads). + (e.g. would create new remote heads). The third element "common" + is the list of heads of the common set between local and remote. - Otherwise, return a tuple (changegroup, remoteheads), where - changegroup is a readable file-like object whose read() returns - successive changegroup chunks ready to be sent over the wire and - remoteheads is the list of remote heads.''' + Otherwise, return a tuple (changegroup, remoteheads, futureheads), + where changegroup is a readable file-like object whose read() + returns successive changegroup chunks ready to be sent over the + wire, remoteheads is the list of remote heads and futureheads is + the list of heads of the common set between local and remote to + be after push completion. + ''' commoninc = findcommonincoming(repo, remote, force=force) common, revs = findcommonoutgoing(repo, remote, onlyheads=revs, commoninc=commoninc, force=force) @@ -85,7 +89,7 @@ if not outg: repo.ui.status(_("no changes found\n")) - return None, 1 + return None, 1, common if not force and remoteheads != [nullid]: if remote.capable('branchmap'): @@ -189,4 +193,10 @@ cg = repo._changegroup(outg, 'push') else: cg = repo.getbundle('push', heads=revs, common=common) - return cg, remoteheads + # no need to compute outg ancestor. All node in outg have either: + # - parents in outg + # - parents in common + # - nullid parent + rset = repo.set('heads(%ln + %ln)', common, outg) + futureheads = [ctx.node() for ctx in rset] + return cg, remoteheads, futureheads diff -r b0a88bda3381 -r 49a5db5b10de mercurial/dispatch.py --- a/mercurial/dispatch.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/dispatch.py Mon Nov 21 13:11:17 2011 -0600 @@ -24,7 +24,7 @@ def run(): "run the command in sys.argv" - sys.exit(dispatch(request(sys.argv[1:]))) + sys.exit((dispatch(request(sys.argv[1:])) or 0) & 255) def dispatch(req): "run the command specified in req.args" diff -r b0a88bda3381 -r 49a5db5b10de mercurial/filemerge.py --- a/mercurial/filemerge.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/filemerge.py Mon Nov 21 13:11:17 2011 -0600 @@ -262,7 +262,11 @@ _matcheol(repo.wjoin(fd), back) if r: - ui.warn(_("merging %s failed!\n") % fd) + if tool == "internal:merge": + ui.warn(_("merging %s incomplete! " + "(edit conflicts, then use 'hg resolve --mark')\n") % fd) + else: + ui.warn(_("merging %s failed!\n") % fd) else: os.unlink(back) diff -r b0a88bda3381 -r 49a5db5b10de mercurial/hbisect.py --- a/mercurial/hbisect.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/hbisect.py Mon Nov 21 13:11:17 2011 -0600 @@ -179,7 +179,7 @@ # that's because the bisection can go either way range = '( bisect(bad)::bisect(good) | bisect(good)::bisect(bad) )' - _t = [c.rev() for c in repo.set('bisect(good)::bisect(bad)')] + _t = repo.revs('bisect(good)::bisect(bad)') # The sets of topologically good or bad csets if len(_t) == 0: # Goods are topologically after bads @@ -206,22 +206,21 @@ ignored = '( ( (%s) | (%s) ) - (%s) )' % (iba, iga, range) if status == 'range': - return [c.rev() for c in repo.set(range)] + return repo.revs(range) elif status == 'pruned': - return [c.rev() for c in repo.set(pruned)] + return repo.revs(pruned) elif status == 'untested': - return [c.rev() for c in repo.set(untested)] + return repo.revs(untested) elif status == 'ignored': - return [c.rev() for c in repo.set(ignored)] + return repo.revs(ignored) elif status == "goods": - return [c.rev() for c in repo.set(goods)] + return repo.revs(goods) elif status == "bads": - return [c.rev() for c in repo.set(bads)] - + return repo.revs(bads) else: raise error.ParseError(_('invalid bisect state')) -def label(repo, node, short=False): +def label(repo, node): rev = repo.changelog.rev(node) # Try explicit sets diff -r b0a88bda3381 -r 49a5db5b10de mercurial/help/config.txt --- a/mercurial/help/config.txt Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/help/config.txt Mon Nov 21 13:11:17 2011 -0600 @@ -227,6 +227,24 @@ processed before shell aliases and will thus not be passed to aliases. + +``annotate`` +"""""""" + +Settings used when displaying file annotations. All values are +Booleans and default to False. See ``diff`` section for related +options for the diff command. + +``ignorews`` + Ignore white space when comparing lines. + +``ignorewsamount`` + Ignore changes in the amount of white space. + +``ignoreblanklines`` + Ignore changes whose lines are all blank. + + ``auth`` """""""" @@ -364,8 +382,9 @@ ``diff`` """""""" -Settings used when displaying diffs. Everything except for ``unified`` is a -Boolean and defaults to False. +Settings used when displaying diffs. Everything except for ``unified`` +is a Boolean and defaults to False. See ``annotate`` section for +related options for the annotate command. ``git`` Use git extended diff format. diff -r b0a88bda3381 -r 49a5db5b10de mercurial/help/subrepos.txt --- a/mercurial/help/subrepos.txt Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/help/subrepos.txt Mon Nov 21 13:11:17 2011 -0600 @@ -73,8 +73,10 @@ ----------------------------------- :add: add does not recurse in subrepos unless -S/--subrepos is - specified. Git and Subversion subrepositories are currently - silently ignored. + specified. However, if you specify the full path of a file in a + subrepo, it will be added even without -S/--subrepos specified. + Git and Subversion subrepositories are currently silently + ignored. :archive: archive does not recurse in subrepositories unless -S/--subrepos is specified. @@ -93,6 +95,9 @@ elements. Git and Subversion subrepositories are currently silently ignored. +:forget: forget currently only handles exact file matches in subrepos. + Git and Subversion subrepositories are currently silently ignored. + :incoming: incoming does not recurse in subrepos unless -S/--subrepos is specified. Git and Subversion subrepositories are currently silently ignored. diff -r b0a88bda3381 -r 49a5db5b10de mercurial/hgweb/webcommands.py --- a/mercurial/hgweb/webcommands.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/hgweb/webcommands.py Mon Nov 21 13:11:17 2011 -0600 @@ -12,7 +12,7 @@ from mercurial.util import binary from common import paritygen, staticfile, get_contact, ErrorResponse from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND -from mercurial import graphmod +from mercurial import graphmod, patch from mercurial import help as helpmod from mercurial.i18n import _ @@ -576,6 +576,7 @@ fctx = webutil.filectx(web.repo, req) f = fctx.path() parity = paritygen(web.stripecount) + diffopts = patch.diffopts(web.repo.ui, untrusted=True, section='annotate') def annotate(**map): last = None @@ -585,7 +586,8 @@ lines = enumerate([((fctx.filectx(fctx.filerev()), 1), '(binary:%s)' % mt)]) else: - lines = enumerate(fctx.annotate(follow=True, linenumber=True)) + lines = enumerate(fctx.annotate(follow=True, linenumber=True, + diffopts=diffopts)) for lineno, ((f, targetline), l) in lines: fnode = f.filenode() diff -r b0a88bda3381 -r 49a5db5b10de mercurial/localrepo.py --- a/mercurial/localrepo.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/localrepo.py Mon Nov 21 13:11:17 2011 -0600 @@ -8,7 +8,7 @@ from node import bin, hex, nullid, nullrev, short from i18n import _ import repo, changegroup, subrepo, discovery, pushkey -import changelog, dirstate, filelog, manifest, context, bookmarks +import changelog, dirstate, filelog, manifest, context, bookmarks, phases import lock, transaction, store, encoding import scmutil, util, extensions, hook, error, revset import match as matchmod @@ -36,6 +36,7 @@ self.wopener = scmutil.opener(self.root) self.baseui = baseui self.ui = baseui.copy() + self._dirtyphases = False try: self.ui.readconfig(self.join("hgrc"), self.root) @@ -170,6 +171,25 @@ def _writebookmarks(self, marks): bookmarks.write(self) + @filecache('phaseroots') + def _phaseroots(self): + self._dirtyphases = False + phaseroots = phases.readroots(self) + phases.filterunknown(self, phaseroots) + return phaseroots + + @propertycache + def _phaserev(self): + cache = [0] * len(self) + for phase in phases.trackedphases: + roots = map(self.changelog.rev, self._phaseroots[phase]) + if roots: + for rev in roots: + cache[rev] = phase + for rev in self.changelog.descendants(*roots): + cache[rev] = phase + return cache + @filecache('00changelog.i', True) def changelog(self): c = changelog.changelog(self.sopener) @@ -220,15 +240,18 @@ for i in xrange(len(self)): yield i + def revs(self, expr, *args): + '''Return a list of revisions matching the given revset''' + expr = revset.formatspec(expr, *args) + m = revset.match(None, expr) + return [r for r in m(self, range(len(self)))] + def set(self, expr, *args): ''' Yield a context for each matching revision, after doing arg replacement via revset.formatspec ''' - - expr = revset.formatspec(expr, *args) - m = revset.match(None, expr) - for r in m(self, range(len(self))): + for r in self.revs(expr, *args): yield self[r] def url(self): @@ -737,10 +760,16 @@ util.copyfile(bkname, self.join('journal.bookmarks')) else: self.opener.write('journal.bookmarks', '') + phasesname = self.sjoin('phaseroots') + if os.path.exists(phasesname): + util.copyfile(phasesname, self.sjoin('journal.phaseroots')) + else: + self.sopener.write('journal.phaseroots', '') return (self.sjoin('journal'), self.join('journal.dirstate'), self.join('journal.branch'), self.join('journal.desc'), - self.join('journal.bookmarks')) + self.join('journal.bookmarks'), + self.sjoin('journal.phaseroots')) def recover(self): lock = self.lock() @@ -805,6 +834,9 @@ if os.path.exists(self.join('undo.bookmarks')): util.rename(self.join('undo.bookmarks'), self.join('bookmarks')) + if os.path.exists(self.sjoin('undo.phaseroots')): + util.rename(self.sjoin('undo.phaseroots'), + self.sjoin('phaseroots')) self.invalidate() parentgone = (parents[0] not in self.changelog.nodemap or @@ -891,6 +923,8 @@ def unlock(): self.store.write() + if self._dirtyphases: + phases.writeroots(self) for k, ce in self._filecache.items(): if k == 'dirstate': continue @@ -1209,6 +1243,8 @@ self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1, parent2=xp2, pending=p) self.changelog.finalize(trp) + # ensure the new commit is 1-phase + phases.retractboundary(self, 1, [n]) tr.close() if self._branchcache: @@ -1484,6 +1520,7 @@ cg = remote.changegroupsubset(fetch, heads, 'pull') result = self.addchangegroup(cg, 'pull', remote.url(), lock=lock) + phases.advanceboundary(self, 0, common) finally: lock.release() @@ -1518,24 +1555,32 @@ if not unbundle: lock = remote.lock() try: - cg, remote_heads = discovery.prepush(self, remote, force, revs, - newbranch) - ret = remote_heads - if cg is not None: - if unbundle: - # local repo finds heads on server, finds out what - # revs it must push. once revs transferred, if server - # finds it has different heads (someone else won - # commit/push race), server aborts. - if force: - remote_heads = ['force'] - # ssh: return remote's addchangegroup() - # http: return remote's addchangegroup() or 0 for error - ret = remote.unbundle(cg, remote_heads, 'push') - else: - # we return an integer indicating remote head count change - ret = remote.addchangegroup(cg, 'push', self.url(), - lock=lock) + # get local lock as we might write phase data + locallock = self.lock() + try: + cg, remote_heads, fut = discovery.prepush(self, remote, force, + revs, newbranch) + ret = remote_heads + if cg is not None: + if unbundle: + # local repo finds heads on server, finds out what + # revs it must push. once revs transferred, if server + # finds it has different heads (someone else won + # commit/push race), server aborts. + if force: + remote_heads = ['force'] + # ssh: return remote's addchangegroup() + # http: return remote's addchangegroup() or 0 for error + ret = remote.unbundle(cg, remote_heads, 'push') + else: + # we return an integer indicating remote head count change + ret = remote.addchangegroup(cg, 'push', self.url(), + lock=lock) + # if we don't push, the common data is already useful + # everything exchange is public for now + phases.advanceboundary(self, 0, fut) + finally: + locallock.release() finally: if lock is not None: lock.release() @@ -1942,6 +1987,9 @@ node=hex(cl.node(clstart)), source=srctype, url=url, pending=p) + added = [cl.node(r) for r in xrange(clstart, clend)] + if srctype != 'strip': + phases.advanceboundary(self, 0, added) # make changelog see real files again cl.finalize(trp) @@ -1958,9 +2006,8 @@ self.hook("changegroup", node=hex(cl.node(clstart)), source=srctype, url=url) - for i in xrange(clstart, clend): - self.hook("incoming", node=hex(cl.node(i)), - source=srctype, url=url) + for n in added: + self.hook("incoming", node=hex(n), source=srctype, url=url) # never return 0 here: if dh < 0: diff -r b0a88bda3381 -r 49a5db5b10de mercurial/mdiff.py --- a/mercurial/mdiff.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/mdiff.py Mon Nov 21 13:11:17 2011 -0600 @@ -67,14 +67,81 @@ def wsclean(opts, text, blank=True): if opts.ignorews: - text = re.sub('[ \t\r]+', '', text) + text = bdiff.fixws(text, 1) elif opts.ignorewsamount: - text = re.sub('[ \t\r]+', ' ', text) - text = text.replace(' \n', '\n') + text = bdiff.fixws(text, 0) if blank and opts.ignoreblanklines: text = re.sub('\n+', '\n', text).strip('\n') return text +def splitblock(base1, lines1, base2, lines2, opts): + # The input lines matches except for interwoven blank lines. We + # transform it into a sequence of matching blocks and blank blocks. + lines1 = [(wsclean(opts, l) and 1 or 0) for l in lines1] + lines2 = [(wsclean(opts, l) and 1 or 0) for l in lines2] + s1, e1 = 0, len(lines1) + s2, e2 = 0, len(lines2) + while s1 < e1 or s2 < e2: + i1, i2, btype = s1, s2, '=' + if (i1 >= e1 or lines1[i1] == 0 + or i2 >= e2 or lines2[i2] == 0): + # Consume the block of blank lines + btype = '~' + while i1 < e1 and lines1[i1] == 0: + i1 += 1 + while i2 < e2 and lines2[i2] == 0: + i2 += 1 + else: + # Consume the matching lines + while i1 < e1 and lines1[i1] == 1 and lines2[i2] == 1: + i1 += 1 + i2 += 1 + yield [base1 + s1, base1 + i1, base2 + s2, base2 + i2], btype + s1 = i1 + s2 = i2 + +def allblocks(text1, text2, opts=None, lines1=None, lines2=None, refine=False): + """Return (block, type) tuples, where block is an mdiff.blocks + line entry. type is '=' for blocks matching exactly one another + (bdiff blocks), '!' for non-matching blocks and '~' for blocks + matching only after having filtered blank lines. If refine is True, + then '~' blocks are refined and are only made of blank lines. + line1 and line2 are text1 and text2 split with splitnewlines() if + they are already available. + """ + if opts is None: + opts = defaultopts + if opts.ignorews or opts.ignorewsamount: + text1 = wsclean(opts, text1, False) + text2 = wsclean(opts, text2, False) + diff = bdiff.blocks(text1, text2) + for i, s1 in enumerate(diff): + # The first match is special. + # we've either found a match starting at line 0 or a match later + # in the file. If it starts later, old and new below will both be + # empty and we'll continue to the next match. + if i > 0: + s = diff[i - 1] + else: + s = [0, 0, 0, 0] + s = [s[1], s1[0], s[3], s1[2]] + + # bdiff sometimes gives huge matches past eof, this check eats them, + # and deals with the special first match case described above + if s[0] != s[1] or s[2] != s[3]: + type = '!' + if opts.ignoreblanklines: + if lines1 is None: + lines1 = splitnewlines(text1) + if lines2 is None: + lines2 = splitnewlines(text2) + old = wsclean(opts, "".join(lines1[s[0]:s[1]])) + new = wsclean(opts, "".join(lines2[s[2]:s[3]])) + if old == new: + type = '~' + yield s, type + yield s1, '=' + def diffline(revs, a, b, opts): parts = ['diff'] if opts.git: @@ -100,6 +167,9 @@ return "" epoch = util.datestr((0, 0)) + fn1 = util.pconvert(fn1) + fn2 = util.pconvert(fn2) + if not opts.text and (util.binary(a) or util.binary(b)): if a and b and len(a) == len(b) and a == b: return "" @@ -197,39 +267,15 @@ # below finds the spaces between those matching sequences and translates # them into diff output. # - if opts.ignorews or opts.ignorewsamount: - t1 = wsclean(opts, t1, False) - t2 = wsclean(opts, t2, False) - - diff = bdiff.blocks(t1, t2) hunk = None - for i, s1 in enumerate(diff): - # The first match is special. - # we've either found a match starting at line 0 or a match later - # in the file. If it starts later, old and new below will both be - # empty and we'll continue to the next match. - if i > 0: - s = diff[i - 1] - else: - s = [0, 0, 0, 0] + for s, stype in allblocks(t1, t2, opts, l1, l2): + if stype != '!': + continue delta = [] - a1 = s[1] - a2 = s1[0] - b1 = s[3] - b2 = s1[2] - + a1, a2, b1, b2 = s old = l1[a1:a2] new = l2[b1:b2] - # bdiff sometimes gives huge matches past eof, this check eats them, - # and deals with the special first match case described above - if not old and not new: - continue - - if opts.ignoreblanklines: - if wsclean(opts, "".join(old)) == wsclean(opts, "".join(new)): - continue - astart = contextstart(a1) bstart = contextstart(b1) prev = None diff -r b0a88bda3381 -r 49a5db5b10de mercurial/patch.py --- a/mercurial/patch.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/patch.py Mon Nov 21 13:11:17 2011 -0600 @@ -566,8 +566,8 @@ return self.changed | self.removed # @@ -start,len +start,len @@ or @@ -start +start @@ if len is 1 -unidesc = re.compile('@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@') -contextdesc = re.compile('(---|\*\*\*) (\d+)(,(\d+))? (---|\*\*\*)') +unidesc = re.compile('@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@') +contextdesc = re.compile('(?:---|\*\*\*) (\d+)(?:,(\d+))? (?:---|\*\*\*)') eolmodes = ['strict', 'crlf', 'lf', 'auto'] class patchfile(object): @@ -830,7 +830,7 @@ m = unidesc.match(self.desc) if not m: raise PatchError(_("bad hunk #%d") % self.number) - self.starta, foo, self.lena, self.startb, foo2, self.lenb = m.groups() + self.starta, self.lena, self.startb, self.lenb = m.groups() if self.lena is None: self.lena = 1 else: @@ -857,7 +857,7 @@ m = contextdesc.match(self.desc) if not m: raise PatchError(_("bad hunk #%d") % self.number) - foo, self.starta, foo2, aend, foo3 = m.groups() + self.starta, aend = m.groups() self.starta = int(self.starta) if aend is None: aend = self.starta @@ -890,7 +890,7 @@ m = contextdesc.match(l) if not m: raise PatchError(_("bad hunk #%d") % self.number) - foo, self.startb, foo2, bend, foo3 = m.groups() + self.startb, bend = m.groups() self.startb = int(self.startb) if bend is None: bend = self.startb @@ -1527,10 +1527,10 @@ class GitDiffRequired(Exception): pass -def diffopts(ui, opts=None, untrusted=False): +def diffopts(ui, opts=None, untrusted=False, section='diff'): def get(key, name=None, getter=ui.configbool): return ((opts and opts.get(key)) or - getter('diff', name or key, None, untrusted=untrusted)) + getter(section, name or key, None, untrusted=untrusted)) return mdiff.diffopts( text=opts and opts.get('text'), git=get('git'), diff -r b0a88bda3381 -r 49a5db5b10de mercurial/phases.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/phases.py Mon Nov 21 13:11:17 2011 -0600 @@ -0,0 +1,102 @@ +# Mercurial phases support code +# +# Copyright 2011 Pierre-Yves David +# Logilab SA +# Augie Fackler +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +import errno +from node import nullid, bin, hex, short +from i18n import _ + +allphases = range(2) +trackedphases = allphases[1:] + +def readroots(repo): + """Read phase roots from disk""" + roots = [set() for i in allphases] + roots[0].add(nullid) + try: + f = repo.sopener('phaseroots') + try: + for line in f: + phase, nh = line.strip().split() + roots[int(phase)].add(bin(nh)) + finally: + f.close() + except IOError, inst: + if inst.errno != errno.ENOENT: + raise + return roots + +def writeroots(repo): + """Write phase roots from disk""" + f = repo.sopener('phaseroots', 'w', atomictemp=True) + try: + for phase, roots in enumerate(repo._phaseroots): + for h in roots: + f.write('%i %s\n' % (phase, hex(h))) + repo._dirtyphases = False + finally: + f.close() + +def filterunknown(repo, phaseroots=None): + """remove unknown nodes from the phase boundary + + no data is lost as unknown node only old data for their descentants + """ + if phaseroots is None: + phaseroots = repo._phaseroots + for phase, nodes in enumerate(phaseroots): + missing = [node for node in nodes if node not in repo] + if missing: + for mnode in missing: + msg = _('Removing unknown node %(n)s from %(p)i-phase boundary') + repo.ui.debug(msg, {'n': short(mnode), 'p': phase}) + nodes.symmetric_difference_update(missing) + repo._dirtyphases = True + +def advanceboundary(repo, targetphase, nodes): + """Add nodes to a phase changing other nodes phases if necessary. + + This function move boundary *forward* this means that all nodes are set + in the target phase or kept in a *lower* phase. + + Simplify boundary to contains phase roots only.""" + for phase in xrange(targetphase + 1, len(allphases)): + # filter nodes that are not in a compatible phase already + # XXX rev phase cache might have been invalidated by a previous loop + # XXX we need to be smarter here + nodes = [n for n in nodes if repo[n].phase() >= phase] + if not nodes: + break # no roots to move anymore + roots = repo._phaseroots[phase] + olds = roots.copy() + ctxs = list(repo.set('roots((%ln::) - (%ln::%ln))', olds, olds, nodes)) + roots.clear() + roots.update(ctx.node() for ctx in ctxs) + if olds != roots: + # invalidate cache (we probably could be smarter here + if '_phaserev' in vars(repo): + del repo._phaserev + repo._dirtyphases = True + +def retractboundary(repo, targetphase, nodes): + """Set nodes back to a phase changing other nodes phases if necessary. + + This function move boundary *backward* this means that all nodes are set + in the target phase or kept in a *higher* phase. + + Simplify boundary to contains phase roots only.""" + currentroots = repo._phaseroots[targetphase] + newroots = [n for n in nodes if repo[n].phase() < targetphase] + if newroots: + currentroots.update(newroots) + ctxs = repo.set('roots(%ln::)', currentroots) + currentroots.intersection_update(ctx.node() for ctx in ctxs) + if '_phaserev' in vars(repo): + del repo._phaserev + repo._dirtyphases = True + diff -r b0a88bda3381 -r 49a5db5b10de mercurial/pure/bdiff.py --- a/mercurial/pure/bdiff.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/pure/bdiff.py Mon Nov 21 13:11:17 2011 -0600 @@ -5,7 +5,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 struct, difflib +import struct, difflib, re def splitnewlines(text): '''like str.splitlines, but only split on newlines.''' @@ -78,3 +78,10 @@ d = _normalizeblocks(an, bn, d) return [(i, i + n, j, j + n) for (i, j, n) in d] +def fixws(text, allws): + if allws: + text = re.sub('[ \t\r]+', '', text) + else: + text = re.sub('[ \t\r]+', ' ', text) + text = text.replace(' \n', '\n') + return text diff -r b0a88bda3381 -r 49a5db5b10de mercurial/repair.py --- a/mercurial/repair.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/repair.py Mon Nov 21 13:11:17 2011 -0600 @@ -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. -from mercurial import changegroup, bookmarks +from mercurial import changegroup, bookmarks, phases from mercurial.node import short from mercurial.i18n import _ import os @@ -145,7 +145,9 @@ for m in updatebm: bm[m] = repo['.'].node() bookmarks.write(repo) - + # remove potential unknown phase + # XXX using to_strip data would be faster + phases.filterunknown(repo) except: if backupfile: ui.warn(_("strip failed, full bundle stored in '%s'\n") diff -r b0a88bda3381 -r 49a5db5b10de mercurial/scmutil.py --- a/mercurial/scmutil.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/scmutil.py Mon Nov 21 13:11:17 2011 -0600 @@ -98,7 +98,7 @@ if p in lparts[1:]: pos = lparts.index(p) base = os.path.join(*parts[:pos]) - raise util.Abort(_('path %r is inside nested repo %r') + raise util.Abort(_("path '%s' is inside nested repo %r") % (path, base)) parts.pop() @@ -123,7 +123,7 @@ elif (stat.S_ISDIR(st.st_mode) and os.path.isdir(os.path.join(curpath, '.hg'))): if not self.callback or not self.callback(curpath): - raise util.Abort(_('path %r is inside nested repo %r') % + raise util.Abort(_("path '%s' is inside nested repo %r") % (path, prefix)) prefixes.append(prefix) parts.pop() diff -r b0a88bda3381 -r 49a5db5b10de mercurial/subrepo.py --- a/mercurial/subrepo.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/subrepo.py Mon Nov 21 13:11:17 2011 -0600 @@ -353,6 +353,15 @@ unit=_('files'), total=total) ui.progress(_('archiving (%s)') % relpath, None) + def walk(self, match): + ''' + walk recursively through the directory tree, finding all files + matched by the match function + ''' + pass + + def forget(self, files): + pass class hgsubrepo(abstractsubrepo): def __init__(self, ctx, path, state): @@ -543,6 +552,13 @@ ctx = self._repo[rev] return ctx.flags(name) + def walk(self, match): + ctx = self._repo[None] + return ctx.walk(match) + + def forget(self, files): + ctx = self._repo[None] + ctx.forget(files) class svnsubrepo(abstractsubrepo): def __init__(self, ctx, path, state): diff -r b0a88bda3381 -r 49a5db5b10de mercurial/templatekw.py --- a/mercurial/templatekw.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/templatekw.py Mon Nov 21 13:11:17 2011 -0600 @@ -275,6 +275,10 @@ """ return ctx.hex() +def showphase(repo, ctx, templ, **args): + """:rev: Integer. The changeset phase.""" + return ctx.phase() + def showrev(repo, ctx, templ, **args): """:rev: Integer. The repository-local changeset revision number.""" return ctx.rev() @@ -312,6 +316,7 @@ 'latesttagdistance': showlatesttagdistance, 'manifest': showmanifest, 'node': shownode, + 'phase': showphase, 'rev': showrev, 'tags': showtags, } diff -r b0a88bda3381 -r 49a5db5b10de mercurial/util.py --- a/mercurial/util.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/util.py Mon Nov 21 13:11:17 2011 -0600 @@ -1495,7 +1495,7 @@ """ _safechars = "!~*'()+" - _safepchars = "/!~*'()+" + _safepchars = "/!~*'()+:" _matchscheme = re.compile(r'^[a-zA-Z0-9+.\-]+:').match def __init__(self, path, parsequery=True, parsefragment=True): @@ -1607,8 +1607,8 @@ Examples: - >>> str(url('http://user:pw@host:80/?foo#bar')) - 'http://user:pw@host:80/?foo#bar' + >>> str(url('http://user:pw@host:80/c:/bob?fo:oo#ba:ar')) + 'http://user:pw@host:80/c:/bob?fo:oo#ba:ar' >>> str(url('http://user:pw@host:80/?foo=bar&baz=42')) 'http://user:pw@host:80/?foo=bar&baz=42' >>> str(url('http://user:pw@host:80/?foo=bar%3dbaz')) diff -r b0a88bda3381 -r 49a5db5b10de mercurial/windows.py --- a/mercurial/windows.py Sun Nov 20 23:09:32 2011 +0100 +++ b/mercurial/windows.py Mon Nov 21 13:11:17 2011 -0600 @@ -26,7 +26,7 @@ unlink = win32.unlink nulldev = 'NUL:' -umask = 002 +umask = 0022 # wrap osutil.posixfile to provide friendlier exceptions def posixfile(name, mode='r', buffering=-1): diff -r b0a88bda3381 -r 49a5db5b10de setup.py --- a/setup.py Sun Nov 20 23:09:32 2011 +0100 +++ b/setup.py Mon Nov 21 13:11:17 2011 -0600 @@ -44,7 +44,7 @@ pass if isironpython: - print "warning: IronPython detected (no bz2 support)" + sys.stderr.write("warning: IronPython detected (no bz2 support)\n") else: try: import bz2 @@ -68,6 +68,19 @@ from distutils.sysconfig import get_python_inc from distutils.version import StrictVersion +convert2to3 = '--c2to3' in sys.argv +if convert2to3: + try: + from distutils.command.build_py import build_py_2to3 as build_py + from lib2to3.refactor import get_fixers_from_package as getfixers + except ImportError: + if sys.version_info[0] < 3: + raise SystemExit("--c2to3 is only compatible with python3.") + raise + sys.path.append('contrib') +elif sys.version_info[0] >= 3: + raise SystemExit("setup.py with python3 needs --c2to3 (experimental)") + scripts = ['hg'] if os.name == 'nt': scripts.append('contrib/win32/hg.bat') @@ -108,6 +121,8 @@ try: import py2exe py2exeloaded = True + # import py2exe's patched Distribution class + from distutils.core import Distribution except ImportError: py2exeloaded = False @@ -186,6 +201,17 @@ except ImportError: version = 'unknown' +class hgbuild(build): + # Insert hgbuildmo first so that files in mercurial/locale/ are found + # when build_py is run next. + sub_commands = [('build_mo', None), + # We also need build_ext before build_py. Otherwise, when 2to3 is called (in + # build_py), it will not find osutil & friends, thinking that those modules are + # global and, consequently, making a mess, now that all module imports are + # global. + ('build_ext', build.has_ext_modules), + ] + build.sub_commands + class hgbuildmo(build): description = "build translations (.mo files)" @@ -217,13 +243,20 @@ self.make_file([pofile], mobuildfile, spawn, (cmd,)) -# Insert hgbuildmo first so that files in mercurial/locale/ are found -# when build_py is run next. -build.sub_commands.insert(0, ('build_mo', None)) +class hgdist(Distribution): + pure = 0 -Distribution.pure = 0 -Distribution.global_options.append(('pure', None, "use pure (slow) Python " - "code instead of C extensions")) + global_options = Distribution.global_options + \ + [('pure', None, "use pure (slow) Python " + "code instead of C extensions"), + ('c2to3', None, "(experimental!) convert " + "code with 2to3"), + ] + + def has_ext_modules(self): + # self.ext_modules is emptied in hgbuildpy.finalize_options which is + # too late for some cases + return not self.pure and Distribution.has_ext_modules(self) class hgbuildext(build_ext): @@ -237,6 +270,9 @@ ext.name) class hgbuildpy(build_py): + if convert2to3: + fixer_names = sorted(set(getfixers("lib2to3.fixes") + + getfixers("hgfixes"))) def finalize_options(self): build_py.finalize_options(self) @@ -327,7 +363,7 @@ fp.close() # skip binary files - if '\0' in data: + if b('\0') in data: continue data = data.replace('@LIBDIR@', libdir.encode('string_escape')) @@ -335,7 +371,8 @@ fp.write(data) fp.close() -cmdclass = {'build_mo': hgbuildmo, +cmdclass = {'build': hgbuild, + 'build_mo': hgbuildmo, 'build_ext': hgbuildext, 'build_py': hgbuildpy, 'build_hgextindex': buildhgextindex, @@ -435,6 +472,7 @@ data_files=datafiles, package_data=packagedata, cmdclass=cmdclass, + distclass=hgdist, options=dict(py2exe=dict(packages=['hgext', 'email']), bdist_mpkg=dict(zipdist=True, license='COPYING', diff -r b0a88bda3381 -r 49a5db5b10de tests/heredoctest.py --- a/tests/heredoctest.py Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/heredoctest.py Mon Nov 21 13:11:17 2011 -0600 @@ -1,16 +1,19 @@ -import doctest, tempfile, os, sys - -if __name__ == "__main__": - if 'TERM' in os.environ: - del os.environ['TERM'] - - fd, name = tempfile.mkstemp(suffix='hg-tst') +import sys - try: - os.write(fd, sys.stdin.read()) - os.close(fd) - failures, _ = doctest.testfile(name, module_relative=False) - if failures: - sys.exit(1) - finally: - os.remove(name) +globalvars = {} +localvars = {} +lines = sys.stdin.readlines() +while lines: + l = lines.pop(0) + if l.startswith('SALT'): + print l[:-1] + elif l.startswith('>>> '): + snippet = l[4:] + while lines and lines[0].startswith('... '): + l = lines.pop(0) + snippet += "\n" + l[4:] + c = compile(snippet, '', 'single') + try: + exec c in globalvars, localvars + except Exception, inst: + print repr(inst) diff -r b0a88bda3381 -r 49a5db5b10de tests/hghave --- a/tests/hghave Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/hghave Mon Nov 21 13:11:17 2011 -0600 @@ -161,7 +161,7 @@ return matchoutput('p4 -V', r'Rev\. P4/') and matchoutput('p4d -V', r'Rev\. P4D/') def has_symlink(): - return hasattr(os, "symlink") + return hasattr(os, "symlink") # FIXME: should also check file system and os def has_tla(): return matchoutput('tla --version 2>&1', r'The GNU Arch Revision') @@ -209,6 +209,18 @@ except ImportError: return False +def has_windows(): + return os.name == 'nt' + +def has_system_sh(): + return os.name != 'nt' + +def has_serve(): + return os.name != 'nt' # gross approximation + +def has_tic(): + return matchoutput('test -x "`which tic`"', '') + checks = { "baz": (has_baz, "GNU Arch baz client"), "bzr": (has_bzr, "Canonical's Bazaar client"), @@ -231,14 +243,18 @@ "p4": (has_p4, "Perforce server and client"), "pyflakes": (has_pyflakes, "Pyflakes python linter"), "pygments": (has_pygments, "Pygments source highlighting library"), + "serve": (has_serve, "platform and python can manage 'hg serve -d'"), "ssl": (has_ssl, "python >= 2.6 ssl module and python OpenSSL"), "svn": (has_svn, "subversion client and admin tools"), "svn13": (has_svn13, "subversion client and admin tools >= 1.3"), "svn15": (has_svn15, "subversion client and admin tools >= 1.5"), "svn-bindings": (has_svn_bindings, "subversion python bindings"), "symlink": (has_symlink, "symbolic links"), + "system-sh": (has_system_sh, "system() uses sh"), + "tic": (has_tic, "terminfo compiler"), "tla": (has_tla, "GNU Arch tla client"), "unix-permissions": (has_unix_permissions, "unix-style permissions"), + "windows": (has_windows, "Windows"), } def list_features(): diff -r b0a88bda3381 -r 49a5db5b10de tests/run-tests.py --- a/tests/run-tests.py Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/run-tests.py Mon Nov 21 13:11:17 2011 -0600 @@ -87,7 +87,7 @@ SKIPPED_STATUS = 80 SKIPPED_PREFIX = 'skipped: ' FAILED_PREFIX = 'hghave check failed: ' -PYTHON = sys.executable +PYTHON = sys.executable.replace('\\', '/') IMPL_PATH = 'PYTHONPATH' if 'java' in sys.platform: IMPL_PATH = 'JYTHONPATH' @@ -508,7 +508,7 @@ return run(cmd, wd, options, replacements) def shtest(test, wd, options, replacements): - cmd = '"%s"' % test + cmd = '%s "%s"' % (options.shell, test) vlog("# Running", cmd) return run(cmd, wd, options, replacements) @@ -521,43 +521,103 @@ def stringescape(s): return escapesub(escapef, s) -def transformtst(lines): - inblock = False - for l in lines: - if inblock: - if l.startswith(' $ ') or not l.startswith(' '): - inblock = False - yield ' > EOF\n' - yield l - else: - yield ' > ' + l[2:] +def rematch(el, l): + try: + # ensure that the regex matches to the end of the string + return re.match(el + r'\Z', l) + except re.error: + # el is an invalid regex + return False + +def globmatch(el, l): + # The only supported special characters are * and ? plus / which also + # matches \ on windows. Escaping of these caracters is supported. + i, n = 0, len(el) + res = '' + while i < n: + c = el[i] + i += 1 + if c == '\\' and el[i] in '*?\\/': + res += el[i - 1:i + 1] + i += 1 + elif c == '*': + res += '.*' + elif c == '?': + res += '.' + elif c == '/' and os.name == 'nt': + res += '[/\\\\]' else: - if l.startswith(' >>> '): - inblock = True - yield ' $ %s -m heredoctest < ' + l[2:] - else: - yield l - if inblock: - yield ' > EOF\n' + res += re.escape(c) + return rematch(res, l) + +def linematch(el, l): + if el == l: # perfect match (fast) + return True + if (el and + (el.endswith(" (re)\n") and rematch(el[:-6] + '\n', l) or + el.endswith(" (glob)\n") and globmatch(el[:-8] + '\n', l) or + el.endswith(" (esc)\n") and + (el[:-7].decode('string-escape') + '\n' == l or + el[:-7].decode('string-escape').replace('\r', '') + + '\n' == l and os.name == 'nt'))): + return True + return False def tsttest(test, wd, options, replacements): - t = open(test) - out = [] - script = [] + # We generate a shell script which outputs unique markers to line + # up script results with our source. These markers include input + # line number and the last return code salt = "SALT" + str(time.time()) + def addsalt(line, inpython): + if inpython: + script.append('%s %d 0\n' % (salt, line)) + else: + script.append('echo %s %s $?\n' % (salt, line)) - pos = prepos = -1 + # After we run the shell script, we re-unify the script output + # with non-active parts of the source, with synchronization by our + # SALT line number markers. The after table contains the + # non-active components, ordered by line number after = {} + pos = prepos = -1 + + # Expected shellscript output expected = {} - for n, l in enumerate(transformtst(t)): + + # We keep track of whether or not we're in a Python block so we + # can generate the surrounding doctest magic + inpython = False + + f = open(test) + t = f.readlines() + f.close() + + script = [] + for n, l in enumerate(t): if not l.endswith('\n'): l += '\n' - if l.startswith(' $ '): # commands + if l.startswith(' >>> '): # python inlines after.setdefault(pos, []).append(l) prepos = pos pos = n - script.append('echo %s %s $?\n' % (salt, n)) + if not inpython: + # we've just entered a Python block, add the header + inpython = True + addsalt(prepos, False) # make sure we report the exit code + script.append('%s -m heredoctest < '): # continuations after.setdefault(prepos, []).append(l) @@ -566,21 +626,24 @@ # queue up a list of expected results expected.setdefault(pos, []).append(l[2:]) else: + if inpython: + script.append("EOF\n") + inpython = False # non-command/result - queue up for merged output after.setdefault(pos, []).append(l) - t.close() + if inpython: + script.append("EOF\n") + addsalt(n + 1, False) - script.append('echo %s %s $?\n' % (salt, n + 1)) - + # Write out the script and execute it fd, name = tempfile.mkstemp(suffix='hg-tst') - try: for l in script: os.write(fd, l) os.close(fd) - cmd = '"%s" "%s"' % (options.shell, name) + cmd = '%s "%s"' % (options.shell, name) vlog("# Running", cmd) exitcode, output = run(cmd, wd, options, replacements) # do not merge output if skipped, return hghave message instead @@ -590,32 +653,7 @@ finally: os.remove(name) - def rematch(el, l): - try: - # ensure that the regex matches to the end of the string - return re.match(el + r'\Z', l) - except re.error: - # el is an invalid regex - return False - - def globmatch(el, l): - # The only supported special characters are * and ?. Escaping is - # supported. - i, n = 0, len(el) - res = '' - while i < n: - c = el[i] - i += 1 - if c == '\\' and el[i] in '*?\\': - res += el[i - 1:i + 1] - i += 1 - elif c == '*': - res += '.*' - elif c == '?': - res += '.' - else: - res += re.escape(c) - return rematch(res, l) + # Merge the script output back into a unified test pos = -1 postout = [] @@ -627,20 +665,16 @@ if lout: if lcmd: + # output block had no trailing newline, clean up lout += ' (no-eol)\n' + # find the expected output at the current position el = None if pos in expected and expected[pos]: el = expected[pos].pop(0) - if el == lout: # perfect match (fast) - postout.append(" " + lout) - elif (el and - (el.endswith(" (re)\n") and rematch(el[:-6] + '\n', lout) or - el.endswith(" (glob)\n") and globmatch(el[:-8] + '\n', lout) - or el.endswith(" (esc)\n") and - el.decode('string-escape') == l)): - postout.append(" " + el) # fallback regex/glob/esc match + if linematch(el, lout): + postout.append(" " + el) else: if needescape(lout): lout = stringescape(lout.rstrip('\n')) + " (esc)\n" @@ -652,6 +686,7 @@ if ret != 0: postout.append(" [%s]\n" % ret) if pos in after: + # merge in non-active test bits postout += after.pop(pos) pos = int(lcmd.split()[0]) @@ -832,15 +867,26 @@ # Make a tmp subdirectory to work in testtmp = os.environ["TESTTMP"] = os.environ["HOME"] = \ - os.path.join(HGTMP, os.path.basename(test)) + os.path.join(HGTMP, os.path.basename(test)).replace('\\', '/') - os.mkdir(testtmp) - ret, out = runner(testpath, testtmp, options, [ - (re.escape(testtmp), '$TESTTMP'), + replacements = [ (r':%s\b' % options.port, ':$HGPORT'), (r':%s\b' % (options.port + 1), ':$HGPORT1'), (r':%s\b' % (options.port + 2), ':$HGPORT2'), - ]) + ] + if os.name == 'nt': + replacements.append((r'\r\n', '\n')) + replacements.append( + (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or + c in '/\\' and r'[/\\]' or + c.isdigit() and c or + '\\' + c + for c in testtmp), '$TESTTMP')) + else: + replacements.append((re.escape(testtmp), '$TESTTMP')) + + os.mkdir(testtmp) + ret, out = runner(testpath, testtmp, options, replacements) vlog("# Ret was:", ret) mark = '.' @@ -853,7 +899,7 @@ refout = None # to match "out is None" elif os.path.exists(ref): f = open(ref, "r") - refout = list(transformtst(splitnewlines(f.read()))) + refout = list(splitnewlines(f.read())) f.close() else: refout = [] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-acl.t --- a/tests/test-acl.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-acl.t Mon Nov 21 13:11:17 2011 -0600 @@ -868,10 +868,10 @@ added 3 changesets with 3 changes to 3 files calling hook pretxnchangegroup.acl: hgext.acl.hook acl: checking access for user "barney" - error: pretxnchangegroup.acl hook raised an exception: [Errno 2] No such file or directory: '../acl.config' + error: pretxnchangegroup.acl hook raised an exception: [Errno 2] *: '../acl.config' (glob) transaction abort! rollback completed - abort: No such file or directory: ../acl.config + abort: *: ../acl.config (glob) no rollback information available 0:6675d58eff77 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-add.t --- a/tests/test-add.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-add.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" no-windows || exit 80 + $ hg init a $ cd a $ echo a > a @@ -86,7 +88,7 @@ $ hg merge merging a warning: conflicts during merge. - merging a failed! + merging a incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] @@ -121,11 +123,11 @@ ? a.orig $ hg add c && echo "unexpected addition of missing file" - c: No such file or directory + c: * (glob) [1] $ echo c > c $ hg add d c && echo "unexpected addition of missing file" - d: No such file or directory + d: * (glob) [1] $ hg st M a diff -r b0a88bda3381 -r 49a5db5b10de tests/test-addremove-similar.t --- a/tests/test-addremove-similar.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-addremove-similar.t Mon Nov 21 13:11:17 2011 -0600 @@ -81,7 +81,7 @@ $ hg addremove -s80 removing d/a adding d/b - recording removal of d/a as rename to d/b (100% similar) + recording removal of d/a as rename to d/b (100% similar) (glob) $ hg debugstate r 0 0 1970-01-01 00:00:00 d/a a 0 -1 unset d/b @@ -91,10 +91,10 @@ no copies found here (since the target isn't in d $ hg addremove -s80 d - removing d/b + removing d/b (glob) copies here $ hg addremove -s80 adding c - recording removal of d/a as rename to c (100% similar) + recording removal of d/a as rename to c (100% similar) (glob) diff -r b0a88bda3381 -r 49a5db5b10de tests/test-addremove.t --- a/tests/test-addremove.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-addremove.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" no-windows || exit 80 + $ hg init rep $ cd rep $ mkdir dir diff -r b0a88bda3381 -r 49a5db5b10de tests/test-alias.t --- a/tests/test-alias.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-alias.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" system-sh || exit 80 + $ HGFOO=BAR; export HGFOO $ cat >> $HGRCPATH < [extensions] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-annotate.t --- a/tests/test-annotate.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-annotate.t Mon Nov 21 13:11:17 2011 -0600 @@ -2,7 +2,8 @@ init - $ hg init + $ hg init repo + $ cd repo commit @@ -253,3 +254,56 @@ $ hg ann nosuchfile abort: nosuchfile: no such file in rev e9e6b4fa872f [255] + +Test annotate with whitespace options + + $ cd .. + $ hg init repo-ws + $ cd repo-ws + $ cat > a < aa + > + > b b + > EOF + $ hg ci -Am "adda" + adding a + $ cat > a < a a + > + > + > b b + > EOF + $ hg ci -m "changea" + +Annotate with no option + + $ hg annotate a + 1: a a + 0: + 1: + 1: b b + +Annotate with --ignore-space-change + + $ hg annotate --ignore-space-change a + 1: a a + 1: + 0: + 0: b b + +Annotate with --ignore-all-space + + $ hg annotate --ignore-all-space a + 0: a a + 0: + 1: + 0: b b + +Annotate with --ignore-blank-lines (similar to no options case) + + $ hg annotate --ignore-blank-lines a + 1: a a + 0: + 1: + 1: b b + diff -r b0a88bda3381 -r 49a5db5b10de tests/test-archive.t --- a/tests/test-archive.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-archive.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + $ hg init test $ cd test $ echo foo>foo diff -r b0a88bda3381 -r 49a5db5b10de tests/test-audit-path.t --- a/tests/test-audit-path.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-audit-path.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,9 +1,11 @@ + $ "$TESTDIR/hghave" symlink || exit 80 + $ hg init should fail $ hg add .hg/00changelog.i - abort: path contains illegal component: .hg/00changelog.i + abort: path contains illegal component: .hg/00changelog.i (glob) [255] $ mkdir a @@ -16,7 +18,7 @@ should fail $ hg add b/b - abort: path 'b/b' traverses symbolic link 'b' + abort: path 'b/b' traverses symbolic link 'b' (glob) [255] should succeed @@ -26,7 +28,7 @@ should still fail - maybe $ hg add b/b - abort: path 'b/b' traverses symbolic link 'b' + abort: path 'b/b' traverses symbolic link 'b' (glob) [255] unbundle tampered bundle @@ -78,5 +80,5 @@ $ hg manifest -r4 /tmp/test $ hg update -Cr4 - abort: No such file or directory: $TESTTMP/target//tmp/test + abort: *: $TESTTMP/target//tmp/test (glob) [255] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-backout.t --- a/tests/test-backout.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-backout.t Mon Nov 21 13:11:17 2011 -0600 @@ -48,8 +48,8 @@ $ hg backout -d '3 0' --merge tip --tool=true removing a changeset 3:7f6d0f120113 backs out changeset 2:de31bdc76c0d - $ cat a 2>/dev/null || echo cat: a: No such file or directory - cat: a: No such file or directory + $ test -f a + [1] across branch diff -r b0a88bda3381 -r 49a5db5b10de tests/test-bad-pull.t --- a/tests/test-bad-pull.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-bad-pull.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,9 +1,11 @@ + $ "$TESTDIR/hghave" serve || exit 80 + $ hg clone http://localhost:$HGPORT/ copy abort: error: Connection refused [255] - $ test -d copy || echo copy: No such file or directory - copy: No such file or directory + $ test -d copy + [1] $ cat > dumb.py < import BaseHTTPServer, SimpleHTTPServer, os, signal diff -r b0a88bda3381 -r 49a5db5b10de tests/test-bdiff.py --- a/tests/test-bdiff.py Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-bdiff.py Mon Nov 21 13:11:17 2011 -0600 @@ -50,3 +50,17 @@ showdiff("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\ny\n\nx\n\nz\n") print "done" + +def testfixws(a, b, allws): + c = bdiff.fixws(a, allws) + if c != b: + print "*** fixws", repr(a), repr(b), allws + print "got:" + print repr(c) + +testfixws(" \ta\r b\t\n", "ab\n", 1) +testfixws(" \ta\r b\t\n", " a b\n", 0) +testfixws("", "", 1) +testfixws("", "", 0) + +print "done" diff -r b0a88bda3381 -r 49a5db5b10de tests/test-bdiff.py.out --- a/tests/test-bdiff.py.out Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-bdiff.py.out Mon Nov 21 13:11:17 2011 -0600 @@ -21,3 +21,4 @@ 6 6 'y\n\n' 9 9 'y\n\n' done +done diff -r b0a88bda3381 -r 49a5db5b10de tests/test-bisect.t --- a/tests/test-bisect.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-bisect.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" system-sh || exit 80 + $ hg init diff -r b0a88bda3381 -r 49a5db5b10de tests/test-bisect3.t --- a/tests/test-bisect3.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-bisect3.t Mon Nov 21 13:11:17 2011 -0600 @@ -14,15 +14,15 @@ $ hg add a $ hg ci -u test -d '0 0' -m '0' $ echo '1' >a - $ hg ci -u test -d '0 1' -m '1' + $ hg ci -u test -d '1 0' -m '1' branch 2-3 $ echo '2' >b $ hg add b - $ hg ci -u test -d '0 2' -m '2' + $ hg ci -u test -d '2 0' -m '2' $ echo '3' >b - $ hg ci -u test -d '0 3' -m '3' + $ hg ci -u test -d '3 0' -m '3' branch 4-8 @@ -30,30 +30,30 @@ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo '4' >c $ hg add c - $ hg ci -u test -d '0 4' -m '4' + $ hg ci -u test -d '4 0' -m '4' created new head $ echo '5' >c - $ hg ci -u test -d '0 5' -m '5' + $ hg ci -u test -d '5 0' -m '5' $ echo '6' >c - $ hg ci -u test -d '0 6' -m '6' + $ hg ci -u test -d '6 0' -m '6' $ echo '7' >c - $ hg ci -u test -d '0 7' -m '7' + $ hg ci -u test -d '7 0' -m '7' $ echo '8' >c - $ hg ci -u test -d '0 8' -m '8' + $ hg ci -u test -d '8 0' -m '8' merge $ hg merge -r 3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) - $ hg ci -u test -d '0 9' -m '9=8+3' + $ hg ci -u test -d '9 0' -m '9=8+3' $ echo '10' >a - $ hg ci -u test -d '0 10' -m '10' + $ hg ci -u test -d '10 0' -m '10' $ echo '11' >a - $ hg ci -u test -d '0 11' -m '11' + $ hg ci -u test -d '11 0' -m '11' $ echo '12' >a - $ hg ci -u test -d '0 12' -m '12' + $ hg ci -u test -d '12 0' -m '12' unrelated branch @@ -61,10 +61,10 @@ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo '13' >d $ hg add d - $ hg ci -u test -d '0 13' -m '13' + $ hg ci -u test -d '13 0' -m '13' created new head $ echo '14' >d - $ hg ci -u test -d '0 14' -m '14' + $ hg ci -u test -d '14 0' -m '14' mark changesets @@ -72,140 +72,140 @@ $ hg bisect --good 4 $ hg bisect --good 6 $ hg bisect --bad 12 - Testing changeset 9:8bcbdb072033 (6 changesets remaining, ~2 tests) + Testing changeset 9:2197c557e14c (6 changesets remaining, ~2 tests) 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg bisect --bad 10 - Testing changeset 8:3cd112f87d77 (4 changesets remaining, ~2 tests) + Testing changeset 8:e74a86251f58 (4 changesets remaining, ~2 tests) 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg bisect --skip 7 - Testing changeset 8:3cd112f87d77 (4 changesets remaining, ~2 tests) + Testing changeset 8:e74a86251f58 (4 changesets remaining, ~2 tests) 0 files updated, 0 files merged, 0 files removed, 0 files unresolved test template $ hg log --template '{rev}:{node|short} {bisect}\n' - 14:cecd84203acc - 13:86f7c8cdb6df - 12:a76089b5f47c bad - 11:5c3eb122d29c bad (implicit) - 10:b097cef2be03 bad - 9:8bcbdb072033 untested - 8:3cd112f87d77 untested - 7:577e237a73bd skipped - 6:e597fa2707c5 good - 5:b9cea37a76bc good (implicit) - 4:da6b357259d7 good - 3:e7f031aee8ca ignored - 2:b1ad1b6bcc5c ignored - 1:37f42ae8b45e good (implicit) + 14:cbf2f3105bbf + 13:e07efca37c43 + 12:98c6b56349c0 bad + 11:03f491376e63 bad (implicit) + 10:c012b15e2409 bad + 9:2197c557e14c untested + 8:e74a86251f58 untested + 7:a5f87041c899 skipped + 6:7d997bedcd8d good + 5:2dd1875f1028 good (implicit) + 4:2a1daef14cd4 good + 3:8417d459b90c ignored + 2:e1355ee1f23e ignored + 1:ce7c85e06a9f good (implicit) 0:b4e73ffab476 good (implicit) $ hg log --template '{bisect|shortbisect} {rev}:{node|short}\n' - 14:cecd84203acc - 13:86f7c8cdb6df - B 12:a76089b5f47c - B 11:5c3eb122d29c - B 10:b097cef2be03 - U 9:8bcbdb072033 - U 8:3cd112f87d77 - S 7:577e237a73bd - G 6:e597fa2707c5 - G 5:b9cea37a76bc - G 4:da6b357259d7 - I 3:e7f031aee8ca - I 2:b1ad1b6bcc5c - G 1:37f42ae8b45e + 14:cbf2f3105bbf + 13:e07efca37c43 + B 12:98c6b56349c0 + B 11:03f491376e63 + B 10:c012b15e2409 + U 9:2197c557e14c + U 8:e74a86251f58 + S 7:a5f87041c899 + G 6:7d997bedcd8d + G 5:2dd1875f1028 + G 4:2a1daef14cd4 + I 3:8417d459b90c + I 2:e1355ee1f23e + G 1:ce7c85e06a9f G 0:b4e73ffab476 test style $ hg log --style bisect - changeset: 14:cecd84203acc + changeset: 14:cbf2f3105bbf bisect: tag: tip user: test - date: Wed Dec 31 23:59:46 1969 -0000 + date: Thu Jan 01 00:00:14 1970 +0000 summary: 14 - changeset: 13:86f7c8cdb6df + changeset: 13:e07efca37c43 bisect: - parent: 3:e7f031aee8ca + parent: 3:8417d459b90c user: test - date: Wed Dec 31 23:59:47 1969 -0000 + date: Thu Jan 01 00:00:13 1970 +0000 summary: 13 - changeset: 12:a76089b5f47c + changeset: 12:98c6b56349c0 bisect: bad user: test - date: Wed Dec 31 23:59:48 1969 -0000 + date: Thu Jan 01 00:00:12 1970 +0000 summary: 12 - changeset: 11:5c3eb122d29c + changeset: 11:03f491376e63 bisect: bad (implicit) user: test - date: Wed Dec 31 23:59:49 1969 -0000 + date: Thu Jan 01 00:00:11 1970 +0000 summary: 11 - changeset: 10:b097cef2be03 + changeset: 10:c012b15e2409 bisect: bad user: test - date: Wed Dec 31 23:59:50 1969 -0000 + date: Thu Jan 01 00:00:10 1970 +0000 summary: 10 - changeset: 9:8bcbdb072033 + changeset: 9:2197c557e14c bisect: untested - parent: 8:3cd112f87d77 - parent: 3:e7f031aee8ca + parent: 8:e74a86251f58 + parent: 3:8417d459b90c user: test - date: Wed Dec 31 23:59:51 1969 -0000 + date: Thu Jan 01 00:00:09 1970 +0000 summary: 9=8+3 - changeset: 8:3cd112f87d77 + changeset: 8:e74a86251f58 bisect: untested user: test - date: Wed Dec 31 23:59:52 1969 -0000 + date: Thu Jan 01 00:00:08 1970 +0000 summary: 8 - changeset: 7:577e237a73bd + changeset: 7:a5f87041c899 bisect: skipped user: test - date: Wed Dec 31 23:59:53 1969 -0000 + date: Thu Jan 01 00:00:07 1970 +0000 summary: 7 - changeset: 6:e597fa2707c5 + changeset: 6:7d997bedcd8d bisect: good user: test - date: Wed Dec 31 23:59:54 1969 -0000 + date: Thu Jan 01 00:00:06 1970 +0000 summary: 6 - changeset: 5:b9cea37a76bc + changeset: 5:2dd1875f1028 bisect: good (implicit) user: test - date: Wed Dec 31 23:59:55 1969 -0000 + date: Thu Jan 01 00:00:05 1970 +0000 summary: 5 - changeset: 4:da6b357259d7 + changeset: 4:2a1daef14cd4 bisect: good - parent: 1:37f42ae8b45e + parent: 1:ce7c85e06a9f user: test - date: Wed Dec 31 23:59:56 1969 -0000 + date: Thu Jan 01 00:00:04 1970 +0000 summary: 4 - changeset: 3:e7f031aee8ca + changeset: 3:8417d459b90c bisect: ignored user: test - date: Wed Dec 31 23:59:57 1969 -0000 + date: Thu Jan 01 00:00:03 1970 +0000 summary: 3 - changeset: 2:b1ad1b6bcc5c + changeset: 2:e1355ee1f23e bisect: ignored user: test - date: Wed Dec 31 23:59:58 1969 -0000 + date: Thu Jan 01 00:00:02 1970 +0000 summary: 2 - changeset: 1:37f42ae8b45e + changeset: 1:ce7c85e06a9f bisect: good (implicit) user: test - date: Wed Dec 31 23:59:59 1969 -0000 + date: Thu Jan 01 00:00:01 1970 +0000 summary: 1 changeset: 0:b4e73ffab476 @@ -215,18 +215,18 @@ summary: 0 $ hg log --quiet --style bisect - 14:cecd84203acc - 13:86f7c8cdb6df - B 12:a76089b5f47c - B 11:5c3eb122d29c - B 10:b097cef2be03 - U 9:8bcbdb072033 - U 8:3cd112f87d77 - S 7:577e237a73bd - G 6:e597fa2707c5 - G 5:b9cea37a76bc - G 4:da6b357259d7 - I 3:e7f031aee8ca - I 2:b1ad1b6bcc5c - G 1:37f42ae8b45e + 14:cbf2f3105bbf + 13:e07efca37c43 + B 12:98c6b56349c0 + B 11:03f491376e63 + B 10:c012b15e2409 + U 9:2197c557e14c + U 8:e74a86251f58 + S 7:a5f87041c899 + G 6:7d997bedcd8d + G 5:2dd1875f1028 + G 4:2a1daef14cd4 + I 3:8417d459b90c + I 2:e1355ee1f23e + G 1:ce7c85e06a9f G 0:b4e73ffab476 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-bookmarks-pushpull.t --- a/tests/test-bookmarks-pushpull.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-bookmarks-pushpull.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + initialize $ hg init a diff -r b0a88bda3381 -r 49a5db5b10de tests/test-bundle.t --- a/tests/test-bundle.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-bundle.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" system-sh || exit 80 + Setting up test $ hg init test @@ -375,7 +377,7 @@ Outgoing -R does-not-exist.hg vs partial2 in partial $ hg -R bundle://../does-not-exist.hg outgoing ../partial2 - abort: No such file or directory: ../does-not-exist.hg + abort: *: ../does-not-exist.hg (glob) [255] $ cd .. @@ -408,7 +410,7 @@ recurse infinitely (issue 2528) $ hg clone full.hg '' - abort: No such file or directory + abort: * (glob) [255] test for http://mercurial.selenic.com/bts/issue216 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-check-code.t --- a/tests/test-check-code.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-check-code.t Mon Nov 21 13:11:17 2011 -0600 @@ -132,3 +132,11 @@ object comparison with literal [1] + $ cat > warning.py < except: + > EOF + $ "$check_code" warning.py --warning --nolineno + warning.py:0: + > except: + warning: naked except clause + [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-clone-failure.t --- a/tests/test-clone-failure.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-clone-failure.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 + No local source $ hg clone a b diff -r b0a88bda3381 -r 49a5db5b10de tests/test-clone-pull-corruption.t --- a/tests/test-clone-pull-corruption.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-clone-pull-corruption.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" system-sh || exit 80 + Corrupt an hg repo with a pull started during an aborted commit Create two repos, so that one of them can pull from the other one. diff -r b0a88bda3381 -r 49a5db5b10de tests/test-clone.t --- a/tests/test-clone.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-clone.t Mon Nov 21 13:11:17 2011 -0600 @@ -10,7 +10,7 @@ Create a non-inlined filelog: - $ python -c 'for x in range(10000): print x' >> data1 + $ python -c 'file("data1", "wb").write("".join("%s\n" % x for x in range(10000)))' $ for j in 0 1 2 3 4 5 6 7 8 9; do > cat data1 >> b > hg commit -m test @@ -43,7 +43,7 @@ Invalid dest '' must abort: $ hg clone . '' - abort: No such file or directory + abort: * (glob) [255] No update, with debug option: @@ -85,7 +85,7 @@ $ hg clone -q -U --config 'paths.foobar=a#0' foobar f $ hg -R f showconfig paths.default - $TESTTMP/a#0 + $TESTTMP/a#0 (glob) Use --pull: @@ -107,7 +107,7 @@ Invalid dest '' with --pull must abort (issue2528): $ hg clone --pull a '' - abort: No such file or directory + abort: * (glob) [255] Clone to '.': diff -r b0a88bda3381 -r 49a5db5b10de tests/test-command-template.t --- a/tests/test-command-template.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-command-template.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 + $ hg init a $ cd a $ echo a > a diff -r b0a88bda3381 -r 49a5db5b10de tests/test-commandserver.py --- a/tests/test-commandserver.py Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-commandserver.py Mon Nov 21 13:11:17 2011 -0600 @@ -26,6 +26,7 @@ return channel, server.stdout.read(length) def runcommand(server, args, output=sys.stdout, error=sys.stderr, input=None): + print ' runcommand', ' '.join(args) server.stdin.write('runcommand\n') writeblock(server, '\0'.join(args)) @@ -52,6 +53,9 @@ return def check(func, repopath=None): + print + print 'testing %s:' % func.__name__ + print server = connect(repopath) try: return func(server) @@ -124,7 +128,7 @@ """ check that --cwd doesn't persist between requests """ readchannel(server) os.mkdir('foo') - f = open('foo/bar', 'w') + f = open('foo/bar', 'wb') f.write('a') f.close() runcommand(server, ['--cwd', 'foo', 'st', 'bar']) @@ -141,7 +145,7 @@ # but not for this repo runcommand(server, ['init', 'foo']) - runcommand(server, ['-R', 'foo', 'showconfig']) + runcommand(server, ['-R', 'foo', 'showconfig', 'ui', 'defaults']) shutil.rmtree('foo') def hook(**args): @@ -156,7 +160,10 @@ def outsidechanges(server): readchannel(server) - os.system('echo a >> a && hg ci -Am2') + f = open('a', 'ab') + f.write('a\n') + f.close() + os.system('hg ci -Am2') runcommand(server, ['tip']) def bookmarks(server): diff -r b0a88bda3381 -r 49a5db5b10de tests/test-commandserver.py.out --- a/tests/test-commandserver.py.out Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-commandserver.py.out Mon Nov 21 13:11:17 2011 -0600 @@ -1,6 +1,17 @@ + +testing hellomessage: + o, 'capabilities: getencoding runcommand\nencoding: ***' + runcommand id 000000000000 tip abort: unknown command unknowncommand + +testing unknowncommand: + + +testing checkruncommand: + + runcommand Mercurial Distributed SCM basic commands: @@ -24,44 +35,85 @@ update update working directory (or switch revisions) use "hg help" for the full list of commands or "hg -v" for details + runcommand id --quiet 000000000000 + runcommand id 000000000000 tip + runcommand id --config ui.quiet=True 000000000000 + runcommand id 000000000000 tip + +testing inputeof: + server exit code = 1 + +testing serverinput: + + runcommand import - applying patch from stdin + runcommand log changeset: 0:eff892de26ec tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 + +testing cwd: + + runcommand --cwd foo st bar ? bar + runcommand st foo/bar ? foo/bar + +testing localhgrc: + + runcommand showconfig bundle.mainreporoot=$TESTTMP defaults.backout=-d "0 0" defaults.commit=-d "0 0" defaults.tag=-d "0 0" ui.slash=True ui.foo=bar -bundle.mainreporoot=$TESTTMP/foo + runcommand init foo + runcommand -R foo showconfig ui defaults defaults.backout=-d "0 0" defaults.commit=-d "0 0" defaults.tag=-d "0 0" ui.slash=True + +testing hookoutput: + + runcommand --config hooks.pre-identify=python:test-commandserver.hook id hook talking now try to read something: 'some input' eff892de26ec tip + +testing outsidechanges: + + runcommand tip changeset: 1:d3a0a68be6de tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 2 + +testing bookmarks: + + runcommand bookmarks no bookmarks set + runcommand bookmarks bm1 1:d3a0a68be6de bm2 1:d3a0a68be6de + runcommand bookmarks * bm1 1:d3a0a68be6de bm2 1:d3a0a68be6de +testing tagscache: + + runcommand id -t -r 0 + + runcommand id -t -r 0 foo diff -r b0a88bda3381 -r 49a5db5b10de tests/test-commit-unresolved.t --- a/tests/test-commit-unresolved.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-commit-unresolved.t Mon Nov 21 13:11:17 2011 -0600 @@ -29,7 +29,7 @@ $ hg merge merging A warning: conflicts during merge. - merging A failed! + merging A incomplete! (edit conflicts, then use 'hg resolve --mark') 1 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-commit.t --- a/tests/test-commit.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-commit.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" symlink || exit 80 + commit date test $ hg init test @@ -43,7 +45,7 @@ $ mkdir dir $ echo boo > dir/file $ hg add - adding dir/file + adding dir/file (glob) $ hg -v commit -m commit-9 dir dir/file committed changeset 2:d2a76177cb42 @@ -71,7 +73,7 @@ $ cd .. $ hg commit -m commit-14 does-not-exist - abort: does-not-exist: No such file or directory + abort: does-not-exist: * (glob) [255] $ ln -s foo baz $ hg commit -m commit-15 baz @@ -113,8 +115,8 @@ $ mkdir bar $ echo bar > bar/bar $ hg add - adding bar/bar - adding foo/foo + adding bar/bar (glob) + adding foo/foo (glob) $ hg ci -m commit-subdir-1 foo $ hg ci -m commit-subdir-2 bar diff -r b0a88bda3381 -r 49a5db5b10de tests/test-conflict.t --- a/tests/test-conflict.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-conflict.t Mon Nov 21 13:11:17 2011 -0600 @@ -13,7 +13,7 @@ $ hg merge 1 merging a warning: conflicts during merge. - merging a failed! + merging a incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-contrib.t --- a/tests/test-contrib.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-contrib.t Mon Nov 21 13:11:17 2011 -0600 @@ -107,7 +107,7 @@ Test shrink-revlog: $ cd repo-a $ hg --config extensions.shrink=$CONTRIBDIR/shrink-revlog.py shrink - shrinking $TESTTMP/repo-a/.hg/store/00manifest.i + shrinking $TESTTMP/repo-a/.hg/store/00manifest.i (glob) reading revs sorting revs writing revs @@ -115,8 +115,8 @@ new file size: 324 bytes ( 0.0 MiB) shrinkage: 0.0% (1.0x) note: old revlog saved in: - $TESTTMP/repo-a/.hg/store/00manifest.i.old - $TESTTMP/repo-a/.hg/store/00manifest.d.old + $TESTTMP/repo-a/.hg/store/00manifest.i.old (glob) + $TESTTMP/repo-a/.hg/store/00manifest.d.old (glob) (You can delete those files when you are satisfied that your repository is still sane. Running 'hg verify' is strongly recommended.) $ hg verify diff -r b0a88bda3381 -r 49a5db5b10de tests/test-convert-authormap.t --- a/tests/test-convert-authormap.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-convert-authormap.t Mon Nov 21 13:11:17 2011 -0600 @@ -27,7 +27,7 @@ sorting... converting... 0 foo - Writing author map file $TESTTMP/new/.hg/authormap + Writing author map file $TESTTMP/new/.hg/authormap (glob) $ cat new/.hg/authormap user name=Long User Name $ hg -Rnew log @@ -44,7 +44,7 @@ $ hg init new $ mv authormap.txt new/.hg/authormap $ hg convert orig new - Ignoring bad line in author map file $TESTTMP/new/.hg/authormap: this line is ignored + Ignoring bad line in author map file $TESTTMP/new/.hg/authormap: this line is ignored (glob) scanning source... sorting... converting... diff -r b0a88bda3381 -r 49a5db5b10de tests/test-convert-bzr.t --- a/tests/test-convert-bzr.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-convert-bzr.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" symlink execbit || exit 80 $ . "$TESTDIR/bzr-definitions" diff -r b0a88bda3381 -r 49a5db5b10de tests/test-convert-hg-source.t --- a/tests/test-convert-hg-source.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-convert-hg-source.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" execbit || exit 80 $ cat >> $HGRCPATH < [extensions] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-convert-svn-sink.t --- a/tests/test-convert-svn-sink.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-convert-svn-sink.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,5 +1,4 @@ - - $ "$TESTDIR/hghave" svn13 no-outer-repo || exit 80 + $ "$TESTDIR/hghave" svn13 no-outer-repo symlink execbit || exit 80 $ fixpath() > { @@ -417,7 +416,7 @@ $ hg --cwd b merge merging b warning: conflicts during merge. - merging b failed! + merging b incomplete! (edit conflicts, then use 'hg resolve --mark') 2 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-convert-tla.t --- a/tests/test-convert-tla.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-convert-tla.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,5 +1,5 @@ - $ "$TESTDIR/hghave" tla || exit 80 + $ "$TESTDIR/hghave" tla symlink || exit 80 $ tla my-id "mercurial " $ echo "[extensions]" >> $HGRCPATH $ echo "convert=" >> $HGRCPATH diff -r b0a88bda3381 -r 49a5db5b10de tests/test-convert.t --- a/tests/test-convert.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-convert.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 $ cat >> $HGRCPATH < [extensions] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-debugcomplete.t --- a/tests/test-debugcomplete.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-debugcomplete.t Mon Nov 21 13:11:17 2011 -0600 @@ -189,7 +189,7 @@ Show all commands + options $ hg debugcommands add: include, exclude, subrepos, dry-run - annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, include, exclude + annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, ignore-all-space, ignore-space-change, ignore-blank-lines, include, exclude clone: noupdate, updaterev, rev, branch, pull, uncompressed, ssh, remotecmd, insecure commit: addremove, close-branch, include, exclude, message, logfile, date, user, subrepos diff: rev, change, text, git, nodates, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, include, exclude, subrepos diff -r b0a88bda3381 -r 49a5db5b10de tests/test-default-push.t --- a/tests/test-default-push.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-default-push.t Mon Nov 21 13:11:17 2011 -0600 @@ -18,7 +18,7 @@ Push should push to 'default' when 'default-push' not set: $ hg --cwd b push - pushing to $TESTTMP/a + pushing to $TESTTMP/a (glob) searching for changes adding changesets adding manifests @@ -29,7 +29,7 @@ $ echo 'default-push = ../c' >> b/.hg/hgrc $ hg --cwd b push - pushing to $TESTTMP/c + pushing to $TESTTMP/c (glob) searching for changes adding changesets adding manifests diff -r b0a88bda3381 -r 49a5db5b10de tests/test-diff-color.t --- a/tests/test-diff-color.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-diff-color.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" execbit || exit 80 + Setup $ echo "[color]" >> $HGRCPATH @@ -74,7 +76,7 @@ record - $ chmod 0755 a + $ chmod +x a $ hg record --color=always -m moda a < y > y diff -r b0a88bda3381 -r 49a5db5b10de tests/test-diff-hashes.t --- a/tests/test-diff-hashes.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-diff-hashes.t Mon Nov 21 13:11:17 2011 -0600 @@ -2,8 +2,8 @@ $ cd a $ hg diff inexistent1 inexistent2 - inexistent1: No such file or directory - inexistent2: No such file or directory + inexistent1: * (glob) + inexistent2: * (glob) $ echo bar > foo $ hg add foo diff -r b0a88bda3381 -r 49a5db5b10de tests/test-diff-newlines.t --- a/tests/test-diff-newlines.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-diff-newlines.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,6 +1,6 @@ $ hg init - $ python -c 'print "confuse str.splitlines\nembedded\rnewline"' > a + $ python -c 'file("a", "wb").write("confuse str.splitlines\nembedded\rnewline\n")' $ hg ci -Ama -d '1 0' adding a diff -r b0a88bda3381 -r 49a5db5b10de tests/test-diff-upgrade.t --- a/tests/test-diff-upgrade.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-diff-upgrade.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" execbit || exit 80 $ echo "[extensions]" >> $HGRCPATH $ echo "autodiff=$TESTDIR/autodiff.py" >> $HGRCPATH diff -r b0a88bda3381 -r 49a5db5b10de tests/test-dirstate.t --- a/tests/test-dirstate.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-dirstate.t Mon Nov 21 13:11:17 2011 -0600 @@ -11,9 +11,9 @@ adding a/b/c/d/y adding a/b/c/d/z $ hg mv a z - moving a/b/c/d/x to z/b/c/d/x - moving a/b/c/d/y to z/b/c/d/y - moving a/b/c/d/z to z/b/c/d/z + moving a/b/c/d/x to z/b/c/d/x (glob) + moving a/b/c/d/y to z/b/c/d/y (glob) + moving a/b/c/d/z to z/b/c/d/z (glob) $ cd .. Issue1790: dirstate entry locked into unset if file mtime is set into diff -r b0a88bda3381 -r 49a5db5b10de tests/test-eol.t --- a/tests/test-eol.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-eol.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 + Test EOL extension $ cat >> $HGRCPATH <> $HGRCPATH $ echo "extdiff=" >> $HGRCPATH diff -r b0a88bda3381 -r 49a5db5b10de tests/test-extension.t --- a/tests/test-extension.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-extension.t Mon Nov 21 13:11:17 2011 -0600 @@ -473,7 +473,7 @@ > cmdtable = None > EOF $ hg --config extensions.path=./path.py help foo > /dev/null - warning: error finding commands in $TESTTMP/hgext/forest.py + warning: error finding commands in $TESTTMP/hgext/forest.py (glob) hg: unknown command 'foo' - warning: error finding commands in $TESTTMP/hgext/forest.py + warning: error finding commands in $TESTTMP/hgext/forest.py (glob) [255] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-fetch.t --- a/tests/test-fetch.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-fetch.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + $ echo "[extensions]" >> $HGRCPATH $ echo "fetch=" >> $HGRCPATH diff -r b0a88bda3381 -r 49a5db5b10de tests/test-filecache.py --- a/tests/test-filecache.py Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-filecache.py Mon Nov 21 13:11:17 2011 -0600 @@ -1,6 +1,6 @@ import sys, os, subprocess -if subprocess.call(['%s/hghave' % os.environ['TESTDIR'], 'cacheable']): +if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'], 'cacheable']): sys.exit(80) from mercurial import util, scmutil, extensions diff -r b0a88bda3381 -r 49a5db5b10de tests/test-flags.t --- a/tests/test-flags.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-flags.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" execbit || exit 80 + $ umask 027 $ hg init test1 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-fncache.t --- a/tests/test-fncache.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-fncache.t Mon Nov 21 13:11:17 2011 -0600 @@ -14,7 +14,7 @@ $ mkdir a.i $ echo "some other text" > a.i/b $ hg add - adding a.i/b + adding a.i/b (glob) $ hg ci -m second $ cat .hg/store/fncache | sort data/a.i @@ -25,7 +25,7 @@ $ mkdir a.i.hg $ echo "yet another text" > a.i.hg/c $ hg add - adding a.i.hg/c + adding a.i.hg/c (glob) $ hg ci -m third $ cat .hg/store/fncache | sort data/a.i @@ -74,12 +74,14 @@ .hg/data/tst.d.hg/foo.i .hg/dirstate .hg/last-message.txt + .hg/phaseroots .hg/requires .hg/undo .hg/undo.bookmarks .hg/undo.branch .hg/undo.desc .hg/undo.dirstate + .hg/undo.phaseroots $ cd .. Non fncache repo: @@ -102,7 +104,9 @@ .hg/store/data .hg/store/data/tst.d.hg .hg/store/data/tst.d.hg/_foo.i + .hg/store/phaseroots .hg/store/undo + .hg/store/undo.phaseroots .hg/undo.bookmarks .hg/undo.branch .hg/undo.desc diff -r b0a88bda3381 -r 49a5db5b10de tests/test-getbundle.t --- a/tests/test-getbundle.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-getbundle.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 = Test the getbundle() protocol function = diff -r b0a88bda3381 -r 49a5db5b10de tests/test-git-export.t --- a/tests/test-git-export.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-git-export.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" execbit || exit 80 + $ hg init $ echo start > start $ hg ci -Amstart diff -r b0a88bda3381 -r 49a5db5b10de tests/test-graft.t --- a/tests/test-graft.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-graft.t Mon Nov 21 13:11:17 2011 -0600 @@ -151,7 +151,7 @@ merging e my e@77eb504366ab+ other e@9c233e8e184d ancestor e@68795b066622 warning: conflicts during merge. - merging e failed! + merging e incomplete! (edit conflicts, then use 'hg resolve --mark') searching for copies back to rev 1 unmatched files in local: c diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hardlinks.t --- a/tests/test-hardlinks.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hardlinks.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" no-windows || exit 80 + $ cat > nlinks.py < import os, sys > for f in sorted(sys.stdin.readlines()): @@ -45,7 +47,9 @@ 1 r1/.hg/store/data/d1/f2.i 1 r1/.hg/store/data/f1.i 1 r1/.hg/store/fncache + 1 r1/.hg/store/phaseroots 1 r1/.hg/store/undo + 1 r1/.hg/store/undo.phaseroots Create hardlinked clone r2: @@ -73,7 +77,9 @@ 2 r1/.hg/store/data/d1/f2.i 2 r1/.hg/store/data/f1.i 2 r1/.hg/store/fncache + 1 r1/.hg/store/phaseroots 1 r1/.hg/store/undo + 1 r1/.hg/store/undo.phaseroots $ nlinksdir r2/.hg/store 2 r2/.hg/store/00changelog.i @@ -91,6 +97,7 @@ 1 r3/.hg/store/data/f1.i 1 r3/.hg/store/fncache 1 r3/.hg/store/undo + 1 r3/.hg/store/undo.phaseroots Create a non-inlined filelog in r3: @@ -110,7 +117,9 @@ 1 r3/.hg/store/data/d1/f2.i 1 r3/.hg/store/data/f1.i 1 r3/.hg/store/fncache + 1 r3/.hg/store/phaseroots 1 r3/.hg/store/undo + 1 r3/.hg/store/undo.phaseroots Push to repo r1 should break up most hardlinks in r2: @@ -193,7 +202,9 @@ 2 r4/.hg/store/data/d1/f2.i 2 r4/.hg/store/data/f1.i 2 r4/.hg/store/fncache + 2 r4/.hg/store/phaseroots 2 r4/.hg/store/undo + 2 r4/.hg/store/undo.phaseroots 2 r4/.hg/undo.bookmarks 2 r4/.hg/undo.branch 2 r4/.hg/undo.desc @@ -222,7 +233,9 @@ 2 r4/.hg/store/data/d1/f2.i 2 r4/.hg/store/data/f1.i 2 r4/.hg/store/fncache + 2 r4/.hg/store/phaseroots 2 r4/.hg/store/undo + 2 r4/.hg/store/undo.phaseroots 2 r4/.hg/undo.bookmarks 2 r4/.hg/undo.branch 2 r4/.hg/undo.desc diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgignore.t --- a/tests/test-hgignore.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgignore.t Mon Nov 21 13:11:17 2011 -0600 @@ -44,7 +44,7 @@ $ echo "*.o" > .hgignore $ hg status - abort: $TESTTMP/.hgignore: invalid pattern (relre): *.o + abort: $TESTTMP/.hgignore: invalid pattern (relre): *.o (glob) [255] $ echo ".*\.o" > .hgignore @@ -88,7 +88,7 @@ $ echo "syntax: invalid" > .hgignore $ hg status - $TESTTMP/.hgignore: ignoring invalid syntax 'invalid' + $TESTTMP/.hgignore: ignoring invalid syntax 'invalid' (glob) A dir/b.o ? .hgignore ? a.c diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgrc.t --- a/tests/test-hgrc.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgrc.t Mon Nov 21 13:11:17 2011 -0600 @@ -26,12 +26,12 @@ $ cd foobar $ cat .hg/hgrc [paths] - default = $TESTTMP/foo%bar + default = $TESTTMP/foo%bar (glob) $ hg paths - default = $TESTTMP/foo%bar + default = $TESTTMP/foo%bar (glob) $ hg showconfig - bundle.mainreporoot=$TESTTMP/foobar - paths.default=$TESTTMP/foo%bar + bundle.mainreporoot=$TESTTMP/foobar (glob) + paths.default=$TESTTMP/foo%bar (glob) $ cd .. issue1829: wrong indentation diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgweb-commands.t --- a/tests/test-hgweb-commands.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgweb-commands.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + An attempt at more fully testing the hgweb web interface. The following things are tested elsewhere and are therefore omitted: - archive, tested in test-archive diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgweb-descend-empties.t --- a/tests/test-hgweb-descend-empties.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgweb-descend-empties.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + Test chains of near empty directories, terminating 3 different ways: - a1: file at level 4 (deepest) - b1: two dirs at level 3 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgweb-diffs.t --- a/tests/test-hgweb-diffs.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgweb-diffs.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve execbit || exit 80 + setting up repo $ hg init test @@ -10,7 +12,7 @@ change permissions for git diffs - $ chmod 755 a + $ chmod +x a $ hg ci -Amb set up hgweb diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgweb-empty.t --- a/tests/test-hgweb-empty.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgweb-empty.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + Some tests for hgweb in an empty repository $ hg init test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgweb-filelog.t --- a/tests/test-hgweb-filelog.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgweb-filelog.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ hg init test $ cd test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgweb-raw.t --- a/tests/test-hgweb-raw.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgweb-raw.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + Test raw style of hgweb $ hg init test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgweb-removed.t --- a/tests/test-hgweb-removed.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgweb-removed.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + setting up repo $ hg init test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgweb.t --- a/tests/test-hgweb.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgweb.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + Some tests for hgweb. Tests static files, plain files and different 404's. $ hg init test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgwebdir.t --- a/tests/test-hgwebdir.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgwebdir.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + Tests some basic hgwebdir functionality. Tests setting up paths and collection, different forms of 404s and the subdirectory support. diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hgwebdirsym.t --- a/tests/test-hgwebdirsym.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hgwebdirsym.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,6 +1,6 @@ Tests whether or not hgwebdir properly handles various symlink topologies. - $ "$TESTDIR/hghave" symlink || exit 80 + $ "$TESTDIR/hghave" serve symlink || exit 80 $ hg init a $ echo a > a/a $ hg --cwd a ci -Ama -d'1 0' diff -r b0a88bda3381 -r 49a5db5b10de tests/test-highlight.t --- a/tests/test-highlight.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-highlight.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,5 +1,5 @@ - $ "$TESTDIR/hghave" pygments || exit 80 + $ "$TESTDIR/hghave" pygments serve || exit 80 $ cat <> $HGRCPATH > [extensions] > highlight = diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hook.t --- a/tests/test-hook.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hook.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" system-sh || exit 80 + commit hooks can see env vars $ hg init a diff -r b0a88bda3381 -r 49a5db5b10de tests/test-http-branchmap.t --- a/tests/test-http-branchmap.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-http-branchmap.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ hgserve() { > hg serve -a localhost -p $HGPORT1 -d --pid-file=hg.pid -E errors.log -v $@ diff -r b0a88bda3381 -r 49a5db5b10de tests/test-http-clone-r.t --- a/tests/test-http-clone-r.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-http-clone-r.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + creating 'remote $ hg init remote diff -r b0a88bda3381 -r 49a5db5b10de tests/test-http-proxy.t --- a/tests/test-http-proxy.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-http-proxy.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ hg init a $ cd a diff -r b0a88bda3381 -r 49a5db5b10de tests/test-http.t --- a/tests/test-http.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-http.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ hg init test $ cd test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-https.t --- a/tests/test-https.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-https.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,6 +1,6 @@ Proper https client requires the built-in ssl from Python 2.6. - $ "$TESTDIR/hghave" ssl || exit 80 + $ "$TESTDIR/hghave" serve ssl || exit 80 Certificates created with: printf '.\n.\n.\n.\n.\nlocalhost\nhg@localhost\n' | \ diff -r b0a88bda3381 -r 49a5db5b10de tests/test-hup.t --- a/tests/test-hup.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-hup.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,6 +1,6 @@ Test hangup signal in the middle of transaction - $ "$TESTDIR/hghave" fifo || exit 80 + $ "$TESTDIR/hghave" serve fifo || exit 80 $ hg init $ mkfifo p $ hg serve --stdio < p & @@ -17,4 +17,4 @@ rollback completed killed! $ echo .hg/* .hg/store/* - .hg/00changelog.i .hg/journal.bookmarks .hg/journal.branch .hg/journal.desc .hg/journal.dirstate .hg/requires .hg/store .hg/store/00changelog.i .hg/store/00changelog.i.a + .hg/00changelog.i .hg/journal.bookmarks .hg/journal.branch .hg/journal.desc .hg/journal.dirstate .hg/requires .hg/store .hg/store/00changelog.i .hg/store/00changelog.i.a .hg/store/journal.phaseroots diff -r b0a88bda3381 -r 49a5db5b10de tests/test-identify.t --- a/tests/test-identify.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-identify.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,4 +1,4 @@ - $ "$TESTDIR/hghave" no-outer-repo || exit 80 + $ "$TESTDIR/hghave" no-outer-repo serve || exit 80 no repo diff -r b0a88bda3381 -r 49a5db5b10de tests/test-import-bypass.t --- a/tests/test-import-bypass.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-import-bypass.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" symlink execbit || exit 80 + $ echo "[extensions]" >> $HGRCPATH $ echo "purge=" >> $HGRCPATH $ echo "graphlog=" >> $HGRCPATH diff -r b0a88bda3381 -r 49a5db5b10de tests/test-import-git.t --- a/tests/test-import-git.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-import-git.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" symlink || exit 80 $ hg init diff -r b0a88bda3381 -r 49a5db5b10de tests/test-import.t --- a/tests/test-import.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-import.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 + $ hg init a $ mkdir a/d1 $ mkdir a/d1/d2 @@ -233,7 +235,7 @@ > msg.set_payload('email commit message\n' + patch) > msg['Subject'] = 'email patch' > msg['From'] = 'email patcher' - > sys.stdout.write(msg.as_string()) + > file(sys.argv[2], 'wb').write(msg.as_string()) > EOF @@ -246,7 +248,7 @@ added 1 changesets with 2 changes to 2 files updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ python mkmsg.py diffed-tip.patch > msg.patch + $ python mkmsg.py diffed-tip.patch msg.patch $ hg --cwd b import ../msg.patch applying ../msg.patch $ hg --cwd b tip | grep email @@ -308,7 +310,8 @@ added 1 changesets with 2 changes to 2 files updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ python mkmsg.py exported-tip.patch | hg --cwd b import - + $ python mkmsg.py exported-tip.patch msg.patch + $ cat msg.patch | hg --cwd b import - applying patch from stdin $ hg --cwd b tip | grep second summary: second change @@ -325,7 +328,7 @@ > msg.set_payload('email patch\n\nnext line\n---\n' + patch) > msg['Subject'] = '[PATCH] email patch' > msg['From'] = 'email patcher' - > sys.stdout.write(msg.as_string()) + > file(sys.argv[2], 'wb').write(msg.as_string()) > EOF @@ -338,7 +341,8 @@ added 1 changesets with 2 changes to 2 files updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ python mkmsg2.py diffed-tip.patch | hg --cwd b import - + $ python mkmsg2.py diffed-tip.patch msg.patch + $ cat msg.patch | hg --cwd b import - applying patch from stdin $ hg --cwd b tip --template '{desc}\n' email patch diff -r b0a88bda3381 -r 49a5db5b10de tests/test-incoming-outgoing.t --- a/tests/test-incoming-outgoing.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-incoming-outgoing.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + $ hg init test $ cd test $ for i in 0 1 2 3 4 5 6 7 8; do diff -r b0a88bda3381 -r 49a5db5b10de tests/test-inherit-mode.t --- a/tests/test-inherit-mode.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-inherit-mode.t Mon Nov 21 13:11:17 2011 -0600 @@ -76,7 +76,9 @@ 00660 ./.hg/store/data/dir/bar.i 00660 ./.hg/store/data/foo.i 00660 ./.hg/store/fncache + 00660 ./.hg/store/phaseroots 00660 ./.hg/store/undo + 00660 ./.hg/store/undo.phaseroots 00660 ./.hg/undo.bookmarks 00660 ./.hg/undo.branch 00660 ./.hg/undo.desc @@ -118,6 +120,7 @@ 00660 ../push/.hg/store/data/foo.i 00660 ../push/.hg/store/fncache 00660 ../push/.hg/store/undo + 00660 ../push/.hg/store/undo.phaseroots 00660 ../push/.hg/undo.bookmarks 00660 ../push/.hg/undo.branch 00660 ../push/.hg/undo.desc diff -r b0a88bda3381 -r 49a5db5b10de tests/test-init.t --- a/tests/test-init.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-init.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" no-windows || exit 80 + This test tries to exercise the ssh functionality with a dummy script $ checknewrepo() diff -r b0a88bda3381 -r 49a5db5b10de tests/test-install.t --- a/tests/test-install.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-install.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,8 +1,8 @@ hg debuginstall $ hg debuginstall Checking encoding (ascii)... - Checking installed modules (*/mercurial)... (glob) - Checking templates (*/mercurial/templates)... (glob) + Checking installed modules (*mercurial)... (glob) + Checking templates (*mercurial?templates)... (glob) Checking commit editor... Checking username... No problems detected @@ -10,8 +10,8 @@ hg debuginstall with no username $ HGUSER= hg debuginstall Checking encoding (ascii)... - Checking installed modules (*/mercurial)... (glob) - Checking templates (*/mercurial/templates)... (glob) + Checking installed modules (*mercurial)... (glob) + Checking templates (*mercurial?templates)... (glob) Checking commit editor... Checking username... no username supplied (see "hg help config") diff -r b0a88bda3381 -r 49a5db5b10de tests/test-interhg.t --- a/tests/test-interhg.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-interhg.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + $ hg init test $ cd test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-issue1089.t --- a/tests/test-issue1089.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-issue1089.t Mon Nov 21 13:11:17 2011 -0600 @@ -7,7 +7,7 @@ adding a/b $ hg rm a - removing a/b + removing a/b (glob) $ hg ci -m m a $ mkdir a b @@ -16,7 +16,7 @@ adding a/b $ hg rm a - removing a/b + removing a/b (glob) $ cd b Relative delete: diff -r b0a88bda3381 -r 49a5db5b10de tests/test-issue1502.t --- a/tests/test-issue1502.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-issue1502.t Mon Nov 21 13:11:17 2011 -0600 @@ -13,7 +13,7 @@ $ echo "bar" > foo1/a && hg -R foo1 commit -m "edit a in foo1" $ echo "hi" > foo/a && hg -R foo commit -m "edited a foo" $ hg -R foo1 pull -u - pulling from $TESTTMP/foo + pulling from $TESTTMP/foo (glob) searching for changes adding changesets adding manifests @@ -29,7 +29,7 @@ $ echo "there" >> foo/a && hg -R foo commit -m "edited a again" $ hg -R foo1 pull - pulling from $TESTTMP/foo + pulling from $TESTTMP/foo (glob) searching for changes adding changesets adding manifests diff -r b0a88bda3381 -r 49a5db5b10de tests/test-issue1802.t --- a/tests/test-issue1802.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-issue1802.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" execbit || exit 80 + Create extension that can disable exec checks: $ cat > noexec.py < a $ hg ci -Am0 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-keyword.t --- a/tests/test-keyword.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-keyword.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" symlink unix-permissions serve || exit 80 + $ cat <> $HGRCPATH > [extensions] > keyword = @@ -208,7 +210,7 @@ Message-Id: (glob) To: Test - changeset a2392c293916 in $TESTTMP/Test + changeset a2392c293916 in $TESTTMP/Test (glob) details: $TESTTMP/Test?cmd=changeset;node=a2392c293916 description: addsym @@ -231,7 +233,7 @@ Message-Id: (glob) To: Test - changeset ef63ca68695b in $TESTTMP/Test + changeset ef63ca68695b in $TESTTMP/Test (glob) details: $TESTTMP/Test?cmd=changeset;node=ef63ca68695b description: absym @@ -797,7 +799,7 @@ > default = ../Test > EOF $ hg incoming - comparing with $TESTTMP/Test + comparing with $TESTTMP/Test (glob) searching for changes changeset: 2:bb948857c743 tag: tip @@ -974,7 +976,7 @@ $ hg merge merging m warning: conflicts during merge. - merging m failed! + merging m incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-known.t --- a/tests/test-known.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-known.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 = Test the known() protocol function = diff -r b0a88bda3381 -r 49a5db5b10de tests/test-largefiles.t --- a/tests/test-largefiles.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-largefiles.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" symlink unix-permissions serve || exit 80 + $ cat >> $HGRCPATH < [extensions] > largefiles= @@ -183,8 +185,8 @@ $ echo large6 > sub2/large6 $ echo large7 > sub2/large7 $ hg add --large sub2 - adding sub2/large6 as a largefile - adding sub2/large7 as a largefile + adding sub2/large6 as a largefile (glob) + adding sub2/large7 as a largefile (glob) $ hg st M large3 A large5 @@ -348,7 +350,7 @@ added 1 changesets with 2 changes to 2 files (+1 heads) getting changed largefiles 1 largefiles updated, 0 removed - saved backup bundle to $TESTTMP/d/.hg/strip-backup/f574fb32bb45-backup.hg + saved backup bundle to $TESTTMP/d/.hg/strip-backup/f574fb32bb45-backup.hg (glob) nothing to rebase $ hg log --template '{rev}:{node|short} {desc|firstline}\n' 9:598410d3eb9a modify normal file largefile in repo d @@ -383,7 +385,7 @@ $ hg rebase getting changed largefiles 1 largefiles updated, 0 removed - saved backup bundle to $TESTTMP/e/.hg/strip-backup/f574fb32bb45-backup.hg + saved backup bundle to $TESTTMP/e/.hg/strip-backup/f574fb32bb45-backup.hg (glob) $ hg log changeset: 9:598410d3eb9a tag: tip @@ -553,8 +555,8 @@ # XXX we don't really want to report that we're reverting the standin; # that's just an implementation detail. But I don't see an obvious fix. ;-( $ hg revert sub - reverting .hglf/sub/large4 - reverting sub/normal4 + reverting .hglf/sub/large4 (glob) + reverting sub/normal4 (glob) $ hg status M normal3 A sub2/large8 @@ -566,8 +568,8 @@ $ cat sub/large4 large4-modified $ hg revert -a --no-backup - undeleting .hglf/sub2/large6 - forgetting .hglf/sub2/large8 + undeleting .hglf/sub2/large6 (glob) + forgetting .hglf/sub2/large8 (glob) reverting normal3 $ hg status ? sub/large4.orig @@ -581,11 +583,11 @@ revert some files to an older revision $ hg revert --no-backup -r 8 sub2 - reverting .hglf/sub2/large6 + reverting .hglf/sub2/large6 (glob) $ cat sub2/large6 large6 $ hg revert --no-backup sub2 - reverting .hglf/sub2/large6 + reverting .hglf/sub2/large6 (glob) $ hg status "verify --large" actually verifies largefiles @@ -816,6 +818,7 @@ getting changed largefiles 1 largefiles updated, 0 removed $ cd .. + $ chmod -R u+w alice/pubrepo $ HOME="$ORIGHOME" Symlink to a large largefile should behave the same as a symlink to a normal file diff -r b0a88bda3381 -r 49a5db5b10de tests/test-lfconvert.t --- a/tests/test-lfconvert.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-lfconvert.t Mon Nov 21 13:11:17 2011 -0600 @@ -83,8 +83,8 @@ $ hg commit -q -m"remove large, normal3" $ hg merge merging sub/maybelarge.dat and stuff/maybelarge.dat to stuff/maybelarge.dat - warning: $TESTTMP/bigfile-repo/stuff/maybelarge.dat looks like a binary file. - merging stuff/maybelarge.dat failed! + warning: $TESTTMP/bigfile-repo/stuff/maybelarge.dat looks like a binary file. (glob) + merging stuff/maybelarge.dat incomplete! (edit conflicts, then use 'hg resolve --mark') merging sub/normal2 and stuff/normal2 to stuff/normal2 0 files updated, 1 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon @@ -170,7 +170,7 @@ $ hg share -q -U bigfile-repo shared $ printf 'bogus' > shared/.hg/sharedpath $ hg lfconvert shared foo - abort: .hg/sharedpath points to nonexistent directory $TESTTMP/bogus! + abort: .hg/sharedpath points to nonexistent directory $TESTTMP/bogus! (glob) [255] $ hg lfconvert bigfile-repo largefiles-repo initializing destination largefiles-repo diff -r b0a88bda3381 -r 49a5db5b10de tests/test-locate.t --- a/tests/test-locate.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-locate.t Mon Nov 21 13:11:17 2011 -0600 @@ -88,33 +88,33 @@ $ rm -r t $ hg locate 't/**' - t/b - t/e.h - t/x + t/b (glob) + t/e.h (glob) + t/x (glob) $ mkdir otherdir $ cd otherdir $ hg locate b - ../b - ../t/b + ../b (glob) + ../t/b (glob) $ hg locate '*.h' - ../t.h - ../t/e.h + ../t.h (glob) + ../t/e.h (glob) $ hg locate path:t/x - ../t/x + ../t/x (glob) $ hg locate 're:.*\.h$' - ../t.h - ../t/e.h + ../t.h (glob) + ../t/e.h (glob) $ hg locate -r 0 b - ../b - ../t/b + ../b (glob) + ../t/b (glob) $ hg locate -r 0 '*.h' - ../t.h - ../t/e.h + ../t.h (glob) + ../t/e.h (glob) $ hg locate -r 0 path:t/x - ../t/x + ../t/x (glob) $ hg locate -r 0 're:.*\.h$' - ../t.h - ../t/e.h + ../t.h (glob) + ../t/e.h (glob) diff -r b0a88bda3381 -r 49a5db5b10de tests/test-lock-badness.t --- a/tests/test-lock-badness.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-lock-badness.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 + $ hg init a $ echo a > a/a $ hg -R a ci -A -m a diff -r b0a88bda3381 -r 49a5db5b10de tests/test-log.t --- a/tests/test-log.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-log.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" execbit || exit 80 + $ hg init a $ cd a @@ -920,7 +922,7 @@ $ hg merge 7 merging foo warning: conflicts during merge. - merging foo failed! + merging foo incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] @@ -931,7 +933,7 @@ $ hg merge 4 merging foo warning: conflicts during merge. - merging foo failed! + merging foo incomplete! (edit conflicts, then use 'hg resolve --mark') 1 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-manifest.t --- a/tests/test-manifest.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-manifest.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" symlink || exit 80 + Source bundle was generated with the following script: # hg init diff -r b0a88bda3381 -r 49a5db5b10de tests/test-merge-local.t --- a/tests/test-merge-local.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-merge-local.t Mon Nov 21 13:11:17 2011 -0600 @@ -63,7 +63,7 @@ merging zzz1_merge_ok merging zzz2_merge_bad warning: conflicts during merge. - merging zzz2_merge_bad failed! + merging zzz2_merge_bad incomplete! (edit conflicts, then use 'hg resolve --mark') 2 files updated, 1 files merged, 3 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges [1] @@ -88,7 +88,7 @@ merging zzz1_merge_ok merging zzz2_merge_bad warning: conflicts during merge. - merging zzz2_merge_bad failed! + merging zzz2_merge_bad incomplete! (edit conflicts, then use 'hg resolve --mark') 3 files updated, 1 files merged, 2 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges [1] @@ -97,7 +97,7 @@ merging zzz1_merge_ok merging zzz2_merge_bad warning: conflicts during merge. - merging zzz2_merge_bad failed! + merging zzz2_merge_bad incomplete! (edit conflicts, then use 'hg resolve --mark') 2 files updated, 1 files merged, 3 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-merge-prompt.t --- a/tests/test-merge-prompt.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-merge-prompt.t Mon Nov 21 13:11:17 2011 -0600 @@ -77,7 +77,7 @@ $ status --- status --- - file2: No such file or directory + file2: * (glob) C file1 --- file1 --- 1 @@ -133,7 +133,7 @@ $ status --- status --- - file2: No such file or directory + file2: * (glob) C file1 --- file1 --- 1 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-merge-revert2.t --- a/tests/test-merge-revert2.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-merge-revert2.t Mon Nov 21 13:11:17 2011 -0600 @@ -45,7 +45,7 @@ $ hg update merging file1 warning: conflicts during merge. - merging file1 failed! + merging file1 incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-merge-symlinks.t --- a/tests/test-merge-symlinks.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-merge-symlinks.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" symlink || exit 80 $ cat > echo.py < #!/usr/bin/env python diff -r b0a88bda3381 -r 49a5db5b10de tests/test-merge-tools.t --- a/tests/test-merge-tools.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-merge-tools.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" system-sh || exit 80 + test merge-tools configuration - mostly exercising filemerge.py $ unset HGMERGE # make sure HGMERGE doesn't interfere with the test @@ -66,7 +68,7 @@ $ PATH="$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2 merging f warning: conflicts during merge. - merging f failed! + merging f incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-merge-types.t --- a/tests/test-merge-types.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-merge-types.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" symlink execbit || exit 80 + $ hg init $ echo a > a diff -r b0a88bda3381 -r 49a5db5b10de tests/test-merge7.t --- a/tests/test-merge7.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-merge7.t Mon Nov 21 13:11:17 2011 -0600 @@ -45,7 +45,7 @@ $ hg merge merging test.txt warning: conflicts during merge. - merging test.txt failed! + merging test.txt incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] @@ -90,7 +90,7 @@ merging test.txt my test.txt@50c3a7e29886+ other test.txt@40d11a4173a8 ancestor test.txt@96b70246a118 warning: conflicts during merge. - merging test.txt failed! + merging test.txt incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-merge9.t --- a/tests/test-merge9.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-merge9.t Mon Nov 21 13:11:17 2011 -0600 @@ -83,7 +83,7 @@ $ hg resolve -a merging bar warning: conflicts during merge. - merging bar failed! + merging bar incomplete! (edit conflicts, then use 'hg resolve --mark') [1] after diff -r b0a88bda3381 -r 49a5db5b10de tests/test-mq-merge.t --- a/tests/test-mq-merge.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-mq-merge.t Mon Nov 21 13:11:17 2011 -0600 @@ -56,7 +56,7 @@ Save the patch queue so we can merge it later: $ hg qsave -c -e - copy $TESTTMP/t/.hg/patches to $TESTTMP/t/.hg/patches.1 + copy $TESTTMP/t/.hg/patches to $TESTTMP/t/.hg/patches.1 (glob) $ checkundo Update b and commit in an "update" changeset: @@ -76,7 +76,7 @@ b $ hg qpush -a -m - merging with queue at: $TESTTMP/t/.hg/patches.1 + merging with queue at: $TESTTMP/t/.hg/patches.1 (glob) applying rm_a now at: rm_a @@ -115,14 +115,14 @@ Create the reference queue: $ hg qsave -c -e -n refqueue - copy $TESTTMP/t2/.hg/patches to $TESTTMP/t2/.hg/refqueue + copy $TESTTMP/t2/.hg/patches to $TESTTMP/t2/.hg/refqueue (glob) $ 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: $TESTTMP/t2/.hg/refqueue + merging with queue at: $TESTTMP/t2/.hg/refqueue (glob) applying patcha patching file a Hunk #1 FAILED at 0 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-mq-qclone-http.t --- a/tests/test-mq-qclone-http.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-mq-qclone-http.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ echo "[extensions]" >> $HGRCPATH $ echo "mq=" >> $HGRCPATH diff -r b0a88bda3381 -r 49a5db5b10de tests/test-mq-qdelete.t --- a/tests/test-mq-qdelete.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-mq-qdelete.t Mon Nov 21 13:11:17 2011 -0600 @@ -188,7 +188,9 @@ $ echo > .hg/patches/series # remove 4.diff and 5.diff from series to confuse mq $ echo hup >> base $ hg qnew -f -d '1 0' -m 6 6.diff + $ echo pup > base $ hg qfinish -a + warning: uncommitted changes in the working directory revision 2b1c98802260 refers to unknown patches: 5.diff revision 33a6861311c0 refers to unknown patches: 4.diff diff -r b0a88bda3381 -r 49a5db5b10de tests/test-mq-qimport.t --- a/tests/test-mq-qimport.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-mq-qimport.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ cat > writelines.py < import sys diff -r b0a88bda3381 -r 49a5db5b10de tests/test-mq-qnew.t --- a/tests/test-mq-qnew.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-mq-qnew.t Mon Nov 21 13:11:17 2011 -0600 @@ -123,7 +123,7 @@ A series A uncommitted.patch % qnew missing - abort: missing: No such file or directory + abort: missing: * (glob) % qnew -m foo bar @@ -155,7 +155,7 @@ created new head merging a warning: conflicts during merge. - merging a failed! + merging a incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon abort: cannot manage merge changesets @@ -190,7 +190,7 @@ A series A uncommitted.patch % qnew missing - abort: missing: No such file or directory + abort: missing: * (glob) % qnew -m # HG changeset patch # Parent @@ -228,7 +228,7 @@ created new head merging a warning: conflicts during merge. - merging a failed! + merging a incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon abort: cannot manage merge changesets diff -r b0a88bda3381 -r 49a5db5b10de tests/test-mq-safety.t --- a/tests/test-mq-safety.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-mq-safety.t Mon Nov 21 13:11:17 2011 -0600 @@ -39,7 +39,7 @@ abort: popping would remove a revision not managed by this patch queue [255] $ hg qpop -n patches - using patch queue: $TESTTMP/repo/.hg/patches + using patch queue: $TESTTMP/repo/.hg/patches (glob) abort: popping would remove a revision not managed by this patch queue [255] $ hg qrefresh diff -r b0a88bda3381 -r 49a5db5b10de tests/test-mq.t --- a/tests/test-mq.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-mq.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" execbit || exit 80 + $ checkundo() > { > if [ -f .hg/store/undo ]; then @@ -135,7 +137,7 @@ guards $ cat .hg/patches/series $ hg qinit -c - abort: repository $TESTTMP/d/.hg/patches already exists! + abort: repository $TESTTMP/d/.hg/patches already exists! (glob) [255] $ cd .. @@ -154,8 +156,8 @@ $ echo status >> .hg/patches/.hgignore $ echo bleh >> .hg/patches/.hgignore $ hg qinit -c - adding .hg/patches/A - adding .hg/patches/B + adding .hg/patches/A (glob) + adding .hg/patches/B (glob) $ hg -R .hg/patches status A .hgignore A A @@ -1191,7 +1193,7 @@ $ cd qclonesource $ hg qinit -c - adding .hg/patches/patch1 + adding .hg/patches/patch1 (glob) $ hg qci -m checkpoint $ qlog main repo: diff -r b0a88bda3381 -r 49a5db5b10de tests/test-mv-cp-st-diff.t --- a/tests/test-mv-cp-st-diff.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-mv-cp-st-diff.t Mon Nov 21 13:11:17 2011 -0600 @@ -1138,7 +1138,7 @@ updating to branch default 3 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head - moving x/x to y/x + moving x/x to y/x (glob) ** directory move ** ** hg mv x y / add y/x x1 / add y/x x2 - working to parent: diff -r b0a88bda3381 -r 49a5db5b10de tests/test-nested-repo.t --- a/tests/test-nested-repo.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-nested-repo.t Mon Nov 21 13:11:17 2011 -0600 @@ -11,16 +11,16 @@ Should fail: $ hg st b/x - abort: path 'b/x' is inside nested repo 'b' + abort: path 'b/x' is inside nested repo 'b' (glob) [255] $ hg add b/x - abort: path 'b/x' is inside nested repo 'b' + abort: path 'b/x' is inside nested repo 'b' (glob) [255] Should fail: $ hg add b b/x - abort: path 'b/x' is inside nested repo 'b' + abort: path 'b/x' is inside nested repo 'b' (glob) [255] $ hg st @@ -34,7 +34,7 @@ Should fail: $ hg mv a b - abort: path 'b/a' is inside nested repo 'b' + abort: path 'b/a' is inside nested repo 'b' (glob) [255] $ hg st diff -r b0a88bda3381 -r 49a5db5b10de tests/test-notify-changegroup.t --- a/tests/test-notify-changegroup.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-notify-changegroup.t Mon Nov 21 13:11:17 2011 -0600 @@ -56,11 +56,11 @@ Message-Id: <*> (glob) To: baz, foo@bar - changeset cb9a9f314b8b in $TESTTMP/a + changeset cb9a9f314b8b in $TESTTMP/a (glob) details: $TESTTMP/a?cmd=changeset;node=cb9a9f314b8b summary: a - changeset ba677d0156c1 in $TESTTMP/a + changeset ba677d0156c1 in $TESTTMP/a (glob) details: $TESTTMP/a?cmd=changeset;node=ba677d0156c1 summary: b @@ -107,11 +107,11 @@ Message-Id: <*> (glob) To: baz, foo@bar - changeset cb9a9f314b8b in $TESTTMP/a + changeset cb9a9f314b8b in $TESTTMP/a (glob) details: $TESTTMP/a?cmd=changeset;node=cb9a9f314b8b summary: a - changeset ba677d0156c1 in $TESTTMP/a + changeset ba677d0156c1 in $TESTTMP/a (glob) details: $TESTTMP/a?cmd=changeset;node=ba677d0156c1 summary: b diff -r b0a88bda3381 -r 49a5db5b10de tests/test-notify.t --- a/tests/test-notify.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-notify.t Mon Nov 21 13:11:17 2011 -0600 @@ -173,7 +173,7 @@ Message-Id: <*> (glob) To: baz, foo@bar - changeset 0647d048b600 in $TESTTMP/b + changeset 0647d048b600 in $TESTTMP/b (glob) details: $TESTTMP/b?cmd=changeset;node=0647d048b600 description: b diff -r b0a88bda3381 -r 49a5db5b10de tests/test-patchbomb.t --- a/tests/test-patchbomb.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-patchbomb.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" system-sh || exit 80 + $ fixheaders() > { > sed -e 's/\(Message-Id:.*@\).*/\1/' \ diff -r b0a88bda3381 -r 49a5db5b10de tests/test-paths.t --- a/tests/test-paths.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-paths.t Mon Nov 21 13:11:17 2011 -0600 @@ -7,29 +7,29 @@ $ echo 'dupe = ../b' >> .hg/hgrc $ echo 'expand = $SOMETHING/bar' >> .hg/hgrc $ hg in dupe - comparing with $TESTTMP/b + comparing with $TESTTMP/b (glob) no changes found [1] $ cd .. $ hg -R a in dupe - comparing with $TESTTMP/b + comparing with $TESTTMP/b (glob) no changes found [1] $ cd a $ hg paths - dupe = $TESTTMP/b - expand = $TESTTMP/a/$SOMETHING/bar + dupe = $TESTTMP/b (glob) + expand = $TESTTMP/a/$SOMETHING/bar (glob) $ SOMETHING=foo hg paths - dupe = $TESTTMP/b - expand = $TESTTMP/a/foo/bar + dupe = $TESTTMP/b (glob) + expand = $TESTTMP/a/foo/bar (glob) $ SOMETHING=/foo hg paths - dupe = $TESTTMP/b + dupe = $TESTTMP/b (glob) expand = /foo/bar $ hg paths -q dupe expand $ hg paths dupe - $TESTTMP/b + $TESTTMP/b (glob) $ hg paths -q dupe $ hg paths unknown not found! diff -r b0a88bda3381 -r 49a5db5b10de tests/test-pending.t --- a/tests/test-pending.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-pending.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" system-sh || exit 80 + Verify that pending changesets are seen by pretxn* hooks but not by other processes that access the destination repo while the hooks are running. diff -r b0a88bda3381 -r 49a5db5b10de tests/test-permissions.t --- a/tests/test-permissions.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-permissions.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 + $ hg init t $ cd t diff -r b0a88bda3381 -r 49a5db5b10de tests/test-phases-exchange.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-phases-exchange.t Mon Nov 21 13:11:17 2011 -0600 @@ -0,0 +1,112 @@ + $ cat >> $HGRCPATH < [extensions] + > graphlog= + > EOF + $ alias hgph='hg log --template "{rev} {phase} {desc}\n"' + + $ mkcommit() { + > echo "$1" > "$1" + > hg add "$1" + > hg ci -m "$1" + > } + + $ hg init alpha + $ cd alpha + $ mkcommit a-A + $ mkcommit a-B + $ mkcommit a-C + $ mkcommit a-D + $ hgph + 3 1 a-D + 2 1 a-C + 1 1 a-B + 0 1 a-A + + $ hg init ../beta + $ hg push -r 1 ../beta + pushing to ../beta + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 2 files + $ hgph + 3 1 a-D + 2 1 a-C + 1 0 a-B + 0 0 a-A + + $ cd ../beta + $ hgph + 1 0 a-B + 0 0 a-A + $ hg up -q + $ mkcommit b-A + $ hgph + 2 1 b-A + 1 0 a-B + 0 0 a-A + $ hg pull ../alpha + pulling from ../alpha + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 2 files (+1 heads) + (run 'hg heads' to see heads, 'hg merge' to merge) + $ hgph + 4 0 a-D + 3 0 a-C + 2 1 b-A + 1 0 a-B + 0 0 a-A + +pull did not updated ../alpha state. +push from alpha to beta should update phase even if nothing is transfered + + $ cd ../alpha + $ hgph # not updated by remote pull + 3 1 a-D + 2 1 a-C + 1 0 a-B + 0 0 a-A + $ hg push ../beta + pushing to ../beta + searching for changes + no changes found + $ hgph + 3 0 a-D + 2 0 a-C + 1 0 a-B + 0 0 a-A + +update must update phase of common changeset too + + $ hg pull ../beta # getting b-A + pulling from ../beta + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files (+1 heads) + (run 'hg heads' to see heads, 'hg merge' to merge) + + $ cd ../beta + $ hgph # not updated by remote pull + 4 0 a-D + 3 0 a-C + 2 1 b-A + 1 0 a-B + 0 0 a-A + $ hg pull ../alpha + pulling from ../alpha + searching for changes + no changes found + $ hgph + 4 0 a-D + 3 0 a-C + 2 0 b-A + 1 0 a-B + 0 0 a-A + + diff -r b0a88bda3381 -r 49a5db5b10de tests/test-phases.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-phases.t Mon Nov 21 13:11:17 2011 -0600 @@ -0,0 +1,10 @@ + $ alias hglog='hg log --template "{rev} {phase} {desc}\n"' + + $ hg init initialrepo + $ cd initialrepo + $ touch sam + $ hg add sam + $ hg ci -m 'first' + + $ hglog + 0 1 first diff -r b0a88bda3381 -r 49a5db5b10de tests/test-pull-http.t --- a/tests/test-pull-http.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-pull-http.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ hg init test $ cd test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-pull-permission.t --- a/tests/test-pull-permission.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-pull-permission.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 + $ hg init a $ cd a $ echo foo > b diff -r b0a88bda3381 -r 49a5db5b10de tests/test-pull-r.t --- a/tests/test-pull-r.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-pull-r.t Mon Nov 21 13:11:17 2011 -0600 @@ -43,7 +43,7 @@ 2:effea6de0384 1:ed1b79f46b9a $ hg pull - pulling from $TESTTMP/repo2 + pulling from $TESTTMP/repo2 (glob) searching for changes adding changesets adding manifests diff -r b0a88bda3381 -r 49a5db5b10de tests/test-pull.t --- a/tests/test-pull.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-pull.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + $ hg init test $ cd test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-push-http.t --- a/tests/test-push-http.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-push-http.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ hg init test $ cd test diff -r b0a88bda3381 -r 49a5db5b10de tests/test-push-validation.t --- a/tests/test-push-validation.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-push-validation.t Mon Nov 21 13:11:17 2011 -0600 @@ -40,7 +40,7 @@ Expected to fail: $ hg push - pushing to $TESTTMP/test + pushing to $TESTTMP/test (glob) searching for changes adding changesets adding manifests diff -r b0a88bda3381 -r 49a5db5b10de tests/test-qrecord.t --- a/tests/test-qrecord.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-qrecord.t Mon Nov 21 13:11:17 2011 -0600 @@ -107,7 +107,7 @@ $ echo "mq=nonexistant" >> $HGRCPATH $ hg help qrecord - *** failed to import extension mq from nonexistant: [Errno 2] No such file or directory + *** failed to import extension mq from nonexistant: [Errno 2] * (glob) hg qrecord [OPTION]... PATCH [FILE]... interactively record a new patch diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebase-abort.t --- a/tests/test-rebase-abort.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebase-abort.t Mon Nov 21 13:11:17 2011 -0600 @@ -49,7 +49,7 @@ $ hg rebase -s 3 -d 2 merging common warning: conflicts during merge. - merging common failed! + merging common incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] @@ -117,7 +117,7 @@ $ hg rebase -b 4 -d 2 merging c warning: conflicts during merge. - merging c failed! + merging c incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebase-check-restore.t --- a/tests/test-rebase-check-restore.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebase-check-restore.t Mon Nov 21 13:11:17 2011 -0600 @@ -63,7 +63,7 @@ $ hg rebase -s 1 -d 4 --keep merging A warning: conflicts during merge. - merging A failed! + merging A incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] @@ -115,7 +115,7 @@ $ hg rebase -s 5 -d 4 --keepbranches merging A warning: conflicts during merge. - merging A failed! + merging A incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebase-conflicts.t --- a/tests/test-rebase-conflicts.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebase-conflicts.t Mon Nov 21 13:11:17 2011 -0600 @@ -58,7 +58,7 @@ $ hg rebase -s 3 -d 2 merging common warning: conflicts during merge. - merging common failed! + merging common incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebase-detach.t --- a/tests/test-rebase-detach.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebase-detach.t Mon Nov 21 13:11:17 2011 -0600 @@ -283,7 +283,7 @@ $ hg rebase -d 5 -s 7 - saved backup bundle to $TESTTMP/a5/.hg/strip-backup/13547172c9c0-backup.hg + saved backup bundle to $TESTTMP/a5/.hg/strip-backup/13547172c9c0-backup.hg (glob) $ hg tglog @ 8: 'D' | @@ -367,12 +367,12 @@ $ hg rebase -s 8 -d 7 --detach --config ui.merge=internal:fail merging H warning: conflicts during merge. - merging H failed! + merging H incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] $ hg resolve --all -t internal:local $ hg rebase -c - saved backup bundle to $TESTTMP/a7/.hg/strip-backup/6215fafa5447-backup.hg + saved backup bundle to $TESTTMP/a7/.hg/strip-backup/6215fafa5447-backup.hg (glob) $ hg tglog @ 8: 'H2' | diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebase-interruptions.t --- a/tests/test-rebase-interruptions.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebase-interruptions.t Mon Nov 21 13:11:17 2011 -0600 @@ -56,7 +56,7 @@ $ hg rebase -s 1 -d 4 merging A warning: conflicts during merge. - merging A failed! + merging A incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] @@ -88,7 +88,7 @@ $ hg rebase --continue merging A warning: conflicts during merge. - merging A failed! + merging A incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] @@ -142,7 +142,7 @@ $ hg rebase -s 1 -d 4 merging A warning: conflicts during merge. - merging A failed! + merging A incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebase-mq.t --- a/tests/test-rebase-mq.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebase-mq.t Mon Nov 21 13:11:17 2011 -0600 @@ -62,7 +62,7 @@ $ hg rebase -s 2 -d 1 merging f warning: conflicts during merge. - merging f failed! + merging f incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] @@ -73,7 +73,7 @@ $ hg rebase -c merging f warning: conflicts during merge. - merging f failed! + merging f incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebase-pull.t --- a/tests/test-rebase-pull.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebase-pull.t Mon Nov 21 13:11:17 2011 -0600 @@ -48,7 +48,7 @@ Now b has one revision to be pulled from a: $ hg pull --rebase - pulling from $TESTTMP/a + pulling from $TESTTMP/a (glob) searching for changes adding changesets adding manifests @@ -68,7 +68,7 @@ Re-run: $ hg pull --rebase - pulling from $TESTTMP/a + pulling from $TESTTMP/a (glob) searching for changes no changes found @@ -78,7 +78,7 @@ $ cd ../c $ hg pull --rebase - pulling from $TESTTMP/a + pulling from $TESTTMP/a (glob) searching for changes adding changesets adding manifests @@ -94,7 +94,7 @@ pull --rebase --update should ignore --update: $ hg pull --rebase --update - pulling from $TESTTMP/a + pulling from $TESTTMP/a (glob) searching for changes no changes found @@ -103,7 +103,7 @@ $ hg up -q 1 $ hg pull --rebase - pulling from $TESTTMP/a + pulling from $TESTTMP/a (glob) searching for changes no changes found diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebase-scenario-global.t --- a/tests/test-rebase-scenario-global.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebase-scenario-global.t Mon Nov 21 13:11:17 2011 -0600 @@ -251,7 +251,7 @@ C onto A - rebase onto an ancestor: $ hg rebase -d 0 -s 2 - saved backup bundle to $TESTTMP/a7/.hg/strip-backup/5fddd98957c8-backup.hg + saved backup bundle to $TESTTMP/a7/.hg/strip-backup/5fddd98957c8-backup.hg (glob) $ hg tglog @ 7: 'D' | @@ -473,7 +473,7 @@ $ hg clone -q -u . ah ah5 $ cd ah5 $ hg rebase -r '6::' -d 2 - saved backup bundle to $TESTTMP/ah5/.hg/strip-backup/3d8a618087a7-backup.hg + saved backup bundle to $TESTTMP/ah5/.hg/strip-backup/3d8a618087a7-backup.hg (glob) $ hg tglog @ 8: 'I' | diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rebuildstate.t --- a/tests/test-rebuildstate.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rebuildstate.t Mon Nov 21 13:11:17 2011 -0600 @@ -17,8 +17,8 @@ state dump after $ hg debugstate --nodates | sort - n 666 -1 bar - n 666 -1 foo + n 644 -1 bar + n 644 -1 foo status diff -r b0a88bda3381 -r 49a5db5b10de tests/test-record.t --- a/tests/test-record.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-record.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" execbit || exit 80 + Set up a repo $ echo "[ui]" >> $HGRCPATH diff -r b0a88bda3381 -r 49a5db5b10de tests/test-relink.t --- a/tests/test-relink.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-relink.t Mon Nov 21 13:11:17 2011 -0600 @@ -39,7 +39,7 @@ don't sit forever trying to double-lock the source repo $ hg relink . - relinking $TESTTMP/repo/.hg/store to $TESTTMP/repo/.hg/store + relinking $TESTTMP/repo/.hg/store to $TESTTMP/repo/.hg/store (glob) there is nothing to relink diff -r b0a88bda3381 -r 49a5db5b10de tests/test-remove.t --- a/tests/test-remove.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-remove.t Mon Nov 21 13:11:17 2011 -0600 @@ -196,8 +196,8 @@ $ rm test/bar $ remove test - removing test/bar - removing test/foo + removing test/bar (glob) + removing test/foo (glob) exit code: 0 R test/bar R test/foo @@ -208,8 +208,8 @@ $ rm test/bar $ remove -f test - removing test/bar - removing test/foo + removing test/bar (glob) + removing test/foo (glob) exit code: 0 R test/bar R test/foo @@ -220,8 +220,8 @@ $ rm test/bar $ remove -A test - not removing test/foo: file still exists (use -f to force removal) - removing test/bar + not removing test/foo: file still exists (use -f to force removal) (glob) + removing test/bar (glob) exit code: 1 R test/bar ./foo @@ -232,8 +232,8 @@ $ rm test/bar $ remove -Af test - removing test/bar - removing test/foo + removing test/bar (glob) + removing test/foo (glob) exit code: 0 R test/bar R test/foo @@ -250,7 +250,7 @@ adding issue1861/b/c/y adding issue1861/x $ hg rm issue1861/b - removing issue1861/b/c/y + removing issue1861/b/c/y (glob) $ hg ci -m remove $ ls issue1861 x diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rename-dir-merge.t --- a/tests/test-rename-dir-merge.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rename-dir-merge.t Mon Nov 21 13:11:17 2011 -0600 @@ -11,8 +11,8 @@ $ hg co -C 0 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg mv a b - moving a/a to b/a - moving a/b to b/b + moving a/a to b/a (glob) + moving a/b to b/b (glob) $ hg ci -m "1 mv a/ b/" $ hg co -C 0 @@ -75,7 +75,7 @@ ? b/d $ hg ci -m "3 merge 2+1" $ hg debugrename b/c - b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88 + b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88 (glob) $ hg co -C 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -111,7 +111,7 @@ $ hg ci -m "4 merge 1+2" created new head $ hg debugrename b/c - b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88 + b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88 (glob) Second scenario with two repos: @@ -122,7 +122,7 @@ $ mkdir a $ echo foo > a/f $ hg add a - adding a/f + adding a/f (glob) $ hg ci -m "a/f == foo" $ cd .. @@ -131,7 +131,7 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd r2 $ hg mv a b - moving a/f to b/f + moving a/f to b/f (glob) $ echo foo1 > b/f $ hg ci -m" a -> b, b/f == foo1" $ cd .. @@ -140,7 +140,7 @@ $ mkdir a/aa $ echo bar > a/aa/g $ hg add a/aa - adding a/aa/g + adding a/aa/g (glob) $ hg ci -m "a/aa/g" $ hg pull ../r2 pulling from ../r2 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rename.t --- a/tests/test-rename.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rename.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" symlink || exit 80 + $ hg init $ mkdir d1 d1/d11 d2 $ echo d1/a > d1/a @@ -69,7 +71,7 @@ rename --after a single file to a nonexistant target filename $ hg rename --after d1/a dummy - d1/a: not recording move - dummy does not exist + d1/a: not recording move - dummy does not exist (glob) move a single file to an existing directory @@ -119,10 +121,10 @@ rename directory d1 as d3 $ hg rename d1/ d3 - moving d1/a to d3/a - moving d1/b to d3/b - moving d1/ba to d3/ba - moving d1/d11/a1 to d3/d11/a1 + moving d1/a to d3/a (glob) + moving d1/b to d3/b (glob) + moving d1/ba to d3/ba (glob) + moving d1/d11/a1 to d3/d11/a1 (glob) $ hg status -C A d3/a d1/a @@ -144,10 +146,10 @@ $ mv d1 d3 $ hg rename --after d1 d3 - moving d1/a to d3/a - moving d1/b to d3/b - moving d1/ba to d3/ba - moving d1/d11/a1 to d3/d11/a1 + moving d1/a to d3/a (glob) + moving d1/b to d3/b (glob) + moving d1/ba to d3/ba (glob) + moving d1/d11/a1 to d3/d11/a1 (glob) $ hg status -C A d3/a d1/a @@ -168,7 +170,7 @@ move a directory using a relative path $ (cd d2; mkdir d3; hg rename ../d1/d11 d3) - moving ../d1/d11/a1 to d3/d11/a1 + moving ../d1/d11/a1 to d3/d11/a1 (glob) $ hg status -C A d2/d3/d11/a1 d1/d11/a1 @@ -180,7 +182,7 @@ move --after a directory using a relative path $ (cd d2; mkdir d3; mv ../d1/d11 d3; hg rename --after ../d1/d11 d3) - moving ../d1/d11/a1 to d3/d11/a1 + moving ../d1/d11/a1 to d3/d11/a1 (glob) $ hg status -C A d2/d3/d11/a1 d1/d11/a1 @@ -192,7 +194,7 @@ move directory d1/d11 to an existing directory d2 (removes empty d1) $ hg rename d1/d11/ d2 - moving d1/d11/a1 to d2/d11/a1 + moving d1/d11/a1 to d2/d11/a1 (glob) $ hg status -C A d2/d11/a1 d1/d11/a1 @@ -205,11 +207,11 @@ $ mkdir d3 $ hg rename d1 d2 d3 - moving d1/a to d3/d1/a - moving d1/b to d3/d1/b - moving d1/ba to d3/d1/ba - moving d1/d11/a1 to d3/d1/d11/a1 - moving d2/b to d3/d2/b + moving d1/a to d3/d1/a (glob) + moving d1/b to d3/d1/b (glob) + moving d1/ba to d3/d1/ba (glob) + moving d1/d11/a1 to d3/d1/d11/a1 (glob) + moving d2/b to d3/d2/b (glob) $ hg status -C A d3/d1/a d1/a @@ -235,11 +237,11 @@ $ mkdir d3 $ mv d1 d2 d3 $ hg rename --after d1 d2 d3 - moving d1/a to d3/d1/a - moving d1/b to d3/d1/b - moving d1/ba to d3/d1/ba - moving d1/d11/a1 to d3/d1/d11/a1 - moving d2/b to d3/d2/b + moving d1/a to d3/d1/a (glob) + moving d1/b to d3/d1/b (glob) + moving d1/ba to d3/d1/ba (glob) + moving d1/d11/a1 to d3/d1/d11/a1 (glob) + moving d2/b to d3/d2/b (glob) $ hg status -C A d3/d1/a d1/a @@ -265,7 +267,7 @@ $ hg rename d1/* d2 d2/b: not overwriting - file exists - moving d1/d11/a1 to d2/d11/a1 + moving d1/d11/a1 to d2/d11/a1 (glob) $ hg status -C A d2/a d1/a @@ -306,10 +308,10 @@ $ mkdir d2/d21 $ hg rename 'glob:d1/**' d2/d21 - moving d1/a to d2/d21/a - moving d1/b to d2/d21/b - moving d1/ba to d2/d21/ba - moving d1/d11/a1 to d2/d21/a1 + moving d1/a to d2/d21/a (glob) + moving d1/b to d2/d21/b (glob) + moving d1/ba to d2/d21/ba (glob) + moving d1/d11/a1 to d2/d21/a1 (glob) $ hg status -C A d2/d21/a d1/a @@ -332,10 +334,10 @@ $ mkdir d2/d21 $ mv d1/a d1/d11/a1 d2/d21 $ hg rename --after 'glob:d1/**' d2/d21 - moving d1/a to d2/d21/a - d1/b: not recording move - d2/d21/b does not exist - d1/ba: not recording move - d2/d21/ba does not exist - moving d1/d11/a1 to d2/d21/a1 + moving d1/a to d2/d21/a (glob) + d1/b: not recording move - d2/d21/b does not exist (glob) + d1/ba: not recording move - d2/d21/ba does not exist (glob) + moving d1/d11/a1 to d2/d21/a1 (glob) $ hg status -C A d2/d21/a d1/a @@ -351,8 +353,8 @@ $ mkdir d2/d21 $ hg rename 're:d1/([^a][^/]*/)*a.*' d2/d21 - moving d1/a to d2/d21/a - moving d1/d11/a1 to d2/d21/a1 + moving d1/a to d2/d21/a (glob) + moving d1/d11/a1 to d2/d21/a1 (glob) $ hg status -C A d2/d21/a d1/a @@ -413,7 +415,7 @@ $ mkdir d3 $ hg rename d1/* d2/* d3 - moving d1/d11/a1 to d3/d11/a1 + moving d1/d11/a1 to d3/d11/a1 (glob) d3/b: not overwriting - d2/b collides with d1/b $ hg status -C A d3/a @@ -439,7 +441,7 @@ moving a to ../d3/d1/a moving b to ../d3/d1/b moving ba to ../d3/d1/ba - moving d11/a1 to ../d3/d1/d11/a1 + moving d11/a1 to ../d3/d1/d11/a1 (glob) $ hg status -C A d3/d1/a d1/a @@ -465,7 +467,7 @@ moving a to ../d3/a moving b to ../d3/b moving ba to ../d3/ba - moving d11/a1 to ../d3/d11/a1 + moving d11/a1 to ../d3/d11/a1 (glob) $ hg status -C A d3/a d1/a @@ -486,9 +488,9 @@ move the parent tree with "hg rename .." $ (cd d1/d11; hg rename .. ../../d3) - moving ../a to ../../d3/a - moving ../b to ../../d3/b - moving ../ba to ../../d3/ba + moving ../a to ../../d3/a (glob) + moving ../b to ../../d3/b (glob) + moving ../ba to ../../d3/ba (glob) moving a1 to ../../d3/d11/a1 $ hg status -C A d3/a @@ -511,9 +513,9 @@ $ hg remove d1/b $ hg rename d1 d3 - moving d1/a to d3/a - moving d1/ba to d3/ba - moving d1/d11/a1 to d3/d11/a1 + moving d1/a to d3/a (glob) + moving d1/ba to d3/ba (glob) + moving d1/d11/a1 to d3/d11/a1 (glob) $ hg status -C A d3/a d1/a @@ -587,7 +589,7 @@ check illegal path components $ hg rename d1/d11/a1 .hg/foo - abort: path contains illegal component: .hg/foo + abort: path contains illegal component: .hg/foo (glob) [255] $ hg status -C $ hg rename d1/d11/a1 ../foo @@ -597,7 +599,7 @@ $ mv d1/d11/a1 .hg/foo $ hg rename --after d1/d11/a1 .hg/foo - abort: path contains illegal component: .hg/foo + abort: path contains illegal component: .hg/foo (glob) [255] $ hg status -C ! d1/d11/a1 @@ -606,17 +608,17 @@ $ rm .hg/foo $ hg rename d1/d11/a1 .hg - abort: path contains illegal component: .hg/a1 + abort: path contains illegal component: .hg/a1 (glob) [255] $ hg status -C $ hg rename d1/d11/a1 .. - abort: ../a1 not under root + abort: ../a1 not under root (glob) [255] $ hg status -C $ mv d1/d11/a1 .hg $ hg rename --after d1/d11/a1 .hg - abort: path contains illegal component: .hg/a1 + abort: path contains illegal component: .hg/a1 (glob) [255] $ hg status -C ! d1/d11/a1 @@ -625,7 +627,7 @@ $ rm .hg/a1 $ (cd d1/d11; hg rename ../../d2/b ../../.hg/foo) - abort: path contains illegal component: .hg/foo + abort: path contains illegal component: .hg/foo (glob) [255] $ hg status -C $ (cd d1/d11; hg rename ../../d2/b ../../../foo) diff -r b0a88bda3381 -r 49a5db5b10de tests/test-repair-strip.t --- a/tests/test-repair-strip.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-repair-strip.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" unix-permissions || exit 80 $ echo "[extensions]" >> $HGRCPATH $ echo "mq=">> $HGRCPATH diff -r b0a88bda3381 -r 49a5db5b10de tests/test-revert.t --- a/tests/test-revert.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-revert.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" execbit || exit 80 + $ hg init repo $ cd repo $ echo 123 > a @@ -80,7 +82,7 @@ should not find b $ hg status b - b: No such file or directory + b: * (glob) should show a c e @@ -214,11 +216,11 @@ $ echo foo > newdir/newfile $ hg add newdir/newfile $ hg revert b newdir - reverting b/b - forgetting newdir/newfile + reverting b/b (glob) + forgetting newdir/newfile (glob) $ echo foobar > b/b $ hg revert . - reverting b/b + reverting b/b (glob) reverting a rename target should revert the source @@ -259,8 +261,8 @@ $ hg revert -a --no-backup reverting ignored - reverting ignoreddir/file - undeleting ignoreddir/removed + reverting ignoreddir/file (glob) + undeleting ignoreddir/removed (glob) undeleting removed $ hg st -mardi diff -r b0a88bda3381 -r 49a5db5b10de tests/test-revset-outgoing.t --- a/tests/test-revset-outgoing.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-revset-outgoing.t Mon Nov 21 13:11:17 2011 -0600 @@ -39,7 +39,7 @@ $ cd b $ cat .hg/hgrc [paths] - default = $TESTTMP/a#stable + default = $TESTTMP/a#stable (glob) $ echo red >> a $ hg ci -qm3 @@ -60,7 +60,7 @@ $ hg tout - comparing with $TESTTMP/a + comparing with $TESTTMP/a (glob) searching for changes 2:1d4099801a4e: '3' stable @@ -79,11 +79,11 @@ $ cat .hg/hgrc [paths] - default = $TESTTMP/a#stable + default = $TESTTMP/a#stable (glob) green = ../a#default $ hg tout green - comparing with $TESTTMP/a + comparing with $TESTTMP/a (glob) searching for changes 3:f0461977a3db: '4' diff -r b0a88bda3381 -r 49a5db5b10de tests/test-rollback.t --- a/tests/test-rollback.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-rollback.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + setup repo $ hg init t $ cd t diff -r b0a88bda3381 -r 49a5db5b10de tests/test-run-tests.t --- a/tests/test-run-tests.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-run-tests.t Mon Nov 21 13:11:17 2011 -0600 @@ -16,6 +16,11 @@ $ foo bar +Return codes before inline python: + + $ false + [1] + Doctest commands: >>> print 'foo' @@ -28,7 +33,7 @@ y z >>> print - + Regular expressions: diff -r b0a88bda3381 -r 49a5db5b10de tests/test-schemes.t --- a/tests/test-schemes.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-schemes.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ cat <> $HGRCPATH > [extensions] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-serve.t --- a/tests/test-serve.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-serve.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ hgserve() > { diff -r b0a88bda3381 -r 49a5db5b10de tests/test-share.t --- a/tests/test-share.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-share.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ echo "[extensions]" >> $HGRCPATH $ echo "share = " >> $HGRCPATH @@ -26,14 +27,14 @@ Some sed versions appends newline, some don't, and some just fails $ cat .hg/sharedpath; echo - $TESTTMP/repo1/.hg + $TESTTMP/repo1/.hg (glob) trailing newline on .hg/sharedpath is ok $ hg tip -q 0:d3873e73d99e $ echo '' >> .hg/sharedpath $ cat .hg/sharedpath - $TESTTMP/repo1/.hg + $TESTTMP/repo1/.hg (glob) $ hg tip -q 0:d3873e73d99e diff -r b0a88bda3381 -r 49a5db5b10de tests/test-static-http.t --- a/tests/test-static-http.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-static-http.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 $ hg clone http://localhost:$HGPORT/ copy abort: error: Connection refused diff -r b0a88bda3381 -r 49a5db5b10de tests/test-status-color.t --- a/tests/test-status-color.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-status-color.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" tic || exit 80 + $ echo "[extensions]" >> $HGRCPATH $ echo "color=" >> $HGRCPATH $ echo "[color]" >> $HGRCPATH @@ -134,7 +136,7 @@ hg status modified added removed deleted unknown never-existed ignored: $ hg status --color=always modified added removed deleted unknown never-existed ignored - never-existed: No such file or directory + never-existed: * (glob) \x1b[0;32;1mA added\x1b[0m (esc) \x1b[0;31;1mR removed\x1b[0m (esc) \x1b[0;36;1;4m! deleted\x1b[0m (esc) @@ -280,10 +282,10 @@ $ hg merge merging a warning: conflicts during merge. - merging a failed! + merging a incomplete! (edit conflicts, then use 'hg resolve --mark') merging b warning: conflicts during merge. - merging b failed! + merging b incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 2 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-status.t --- a/tests/test-status.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-status.t Mon Nov 21 13:11:17 2011 -0600 @@ -127,7 +127,7 @@ hg status modified added removed deleted unknown never-existed ignored: $ hg status modified added removed deleted unknown never-existed ignored - never-existed: No such file or directory + never-existed: * (glob) A added R removed ! deleted diff -r b0a88bda3381 -r 49a5db5b10de tests/test-subrepo-deep-nested-change.t --- a/tests/test-subrepo-deep-nested-change.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-subrepo-deep-nested-change.t Mon Nov 21 13:11:17 2011 -0600 @@ -3,7 +3,7 @@ $ hg init sub2 $ echo sub2 > sub2/sub2 $ hg add -R sub2 - adding sub2/sub2 + adding sub2/sub2 (glob) $ hg commit -R sub2 -m "sub2 import" Preparing the 'sub1' repo which depends on the subrepo 'sub2' @@ -15,8 +15,8 @@ updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg add -R sub1 - adding sub1/.hgsub - adding sub1/sub1 + adding sub1/.hgsub (glob) + adding sub1/sub1 (glob) $ hg commit -R sub1 -m "sub1 import" committing subrepository sub2 @@ -30,8 +30,8 @@ cloning subrepo sub2 from $TESTTMP/sub2 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg add -R main - adding main/.hgsub - adding main/main + adding main/.hgsub (glob) + adding main/main (glob) $ hg commit -R main -m "main import" committing subrepository sub1 @@ -51,7 +51,7 @@ $ hg clone main cloned updating to branch default cloning subrepo sub1 from $TESTTMP/sub1 - cloning subrepo sub1/sub2 from $TESTTMP/sub2 + cloning subrepo sub1/sub2 from $TESTTMP/sub2 (glob) 3 files updated, 0 files merged, 0 files removed, 0 files unresolved Checking cloned repo ids @@ -79,7 +79,7 @@ $ echo modified > cloned/sub1/sub2/sub2 $ hg commit --subrepos -m "deep nested modif should trigger a commit" -R cloned committing subrepository sub1 - committing subrepository sub1/sub2 + committing subrepository sub1/sub2 (glob) Checking modified node ids diff -r b0a88bda3381 -r 49a5db5b10de tests/test-subrepo-paths.t --- a/tests/test-subrepo-paths.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-subrepo-paths.t Mon Nov 21 13:11:17 2011 -0600 @@ -55,5 +55,5 @@ > .* = \1 > EOF $ hg debugsub - abort: bad subrepository pattern in $TESTTMP/outer/.hg/hgrc:2: invalid group reference + abort: bad subrepository pattern in $TESTTMP/outer/.hg/hgrc:2: invalid group reference (glob) [255] diff -r b0a88bda3381 -r 49a5db5b10de tests/test-subrepo-recursion.t --- a/tests/test-subrepo-recursion.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-subrepo-recursion.t Mon Nov 21 13:11:17 2011 -0600 @@ -23,10 +23,10 @@ $ hg add -S .hgsub $ hg add -S foo/.hgsub $ hg add -S foo/bar - adding foo/bar/z.txt + adding foo/bar/z.txt (glob) $ hg add -S adding x.txt - adding foo/y.txt + adding foo/y.txt (glob) Test recursive status without committing anything: @@ -67,7 +67,7 @@ $ hg commit -m 0-0-0 --config ui.commitsubrepos=No --subrepos committing subrepository foo - committing subrepository foo/bar + committing subrepository foo/bar (glob) $ cd foo $ echo y2 >> y.txt @@ -186,7 +186,7 @@ $ rm -r dir $ hg commit --subrepos -m 2-3-2 committing subrepository foo - committing subrepository foo/bar + committing subrepository foo/bar (glob) Log with the relationships between repo and its subrepo: @@ -265,10 +265,10 @@ archiving (foo) [====================================>] 3/3 archiving (foo) [====================================>] 3/3 - archiving (foo/bar) [ ] 0/1 - archiving (foo/bar) [ ] 0/1 - archiving (foo/bar) [================================>] 1/1 - archiving (foo/bar) [================================>] 1/1 + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) \r (esc) $ find ../archive | sort ../archive @@ -305,10 +305,10 @@ archiving (foo) [====================================>] 3/3 archiving (foo) [====================================>] 3/3 - archiving (foo/bar) [ ] 0/1 - archiving (foo/bar) [ ] 0/1 - archiving (foo/bar) [================================>] 1/1 - archiving (foo/bar) [================================>] 1/1 + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) \r (esc) Test archiving a revision that references a subrepo that is not yet @@ -336,13 +336,13 @@ archiving (foo) [====================================>] 3/3 archiving (foo) [====================================>] 3/3 - archiving (foo/bar) [ ] 0/1 - archiving (foo/bar) [ ] 0/1 - archiving (foo/bar) [================================>] 1/1 - archiving (foo/bar) [================================>] 1/1 + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [ ] 0/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) + archiving (foo/bar) [================================>] 1/1 (glob) cloning subrepo foo from $TESTTMP/repo/foo - cloning subrepo foo/bar from $TESTTMP/repo/foo/bar + cloning subrepo foo/bar from $TESTTMP/repo/foo/bar (glob) The newly cloned subrepos contain no working copy: @@ -365,7 +365,7 @@ $ echo f > foo/f $ hg archive --subrepos -r tip archive cloning subrepo foo from $TESTTMP/empty/foo - abort: destination '$TESTTMP/almost-empty/foo' is not empty + abort: destination '$TESTTMP/almost-empty/foo' is not empty (glob) [255] Clone and test outgoing: @@ -374,11 +374,11 @@ $ hg clone repo repo2 updating to branch default cloning subrepo foo from $TESTTMP/repo/foo - cloning subrepo foo/bar from $TESTTMP/repo/foo/bar + cloning subrepo foo/bar from $TESTTMP/repo/foo/bar (glob) 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd repo2 $ hg outgoing -S - comparing with $TESTTMP/repo + comparing with $TESTTMP/repo (glob) searching for changes no changes found comparing with $TESTTMP/repo/foo @@ -404,7 +404,7 @@ $ hg commit --subrepos -m 3-4-2 committing subrepository foo $ hg outgoing -S - comparing with $TESTTMP/repo + comparing with $TESTTMP/repo (glob) searching for changes changeset: 3:2655b8ecc4ee tag: tip @@ -434,7 +434,7 @@ Test incoming: $ hg incoming -S - comparing with $TESTTMP/repo2 + comparing with $TESTTMP/repo2 (glob) searching for changes changeset: 3:2655b8ecc4ee tag: tip diff -r b0a88bda3381 -r 49a5db5b10de tests/test-subrepo-relative-path.t --- a/tests/test-subrepo-relative-path.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-subrepo-relative-path.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,9 +1,11 @@ + $ "$TESTDIR/hghave" serve || exit 80 + Preparing the subrepository 'sub' $ hg init sub $ echo sub > sub/sub $ hg add -R sub - adding sub/sub + adding sub/sub (glob) $ hg commit -R sub -m "sub import" Preparing the 'main' repo which depends on the subrepo 'sub' @@ -15,8 +17,8 @@ updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg add -R main - adding main/.hgsub - adding main/main + adding main/.hgsub (glob) + adding main/main (glob) $ hg commit -R main -m "main import" committing subrepository sub diff -r b0a88bda3381 -r 49a5db5b10de tests/test-subrepo.t --- a/tests/test-subrepo.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-subrepo.t Mon Nov 21 13:11:17 2011 -0600 @@ -49,7 +49,7 @@ $ hg revert -a $ hg revert -R s -a -C - reverting s/a + reverting s/a (glob) Issue2022: update -C @@ -92,7 +92,7 @@ update: (current) $ hg ci -m2 committing subrepository s - committing subrepository s/ss + committing subrepository s/ss (glob) $ hg sum parent: 2:df30734270ae tip 2 @@ -147,7 +147,7 @@ $ hg init t $ echo t > t/t $ hg -R t add t - adding t/t + adding t/t (glob) 5 @@ -245,7 +245,7 @@ merging t my t@20a0db6fbf6c+ other t@7af322bc1198 ancestor t@6747d179aa9a warning: conflicts during merge. - merging t failed! + merging t incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon 0 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -265,9 +265,9 @@ $ cd .. $ hg clone t tc updating to branch default - cloning subrepo s from $TESTTMP/sub/t/s - cloning subrepo s/ss from $TESTTMP/sub/t/s/ss - cloning subrepo t from $TESTTMP/sub/t/t + cloning subrepo s from $TESTTMP/sub/t/s (glob) + cloning subrepo s/ss from $TESTTMP/sub/t/s/ss (glob) + cloning subrepo t from $TESTTMP/sub/t/t (glob) 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd tc $ hg debugsub @@ -284,14 +284,14 @@ $ hg ci -m11 committing subrepository t $ hg push - pushing to $TESTTMP/sub/t - pushing subrepo s/ss to $TESTTMP/sub/t/s/ss + pushing to $TESTTMP/sub/t (glob) + pushing subrepo s/ss to $TESTTMP/sub/t/s/ss (glob) searching for changes no changes found - pushing subrepo s to $TESTTMP/sub/t/s + pushing subrepo s to $TESTTMP/sub/t/s (glob) searching for changes no changes found - pushing subrepo t to $TESTTMP/sub/t/t + pushing subrepo t to $TESTTMP/sub/t/t (glob) searching for changes adding changesets adding manifests @@ -309,27 +309,27 @@ $ hg ci -m12 committing subrepository s $ hg push - pushing to $TESTTMP/sub/t - pushing subrepo s/ss to $TESTTMP/sub/t/s/ss + pushing to $TESTTMP/sub/t (glob) + pushing subrepo s/ss to $TESTTMP/sub/t/s/ss (glob) searching for changes no changes found - pushing subrepo s to $TESTTMP/sub/t/s + pushing subrepo s to $TESTTMP/sub/t/s (glob) searching for changes abort: push creates new remote head 12a213df6fa9! (did you forget to merge? use push -f to force) [255] $ hg push -f - pushing to $TESTTMP/sub/t - pushing subrepo s/ss to $TESTTMP/sub/t/s/ss + pushing to $TESTTMP/sub/t (glob) + pushing subrepo s/ss to $TESTTMP/sub/t/s/ss (glob) searching for changes no changes found - pushing subrepo s to $TESTTMP/sub/t/s + pushing subrepo s to $TESTTMP/sub/t/s (glob) searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pushing subrepo t to $TESTTMP/sub/t/t + pushing subrepo t to $TESTTMP/sub/t/t (glob) searching for changes no changes found searching for changes @@ -351,7 +351,7 @@ $ cd ../tc $ hg pull - pulling from $TESTTMP/sub/t + pulling from $TESTTMP/sub/t (glob) searching for changes adding changesets adding manifests @@ -362,7 +362,7 @@ should pull t $ hg up - pulling subrepo t from $TESTTMP/sub/t/t + pulling subrepo t from $TESTTMP/sub/t/t (glob) searching for changes adding changesets adding manifests @@ -507,15 +507,15 @@ $ echo test > testdelete/nested/foo $ echo test > testdelete/nested2/foo $ hg -R testdelete/nested add - adding testdelete/nested/foo + adding testdelete/nested/foo (glob) $ hg -R testdelete/nested2 add - adding testdelete/nested2/foo + adding testdelete/nested2/foo (glob) $ hg -R testdelete/nested ci -m test $ hg -R testdelete/nested2 ci -m test $ echo nested = nested > testdelete/.hgsub $ echo nested2 = nested2 >> testdelete/.hgsub $ hg -R testdelete add - adding testdelete/.hgsub + adding testdelete/.hgsub (glob) $ hg -R testdelete ci -m "nested 1 & 2 added" committing subrepository nested committing subrepository nested2 @@ -534,19 +534,19 @@ $ hg init nested_absolute $ echo test > nested_absolute/foo $ hg -R nested_absolute add - adding nested_absolute/foo + adding nested_absolute/foo (glob) $ hg -R nested_absolute ci -mtest $ cd mercurial $ hg init nested_relative $ echo test2 > nested_relative/foo2 $ hg -R nested_relative add - adding nested_relative/foo2 + adding nested_relative/foo2 (glob) $ hg -R nested_relative ci -mtest2 $ hg init main $ echo "nested_relative = ../nested_relative" > main/.hgsub $ echo "nested_absolute = `pwd`/nested_absolute" >> main/.hgsub $ hg -R main add - adding main/.hgsub + adding main/.hgsub (glob) $ hg -R main ci -m "add subrepos" committing subrepository nested_absolute committing subrepository nested_relative @@ -575,7 +575,7 @@ committing subrepository s $ hg clone repo repo2 updating to branch default - cloning subrepo s from $TESTTMP/sub/repo/s + cloning subrepo s from $TESTTMP/sub/repo/s (glob) 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg -q -R repo2 pull -u $ echo 1 > repo2/s/a @@ -609,10 +609,10 @@ $ echo sub/repo = sub/repo > .hgsub $ hg add .hgsub $ hg ci -mtest - committing subrepository sub/repo + committing subrepository sub/repo (glob) $ echo test >> sub/repo/foo $ hg ci -mtest - committing subrepository sub/repo + committing subrepository sub/repo (glob) $ cd .. Create repo without default path, pull top repo, and see what happens on update @@ -627,7 +627,7 @@ added 2 changesets with 3 changes to 2 files (run 'hg update' to get a working copy) $ hg -R issue1852b update - abort: default path for subrepository sub/repo not found + abort: default path for subrepository sub/repo not found (glob) [255] Pull -u now doesn't help @@ -646,14 +646,14 @@ adding manifests adding file changes added 1 changesets with 2 changes to 2 files - cloning subrepo sub/repo from issue1852a/sub/repo + cloning subrepo sub/repo from issue1852a/sub/repo (glob) 2 files updated, 0 files merged, 0 files removed, 0 files unresolved Try to push from the other side $ hg -R issue1852a push `pwd`/issue1852c pushing to $TESTTMP/sub/issue1852c - pushing subrepo sub/repo to $TESTTMP/sub/issue1852c/sub/repo + pushing subrepo sub/repo to $TESTTMP/sub/issue1852c/sub/repo (glob) searching for changes no changes found searching for changes @@ -883,3 +883,135 @@ rm2 +Test behavior of add for explicit path in subrepo: + $ cd .. + $ hg init explicit + $ cd explicit + $ echo s = s > .hgsub + $ hg add .hgsub + $ hg init s + $ hg ci -m0 + committing subrepository s +Adding with an explicit path in a subrepo adds the file + $ echo c1 > f1 + $ echo c2 > s/f2 + $ hg st -S + ? f1 + ? s/f2 + $ hg add s/f2 + $ hg st -S + A s/f2 + ? f1 + $ hg ci -R s -m0 + $ hg ci -Am1 + adding f1 + committing subrepository s +Adding with an explicit path in a subrepo with -S has the same behavior + $ echo c3 > f3 + $ echo c4 > s/f4 + $ hg st -S + ? f3 + ? s/f4 + $ hg add -S s/f4 + $ hg st -S + A s/f4 + ? f3 + $ hg ci -R s -m1 + $ hg ci -Ama2 + adding f3 + committing subrepository s +Adding without a path or pattern silently ignores subrepos + $ echo c5 > f5 + $ echo c6 > s/f6 + $ echo c7 > s/f7 + $ hg st -S + ? f5 + ? s/f6 + ? s/f7 + $ hg add + adding f5 + $ hg st -S + A f5 + ? s/f6 + ? s/f7 + $ hg ci -R s -Am2 + adding f6 + adding f7 + $ hg ci -m3 + committing subrepository s +Adding without a path or pattern with -S also adds files in subrepos + $ echo c8 > f8 + $ echo c9 > s/f9 + $ echo c10 > s/f10 + $ hg st -S + ? f8 + ? s/f10 + ? s/f9 + $ hg add -S + adding f8 + adding s/f10 (glob) + adding s/f9 (glob) + $ hg st -S + A f8 + A s/f10 + A s/f9 + $ hg ci -R s -m3 + $ hg ci -m4 + committing subrepository s +Adding with a pattern silently ignores subrepos + $ echo c11 > fm11 + $ echo c12 > fn12 + $ echo c13 > s/fm13 + $ echo c14 > s/fn14 + $ hg st -S + ? fm11 + ? fn12 + ? s/fm13 + ? s/fn14 + $ hg add 'glob:**fm*' + adding fm11 + $ hg st -S + A fm11 + ? fn12 + ? s/fm13 + ? s/fn14 + $ hg ci -R s -Am4 + adding fm13 + adding fn14 + $ hg ci -Am5 + adding fn12 + committing subrepository s +Adding with a pattern with -S also adds matches in subrepos + $ echo c15 > fm15 + $ echo c16 > fn16 + $ echo c17 > s/fm17 + $ echo c18 > s/fn18 + $ hg st -S + ? fm15 + ? fn16 + ? s/fm17 + ? s/fn18 + $ hg add -S 'glob:**fm*' + adding fm15 + adding s/fm17 (glob) + $ hg st -S + A fm15 + A s/fm17 + ? fn16 + ? s/fn18 + $ hg ci -R s -Am5 + adding fn18 + $ hg ci -Am6 + adding fn16 + committing subrepository s + +Test behavior of forget for explicit path in subrepo: +Forgetting an explicit path in a subrepo untracks the file + $ echo c19 > s/f19 + $ hg add s/f19 + $ hg st -S + A s/f19 + $ hg forget s/f19 + $ hg st -S + ? s/f19 + $ rm s/f19 diff -r b0a88bda3381 -r 49a5db5b10de tests/test-symlink-placeholder.t --- a/tests/test-symlink-placeholder.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-symlink-placeholder.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" symlink || exit 80 + Create extension that can disable symlink support: $ cat > nolink.py <> $HGRCPATH > [extensions] > transplant= diff -r b0a88bda3381 -r 49a5db5b10de tests/test-treediscovery-legacy.t --- a/tests/test-treediscovery-legacy.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-treediscovery-legacy.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" serve || exit 80 + Tests discovery against servers without getbundle support: $ cat >> $HGRCPATH <>> u >>> str(u) - 'file:f%3Aoo/bar/baz' + 'file:f:oo/bar/baz' >>> u.localpath() 'f:oo/bar/baz' @@ -227,7 +227,7 @@ >>> u >>> str(u) - 'file://localhost/f%3Aoo/bar/baz' + 'file://localhost/f:oo/bar/baz' >>> u.localpath() 'f:oo/bar/baz' diff -r b0a88bda3381 -r 49a5db5b10de tests/test-walk.t --- a/tests/test-walk.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-walk.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,5 @@ + $ "$TESTDIR/hghave" no-windows || exit 80 + $ hg init t $ cd t $ mkdir -p beans @@ -272,7 +274,7 @@ f mammals/skunk mammals/skunk $ hg debugwalk 'glob:j*' $ hg debugwalk NOEXIST - NOEXIST: No such file or directory + NOEXIST: * (glob) $ mkfifo fifo $ hg debugwalk fifo diff -r b0a88bda3381 -r 49a5db5b10de tests/test-win32text.t --- a/tests/test-win32text.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-win32text.t Mon Nov 21 13:11:17 2011 -0600 @@ -112,7 +112,7 @@ abort: pretxncommit.crlf hook failed [255] $ hg revert -a - forgetting d/f2 + forgetting d/f2 (glob) $ rm d/f2 $ hg rem f @@ -177,10 +177,10 @@ $ for x in a b c d; do echo content > dupe/$x; done $ hg -R dupe add - adding dupe/a - adding dupe/b - adding dupe/c - adding dupe/d + adding dupe/a (glob) + adding dupe/b (glob) + adding dupe/c (glob) + adding dupe/d (glob) $ python unix2dos.py dupe/b dupe/c dupe/d $ hg -R dupe ci -m a dupe/a $ hg -R dupe ci -m b/c dupe/[bc] @@ -385,7 +385,7 @@ WARNING: f4.bat already has CRLF line endings and does not need EOL conversion by the win32text plugin. Before your next commit, please reconsider your encode/decode settings in - Mercurial.ini or $TESTTMP/t/.hg/hgrc. + Mercurial.ini or $TESTTMP/t/.hg/hgrc. (glob) 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cat bin hello\x00\r (esc) diff -r b0a88bda3381 -r 49a5db5b10de tests/test-wireproto.t --- a/tests/test-wireproto.t Sun Nov 20 23:09:32 2011 +0100 +++ b/tests/test-wireproto.t Mon Nov 21 13:11:17 2011 -0600 @@ -1,3 +1,4 @@ + $ "$TESTDIR/hghave" serve || exit 80 Test wire protocol argument passing