##// END OF EJS Templates
largefiles: access to specific fields only if largefiles enabled (issue4547)...
largefiles: access to specific fields only if largefiles enabled (issue4547) Even if largefiles extension is enabled in a repository, "repo" object, which isn't "largefiles.reposetup()"-ed, is passed to overridden functions in the cases below unexpectedly, because extensions are enabled for each repositories strictly. (1) clone without -U: (2) pull with -U: (3) pull with --rebase: combination of "enabled@src", "disabled@dst" and "not-required@src" cause this situation. largefiles requirement @src @dst @src result -------- -------- --------------- -------------------- enabled disabled not-required aborted unexpectedly required requirement error (intentional) -------- -------- --------------- -------------------- enabled enabled * success -------- -------- --------------- -------------------- disabled enabled * success (only for "pull") -------- -------- --------------- -------------------- disabled disabled not-required success required requirement error (intentional) -------- -------- --------------- -------------------- (4) update/revert with a subrepo disabling largefiles In these cases, overridden functions cause accessing to largefiles specific fields of not "largefiles.reposetup()"-ed "repo" object, and execution is aborted. - (1), (2), (4) cause accessing to "_lfstatuswriters" in "getstatuswriter()" invoked via "updatelfiles()" - (3) causes accessing to "_lfcommithooks" in "overriderebase()" For safe accessing to these fields, this patch examines whether passed "repo" object is "largefiles.reposetup()"-ed or not before accessing to them. This patch chooses examining existence of newly introduced "_largefilesenabled" instead of "_lfcommithooks" and "_lfstatuswriters" directly, because the former is better name for the generic "largefiles is enabled in this repo" mark than the latter. In the future, all other overridden functions should avoid largefiles specific processing for efficiency, and "_largefilesenabled" is better also for such purpose. BTW, "lfstatus" can't be used for such purpose, because some code paths set it forcibly regardless of existence of it in specified "repo" object.

File last commit:

r21294:1ae3cd6f default
r24158:d414c28d stable
Show More
filterpyflakes.py
58 lines | 1.8 KiB | text/x-python | PythonLexer
/ tests / filterpyflakes.py
timeless
tests: add pyflakes checking for unused imports
r14140 #!/usr/bin/env python
# Filter output by pyflakes to control which warnings we check
Augie Fackler
pyflakes: ignore files marked no-check-code
r14209 import sys, re, os
timeless
tests: add pyflakes checking for unused imports
r14140
Simon Heimberg
tests: simplify and document the sorting of pyflake messages...
r19335 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
timeless
test-pyflake: improve sorting algorithm
r14173
lines = []
timeless
tests: add pyflakes checking for unused imports
r14140 for line in sys.stdin:
Simon Heimberg
tests: simplify and document the sorting of pyflake messages...
r19335 # We whitelist tests (see more messages in pyflakes.messages)
timeless
tests: add pyflakes checking for assigned to but never used
r14175 pats = [
FUJIWARA Katsunori
tests: ignore "undefined name 'memoryview'" pyflakes error on earlier Python...
r21271 (r"imported but unused", None),
(r"local variable '.*' is assigned to but never used", None),
(r"unable to detect undefined names", None),
Matt Mackall
filterpyflakes: make memoryview filtering unconditional
r21293 (r"undefined name '.*'",
Matt Mackall
filterpyflakes: filter WindowsError unconditionally
r21294 r"undefined name '(WindowsError|memoryview)'")
timeless
tests: add pyflakes checking for assigned to but never used
r14175 ]
Matt Mackall
filterpyflakes: make memoryview filtering unconditional
r21293
FUJIWARA Katsunori
tests: ignore "undefined name 'memoryview'" pyflakes error on earlier Python...
r21271 for msgtype, (pat, excl) in enumerate(pats):
if re.search(pat, line) and (not excl or not re.search(excl, line)):
Simon Heimberg
tests: simplify and document the sorting of pyflake messages...
r19335 break # pattern matches
else:
continue # no pattern matched, next line
Augie Fackler
pyflakes: ignore files marked no-check-code
r14209 fn = line.split(':', 1)[0]
f = open(os.path.join(os.path.dirname(os.path.dirname(__file__)), fn))
data = f.read()
f.close()
Simon Heimberg
tests: do not skip code-checking on some whole files...
r19381 if 'no-' 'check-code' in data:
Augie Fackler
pyflakes: ignore files marked no-check-code
r14209 continue
Simon Heimberg
tests: simplify and document the sorting of pyflake messages...
r19335 lines.append((msgtype, line))
timeless
test-pyflake: improve sorting algorithm
r14173
Mads Kiilerich
check-code: check for spaces around = for named parameters
r19872 for msgtype, line in sorted(lines, key=makekey):
timeless
tests: add pyflakes checking for unused imports
r14140 sys.stdout.write(line)
print
FUJIWARA Katsunori
tests: ignore "undefined name 'memoryview'" pyflakes error on earlier Python...
r21271
# self test of "undefined name" detection for other than 'memoryview'
if False:
print undefinedname