# HG changeset patch # User Matt Mackall # Date 1372622164 18000 # Node ID 666aa90258e610e18a79cb3d94bb159ee60502cc # Parent 867b9957d8958224576513f4c02df003bdb70255# Parent 77440de177f799f9f3bd6236c5b45fb8e15687e7 merge with crew diff -r 867b9957d895 -r 666aa90258e6 mercurial/changegroup.py --- a/mercurial/changegroup.py Tue Jun 25 21:02:22 2013 +0400 +++ b/mercurial/changegroup.py Sun Jun 30 14:56:04 2013 -0500 @@ -354,14 +354,8 @@ progress(msgbundling, None) mfs.clear() - total = len(changedfiles) - # for progress output - msgfiles = _('files') - for i, fname in enumerate(sorted(changedfiles)): - filerevlog = repo.file(fname) - if not filerevlog: - raise util.Abort(_("empty or missing revlog for %s") % fname) + def linknodes(filerevlog, fname): if fastpathlinkrev: ln, llr = filerevlog.node, filerevlog.linkrev needed = set(cl.rev(x) for x in clnodes) @@ -371,8 +365,33 @@ if linkrev in needed: yield filerevlog.node(r), cl.node(linkrev) fnodes[fname] = dict(genfilenodes()) + return fnodes.get(fname, {}) - linkrevnodes = fnodes.pop(fname, {}) + for chunk in self.generatefiles(changedfiles, linknodes, commonrevs, + source): + yield chunk + + yield self.close() + progress(msgbundling, None) + + if clnodes: + repo.hook('outgoing', node=hex(clnodes[0]), source=source) + + def generatefiles(self, changedfiles, linknodes, commonrevs, source): + repo = self._repo + progress = self._progress + reorder = self._reorder + msgbundling = _('bundling') + + total = len(changedfiles) + # for progress output + msgfiles = _('files') + for i, fname in enumerate(sorted(changedfiles)): + filerevlog = repo.file(fname) + if not filerevlog: + raise util.Abort(_("empty or missing revlog for %s") % fname) + + linkrevnodes = linknodes(filerevlog, fname) # Lookup for filenodes, we collected the linkrev nodes above in the # fastpath case and with lookupmf in the slowpath case. def lookupfilelog(x): @@ -386,11 +405,6 @@ for chunk in self.group(filenodes, filerevlog, lookupfilelog, reorder=reorder): yield chunk - yield self.close() - progress(msgbundling, None) - - if clnodes: - repo.hook('outgoing', node=hex(clnodes[0]), source=source) def revchunk(self, revlog, rev, prev, linknode): node = revlog.node(rev) diff -r 867b9957d895 -r 666aa90258e6 mercurial/commands.py --- a/mercurial/commands.py Tue Jun 25 21:02:22 2013 +0400 +++ b/mercurial/commands.py Sun Jun 30 14:56:04 2013 -0500 @@ -4356,8 +4356,10 @@ pass if not filenodes: raise util.Abort(_("'%s' not found in manifest!") % file_) - fl = repo.file(file_) - p = [repo.lookup(fl.linkrev(fl.rev(fn))) for fn in filenodes] + p = [] + for fn in filenodes: + fctx = repo.filectx(file_, fileid=fn) + p.append(fctx.node()) else: p = [cp.node() for cp in ctx.parents()] diff -r 867b9957d895 -r 666aa90258e6 tests/filterpyflakes.py --- a/tests/filterpyflakes.py Tue Jun 25 21:02:22 2013 +0400 +++ b/tests/filterpyflakes.py Sun Jun 30 14:56:04 2013 -0500 @@ -4,35 +4,48 @@ import sys, re, os -def makekey(message): - # "path/file:line: message" - match = re.search(r"(line \d+)", message) - line = '' - if match: - line = match.group(0) - message = re.sub(r"(line \d+)", '', message) - return re.sub(r"([^:]*):([^:]+):([^']*)('[^']*')(.*)$", - r'\3:\5:\4:\1:\2:' + line, - message) +def makekey(typeandline): + """ + for sorting lines by: msgtype, path/to/file, lineno, message + + typeandline is a sequence of a message type and the entire message line + the message line format is path/to/file:line: message + + >>> makekey((3, 'example.py:36: any message')) + (3, 'example.py', 36, ' any message') + >>> makekey((7, 'path/to/file.py:68: dummy message')) + (7, 'path/to/file.py', 68, ' dummy message') + >>> makekey((2, 'fn:88: m')) > makekey((2, 'fn:9: m')) + True + """ + + msgtype, line = typeandline + fname, line, message = line.split(":", 2) + # line as int for ordering 9 before 88 + return msgtype, fname, int(line), message + lines = [] for line in sys.stdin: - # We whitelist tests + # We whitelist tests (see more messages in pyflakes.messages) pats = [ r"imported but unused", r"local variable '.*' is assigned to but never used", r"unable to detect undefined names", ] - if not re.search('|'.join(pats), line): - continue + for msgtype, pat in enumerate(pats): + if re.search(pat, line): + break # pattern matches + else: + continue # no pattern matched, next line fn = line.split(':', 1)[0] f = open(os.path.join(os.path.dirname(os.path.dirname(__file__)), fn)) data = f.read() f.close() if 'no-check-code' in data: continue - lines.append(line) + lines.append((msgtype, line)) -for line in sorted(lines, key = makekey): +for msgtype, line in sorted(lines, key = makekey): sys.stdout.write(line) print