Show More
@@ -329,7 +329,20 b' pypats = [' | |||||
329 | # rules depending on implementation of repquote() |
|
329 | # rules depending on implementation of repquote() | |
330 | (r' x+[xpqo%APM][\'"]\n\s+[\'"]x', |
|
330 | (r' x+[xpqo%APM][\'"]\n\s+[\'"]x', | |
331 | 'string join across lines with no space'), |
|
331 | 'string join across lines with no space'), | |
332 |
(r'ui\.(status|progress|write|note|warn)\( |
|
332 | (r'''(?x)ui\.(status|progress|write|note|warn)\( | |
|
333 | [ \t\n#]* | |||
|
334 | (?# any strings/comments might precede a string, which | |||
|
335 | # contains translatable message) | |||
|
336 | ((['"]|\'\'\'|""")[ \npq%bAPMxno]*(['"]|\'\'\'|""")[ \t\n#]+)* | |||
|
337 | (?# sequence consisting of below might precede translatable message | |||
|
338 | # - formatting string: "% 10s", "%05d", "% -3.2f", "%*s", "%%" ... | |||
|
339 | # - escaped character: "\\", "\n", "\0" ... | |||
|
340 | # - character other than '%', 'b' as '\', and 'x' as alphabet) | |||
|
341 | (['"]|\'\'\'|""") | |||
|
342 | ((%([ n]?[PM]?([np]+|A))?x)|%%|b[bnx]|[ \nnpqAPMo])*x | |||
|
343 | (?# this regexp can't use [^...] style, | |||
|
344 | # because _preparepats forcibly adds "\n" into [^...], | |||
|
345 | # even though this regexp wants match it against "\n")''', | |||
333 | "missing _() in ui message (use () to hide false-positives)"), |
|
346 | "missing _() in ui message (use () to hide false-positives)"), | |
334 | ], |
|
347 | ], | |
335 | # warnings |
|
348 | # warnings |
@@ -52,7 +52,7 b' def debugshell(ui, repo, **opts):' | |||||
52 | with demandimport.deactivated(): |
|
52 | with demandimport.deactivated(): | |
53 | __import__(pdbmap[debugger]) |
|
53 | __import__(pdbmap[debugger]) | |
54 | except ImportError: |
|
54 | except ImportError: | |
55 | ui.warn("%s debugger specified but %s module was not found\n" |
|
55 | ui.warn(("%s debugger specified but %s module was not found\n") | |
56 | % (debugger, pdbmap[debugger])) |
|
56 | % (debugger, pdbmap[debugger])) | |
57 | debugger = 'pdb' |
|
57 | debugger = 'pdb' | |
58 |
|
58 |
@@ -117,11 +117,11 b' def showdoc(ui):' | |||||
117 | ui.write(_("This section contains help for extensions that are " |
|
117 | ui.write(_("This section contains help for extensions that are " | |
118 | "distributed together with Mercurial. Help for other " |
|
118 | "distributed together with Mercurial. Help for other " | |
119 | "extensions is available in the help system.")) |
|
119 | "extensions is available in the help system.")) | |
120 | ui.write("\n\n" |
|
120 | ui.write(("\n\n" | |
121 | ".. contents::\n" |
|
121 | ".. contents::\n" | |
122 | " :class: htmlonly\n" |
|
122 | " :class: htmlonly\n" | |
123 | " :local:\n" |
|
123 | " :local:\n" | |
124 | " :depth: 1\n\n") |
|
124 | " :depth: 1\n\n")) | |
125 |
|
125 | |||
126 | for extensionname in sorted(allextensionnames()): |
|
126 | for extensionname in sorted(allextensionnames()): | |
127 | mod = extensions.load(ui, extensionname, None) |
|
127 | mod = extensions.load(ui, extensionname, None) |
@@ -81,13 +81,13 b' def difftree(ui, repo, node1=None, node2' | |||||
81 |
|
81 | |||
82 | for f in modified: |
|
82 | for f in modified: | |
83 | # TODO get file permissions |
|
83 | # TODO get file permissions | |
84 | ui.write(":100664 100664 %s %s M\t%s\t%s\n" % |
|
84 | ui.write((":100664 100664 %s %s M\t%s\t%s\n") % | |
85 | (short(mmap[f]), short(mmap2[f]), f, f)) |
|
85 | (short(mmap[f]), short(mmap2[f]), f, f)) | |
86 | for f in added: |
|
86 | for f in added: | |
87 | ui.write(":000000 100664 %s %s N\t%s\t%s\n" % |
|
87 | ui.write((":000000 100664 %s %s N\t%s\t%s\n") % | |
88 | (empty, short(mmap2[f]), f, f)) |
|
88 | (empty, short(mmap2[f]), f, f)) | |
89 | for f in removed: |
|
89 | for f in removed: | |
90 | ui.write(":100664 000000 %s %s D\t%s\t%s\n" % |
|
90 | ui.write((":100664 000000 %s %s D\t%s\t%s\n") % | |
91 | (short(mmap[f]), empty, f, f)) |
|
91 | (short(mmap[f]), empty, f, f)) | |
92 | ## |
|
92 | ## | |
93 |
|
93 |
@@ -455,7 +455,7 b' def demo(ui, repo, *args, **opts):' | |||||
455 |
|
455 | |||
456 | uisetup(ui) |
|
456 | uisetup(ui) | |
457 | reposetup(ui, repo) |
|
457 | reposetup(ui, repo) | |
458 | ui.write('[extensions]\nkeyword =\n') |
|
458 | ui.write(('[extensions]\nkeyword =\n')) | |
459 | demoitems('keyword', ui.configitems('keyword')) |
|
459 | demoitems('keyword', ui.configitems('keyword')) | |
460 | demoitems('keywordset', ui.configitems('keywordset')) |
|
460 | demoitems('keywordset', ui.configitems('keywordset')) | |
461 | demoitems('keywordmaps', kwmaps.iteritems()) |
|
461 | demoitems('keywordmaps', kwmaps.iteritems()) |
@@ -192,5 +192,5 b' def extsetup(ui):' | |||||
192 | # command line options is not yet applied when |
|
192 | # command line options is not yet applied when | |
193 | # extensions.loadall() is called. |
|
193 | # extensions.loadall() is called. | |
194 | if '--debug' in sys.argv: |
|
194 | if '--debug' in sys.argv: | |
195 | ui.write("[win32mbcs] activated with encoding: %s\n" |
|
195 | ui.write(("[win32mbcs] activated with encoding: %s\n") | |
196 | % _encoding) |
|
196 | % _encoding) |
@@ -1405,24 +1405,24 b' class jsonchangeset(changeset_printer):' | |||||
1405 | self.ui.write(",\n {") |
|
1405 | self.ui.write(",\n {") | |
1406 |
|
1406 | |||
1407 | if self.ui.quiet: |
|
1407 | if self.ui.quiet: | |
1408 | self.ui.write('\n "rev": %s' % jrev) |
|
1408 | self.ui.write(('\n "rev": %s') % jrev) | |
1409 | self.ui.write(',\n "node": %s' % jnode) |
|
1409 | self.ui.write((',\n "node": %s') % jnode) | |
1410 | self.ui.write('\n }') |
|
1410 | self.ui.write('\n }') | |
1411 | return |
|
1411 | return | |
1412 |
|
1412 | |||
1413 | self.ui.write('\n "rev": %s' % jrev) |
|
1413 | self.ui.write(('\n "rev": %s') % jrev) | |
1414 | self.ui.write(',\n "node": %s' % jnode) |
|
1414 | self.ui.write((',\n "node": %s') % jnode) | |
1415 | self.ui.write(',\n "branch": "%s"' % j(ctx.branch())) |
|
1415 | self.ui.write((',\n "branch": "%s"') % j(ctx.branch())) | |
1416 | self.ui.write(',\n "phase": "%s"' % ctx.phasestr()) |
|
1416 | self.ui.write((',\n "phase": "%s"') % ctx.phasestr()) | |
1417 | self.ui.write(',\n "user": "%s"' % j(ctx.user())) |
|
1417 | self.ui.write((',\n "user": "%s"') % j(ctx.user())) | |
1418 | self.ui.write(',\n "date": [%d, %d]' % ctx.date()) |
|
1418 | self.ui.write((',\n "date": [%d, %d]') % ctx.date()) | |
1419 | self.ui.write(',\n "desc": "%s"' % j(ctx.description())) |
|
1419 | self.ui.write((',\n "desc": "%s"') % j(ctx.description())) | |
1420 |
|
1420 | |||
1421 | self.ui.write(',\n "bookmarks": [%s]' % |
|
1421 | self.ui.write((',\n "bookmarks": [%s]') % | |
1422 | ", ".join('"%s"' % j(b) for b in ctx.bookmarks())) |
|
1422 | ", ".join('"%s"' % j(b) for b in ctx.bookmarks())) | |
1423 | self.ui.write(',\n "tags": [%s]' % |
|
1423 | self.ui.write((',\n "tags": [%s]') % | |
1424 | ", ".join('"%s"' % j(t) for t in ctx.tags())) |
|
1424 | ", ".join('"%s"' % j(t) for t in ctx.tags())) | |
1425 | self.ui.write(',\n "parents": [%s]' % |
|
1425 | self.ui.write((',\n "parents": [%s]') % | |
1426 | ", ".join('"%s"' % c.hex() for c in ctx.parents())) |
|
1426 | ", ".join('"%s"' % c.hex() for c in ctx.parents())) | |
1427 |
|
1427 | |||
1428 | if self.ui.debugflag: |
|
1428 | if self.ui.debugflag: | |
@@ -1430,26 +1430,26 b' class jsonchangeset(changeset_printer):' | |||||
1430 | jmanifestnode = 'null' |
|
1430 | jmanifestnode = 'null' | |
1431 | else: |
|
1431 | else: | |
1432 | jmanifestnode = '"%s"' % hex(ctx.manifestnode()) |
|
1432 | jmanifestnode = '"%s"' % hex(ctx.manifestnode()) | |
1433 | self.ui.write(',\n "manifest": %s' % jmanifestnode) |
|
1433 | self.ui.write((',\n "manifest": %s') % jmanifestnode) | |
1434 |
|
1434 | |||
1435 | self.ui.write(',\n "extra": {%s}' % |
|
1435 | self.ui.write((',\n "extra": {%s}') % | |
1436 | ", ".join('"%s": "%s"' % (j(k), j(v)) |
|
1436 | ", ".join('"%s": "%s"' % (j(k), j(v)) | |
1437 | for k, v in ctx.extra().items())) |
|
1437 | for k, v in ctx.extra().items())) | |
1438 |
|
1438 | |||
1439 | files = ctx.p1().status(ctx) |
|
1439 | files = ctx.p1().status(ctx) | |
1440 | self.ui.write(',\n "modified": [%s]' % |
|
1440 | self.ui.write((',\n "modified": [%s]') % | |
1441 | ", ".join('"%s"' % j(f) for f in files[0])) |
|
1441 | ", ".join('"%s"' % j(f) for f in files[0])) | |
1442 | self.ui.write(',\n "added": [%s]' % |
|
1442 | self.ui.write((',\n "added": [%s]') % | |
1443 | ", ".join('"%s"' % j(f) for f in files[1])) |
|
1443 | ", ".join('"%s"' % j(f) for f in files[1])) | |
1444 | self.ui.write(',\n "removed": [%s]' % |
|
1444 | self.ui.write((',\n "removed": [%s]') % | |
1445 | ", ".join('"%s"' % j(f) for f in files[2])) |
|
1445 | ", ".join('"%s"' % j(f) for f in files[2])) | |
1446 |
|
1446 | |||
1447 | elif self.ui.verbose: |
|
1447 | elif self.ui.verbose: | |
1448 | self.ui.write(',\n "files": [%s]' % |
|
1448 | self.ui.write((',\n "files": [%s]') % | |
1449 | ", ".join('"%s"' % j(f) for f in ctx.files())) |
|
1449 | ", ".join('"%s"' % j(f) for f in ctx.files())) | |
1450 |
|
1450 | |||
1451 | if copies: |
|
1451 | if copies: | |
1452 | self.ui.write(',\n "copies": {%s}' % |
|
1452 | self.ui.write((',\n "copies": {%s}') % | |
1453 | ", ".join('"%s": "%s"' % (j(k), j(v)) |
|
1453 | ", ".join('"%s": "%s"' % (j(k), j(v)) | |
1454 | for k, v in copies)) |
|
1454 | for k, v in copies)) | |
1455 |
|
1455 | |||
@@ -1463,12 +1463,13 b' class jsonchangeset(changeset_printer):' | |||||
1463 | self.ui.pushbuffer() |
|
1463 | self.ui.pushbuffer() | |
1464 | diffordiffstat(self.ui, self.repo, diffopts, prev, node, |
|
1464 | diffordiffstat(self.ui, self.repo, diffopts, prev, node, | |
1465 | match=matchfn, stat=True) |
|
1465 | match=matchfn, stat=True) | |
1466 |
self.ui.write(',\n "diffstat": "%s"' |
|
1466 | self.ui.write((',\n "diffstat": "%s"') | |
|
1467 | % j(self.ui.popbuffer())) | |||
1467 | if diff: |
|
1468 | if diff: | |
1468 | self.ui.pushbuffer() |
|
1469 | self.ui.pushbuffer() | |
1469 | diffordiffstat(self.ui, self.repo, diffopts, prev, node, |
|
1470 | diffordiffstat(self.ui, self.repo, diffopts, prev, node, | |
1470 | match=matchfn, stat=False) |
|
1471 | match=matchfn, stat=False) | |
1471 | self.ui.write(',\n "diff": "%s"' % j(self.ui.popbuffer())) |
|
1472 | self.ui.write((',\n "diff": "%s"') % j(self.ui.popbuffer())) | |
1472 |
|
1473 | |||
1473 | self.ui.write("\n }") |
|
1474 | self.ui.write("\n }") | |
1474 |
|
1475 |
@@ -2095,7 +2095,7 b' def debugbundle(ui, bundlepath, all=None' | |||||
2095 | def _debugchangegroup(ui, gen, all=None, indent=0, **opts): |
|
2095 | def _debugchangegroup(ui, gen, all=None, indent=0, **opts): | |
2096 | indent_string = ' ' * indent |
|
2096 | indent_string = ' ' * indent | |
2097 | if all: |
|
2097 | if all: | |
2098 | ui.write("%sformat: id, p1, p2, cset, delta base, len(delta)\n" |
|
2098 | ui.write(("%sformat: id, p1, p2, cset, delta base, len(delta)\n") | |
2099 | % indent_string) |
|
2099 | % indent_string) | |
2100 |
|
2100 | |||
2101 | def showchunks(named): |
|
2101 | def showchunks(named): | |
@@ -2562,12 +2562,12 b' def debugindex(ui, repo, file_=None, **o' | |||||
2562 | break |
|
2562 | break | |
2563 |
|
2563 | |||
2564 | if format == 0: |
|
2564 | if format == 0: | |
2565 | ui.write(" rev offset length " + basehdr + " linkrev" |
|
2565 | ui.write((" rev offset length " + basehdr + " linkrev" | |
2566 | " %s %s p2\n" % ("nodeid".ljust(idlen), "p1".ljust(idlen))) |
|
2566 | " %s %s p2\n") % ("nodeid".ljust(idlen), "p1".ljust(idlen))) | |
2567 | elif format == 1: |
|
2567 | elif format == 1: | |
2568 | ui.write(" rev flag offset length" |
|
2568 | ui.write((" rev flag offset length" | |
2569 | " size " + basehdr + " link p1 p2" |
|
2569 | " size " + basehdr + " link p1 p2" | |
2570 | " %s\n" % "nodeid".rjust(idlen)) |
|
2570 | " %s\n") % "nodeid".rjust(idlen)) | |
2571 |
|
2571 | |||
2572 | for i in r: |
|
2572 | for i in r: | |
2573 | node = r.node(i) |
|
2573 | node = r.node(i) | |
@@ -3030,13 +3030,13 b' def debuglocks(ui, repo, **opts):' | |||||
3030 | else: |
|
3030 | else: | |
3031 | locker = 'user %s, process %s, host %s' \ |
|
3031 | locker = 'user %s, process %s, host %s' \ | |
3032 | % (user, pid, host) |
|
3032 | % (user, pid, host) | |
3033 | ui.write("%-6s %s (%ds)\n" % (name + ":", locker, age)) |
|
3033 | ui.write(("%-6s %s (%ds)\n") % (name + ":", locker, age)) | |
3034 | return 1 |
|
3034 | return 1 | |
3035 | except OSError as e: |
|
3035 | except OSError as e: | |
3036 | if e.errno != errno.ENOENT: |
|
3036 | if e.errno != errno.ENOENT: | |
3037 | raise |
|
3037 | raise | |
3038 |
|
3038 | |||
3039 | ui.write("%-6s free\n" % (name + ":")) |
|
3039 | ui.write(("%-6s free\n") % (name + ":")) | |
3040 | return 0 |
|
3040 | return 0 | |
3041 |
|
3041 | |||
3042 | held += report(repo.svfs, "lock", repo.lock) |
|
3042 | held += report(repo.svfs, "lock", repo.lock) | |
@@ -3329,8 +3329,8 b' def debugrevlog(ui, repo, file_=None, **' | |||||
3329 |
|
3329 | |||
3330 | if opts.get("dump"): |
|
3330 | if opts.get("dump"): | |
3331 | numrevs = len(r) |
|
3331 | numrevs = len(r) | |
3332 | ui.write("# rev p1rev p2rev start end deltastart base p1 p2" |
|
3332 | ui.write(("# rev p1rev p2rev start end deltastart base p1 p2" | |
3333 | " rawsize totalsize compression heads chainlen\n") |
|
3333 | " rawsize totalsize compression heads chainlen\n")) | |
3334 | ts = 0 |
|
3334 | ts = 0 | |
3335 | heads = set() |
|
3335 | heads = set() | |
3336 |
|
3336 | |||
@@ -3519,18 +3519,19 b' def debugrevspec(ui, repo, expr, **opts)' | |||||
3519 | ui.note(revset.prettyformat(tree), "\n") |
|
3519 | ui.note(revset.prettyformat(tree), "\n") | |
3520 | newtree = revset.expandaliases(ui, tree) |
|
3520 | newtree = revset.expandaliases(ui, tree) | |
3521 | if newtree != tree: |
|
3521 | if newtree != tree: | |
3522 | ui.note("* expanded:\n", revset.prettyformat(newtree), "\n") |
|
3522 | ui.note(("* expanded:\n"), revset.prettyformat(newtree), "\n") | |
3523 | tree = newtree |
|
3523 | tree = newtree | |
3524 | newtree = revset.foldconcat(tree) |
|
3524 | newtree = revset.foldconcat(tree) | |
3525 | if newtree != tree: |
|
3525 | if newtree != tree: | |
3526 | ui.note("* concatenated:\n", revset.prettyformat(newtree), "\n") |
|
3526 | ui.note(("* concatenated:\n"), revset.prettyformat(newtree), "\n") | |
3527 | if opts["optimize"]: |
|
3527 | if opts["optimize"]: | |
3528 | optimizedtree = revset.optimize(newtree) |
|
3528 | optimizedtree = revset.optimize(newtree) | |
3529 |
ui.note("* optimized:\n" |
|
3529 | ui.note(("* optimized:\n"), | |
|
3530 | revset.prettyformat(optimizedtree), "\n") | |||
3530 | func = revset.match(ui, expr, repo) |
|
3531 | func = revset.match(ui, expr, repo) | |
3531 | revs = func(repo) |
|
3532 | revs = func(repo) | |
3532 | if ui.verbose: |
|
3533 | if ui.verbose: | |
3533 | ui.note("* set:\n", revset.prettyformatset(revs), "\n") |
|
3534 | ui.note(("* set:\n"), revset.prettyformatset(revs), "\n") | |
3534 | for c in revs: |
|
3535 | for c in revs: | |
3535 | ui.write("%s\n" % c) |
|
3536 | ui.write("%s\n" % c) | |
3536 |
|
3537 | |||
@@ -3685,7 +3686,7 b' def debugtemplate(ui, repo, tmpl, **opts' | |||||
3685 | ui.note(templater.prettyformat(tree), '\n') |
|
3686 | ui.note(templater.prettyformat(tree), '\n') | |
3686 | newtree = templater.expandaliases(tree, aliases) |
|
3687 | newtree = templater.expandaliases(tree, aliases) | |
3687 | if newtree != tree: |
|
3688 | if newtree != tree: | |
3688 | ui.note("* expanded:\n", templater.prettyformat(newtree), '\n') |
|
3689 | ui.note(("* expanded:\n"), templater.prettyformat(newtree), '\n') | |
3689 |
|
3690 | |||
3690 | mapfile = None |
|
3691 | mapfile = None | |
3691 | if revs is None: |
|
3692 | if revs is None: |
@@ -262,6 +262,20 b' web templates' | |||||
262 | > 'bar foo-' |
|
262 | > 'bar foo-' | |
263 | > 'bar') |
|
263 | > 'bar') | |
264 | > EOF |
|
264 | > EOF | |
|
265 | ||||
|
266 | 'missing _() in ui message' detection | |||
|
267 | ||||
|
268 | $ cat > uigettext.py <<EOF | |||
|
269 | > ui.status("% 10s %05d % -3.2f %*s %%" | |||
|
270 | > # this use '\\\\' instead of '\\', because the latter in | |||
|
271 | > # heredoc on shell becomes just '\' | |||
|
272 | > '\\\\ \n \t \0' | |||
|
273 | > """12345 | |||
|
274 | > """ | |||
|
275 | > '''.:*+-= | |||
|
276 | > ''' "%-6d \n 123456 .:*+-= foobar") | |||
|
277 | > EOF | |||
|
278 | ||||
265 | $ "$check_code" stringjoin.py |
|
279 | $ "$check_code" stringjoin.py | |
266 | stringjoin.py:1: |
|
280 | stringjoin.py:1: | |
267 | > foo = (' foo' |
|
281 | > foo = (' foo' | |
@@ -288,3 +302,9 b' web templates' | |||||
288 | > 'bar foo-' |
|
302 | > 'bar foo-' | |
289 | string join across lines with no space |
|
303 | string join across lines with no space | |
290 | [1] |
|
304 | [1] | |
|
305 | ||||
|
306 | $ "$check_code" uigettext.py | |||
|
307 | uigettext.py:1: | |||
|
308 | > ui.status("% 10s %05d % -3.2f %*s %%" | |||
|
309 | missing _() in ui message (use () to hide false-positives) | |||
|
310 | [1] |
General Comments 0
You need to be logged in to leave comments.
Login now