--- 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)
--- 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()]
--- 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