annotate Lib/lib2to3/main.py @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents 5c8c4d2f8b71
children 9fe562a2f0e3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
1 """
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
2 Main program for 2to3.
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
3 """
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
4
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
5 import sys
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
6 import os
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
7 import difflib
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
8 import logging
50198
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49677
diff changeset
9 import shutil
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
10 import optparse
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
11
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
12 from . import refactor
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
13
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
14
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
15 def diff_texts(a, b, filename):
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
16 """Return a unified diff of two strings."""
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
17 a = a.splitlines()
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
18 b = b.splitlines()
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
19 return difflib.unified_diff(a, b, filename, filename,
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
20 "(original)", "(refactored)",
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
21 lineterm="")
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
22
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
23
53821
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
24 class StdoutRefactoringTool(refactor.MultiprocessRefactoringTool):
49314
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
25 """
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
26 Prints output to stdout.
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
27 """
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
28
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
29 def __init__(self, fixers, options, explicit, nobackups, show_diffs):
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
30 self.nobackups = nobackups
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
31 self.show_diffs = show_diffs
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
32 super(StdoutRefactoringTool, self).__init__(fixers, options, explicit)
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
33
49314
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
34 def log_error(self, msg, *args, **kwargs):
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
35 self.errors.append((msg, args, kwargs))
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
36 self.logger.error(msg, *args, **kwargs)
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
37
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53821
diff changeset
38 def write_file(self, new_text, filename, old_text, encoding):
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
39 if not self.nobackups:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
40 # Make backup
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
41 backup = filename + ".bak"
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
42 if os.path.lexists(backup):
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
43 try:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
44 os.remove(backup)
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
45 except os.error, err:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
46 self.log_message("Can't remove backup %s", backup)
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
47 try:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
48 os.rename(filename, backup)
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
49 except os.error, err:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
50 self.log_message("Can't rename %s to %s", filename, backup)
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
51 # Actually write the new file
53934
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53821
diff changeset
52 write = super(StdoutRefactoringTool, self).write_file
119e4323400d Merged revisions 72491-72493 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53821
diff changeset
53 write(new_text, filename, old_text, encoding)
50257
e4675113d10e Merged revisions 67654,67676-67677,67681,67692,67725,67746,67748,67761,67784-67785,67787-67788,67802,67832,67848-67849,67859,67862-67864,67880,67882,67885,67889-67892,67895 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50198
diff changeset
54 if not self.nobackups:
50487
a92f71d46dc4 Merged revisions 68197 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50257
diff changeset
55 shutil.copymode(backup, filename)
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
56
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
57 def print_output(self, old, new, filename, equal):
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
58 if equal:
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
59 self.log_message("No changes to %s", filename)
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
60 else:
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
61 self.log_message("Refactored %s", filename)
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
62 if self.show_diffs:
57967
5c8c4d2f8b71 Merged revisions 76871-76872,77093-77095,77097-77101 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57452
diff changeset
63 diff_lines = diff_texts(old, new, filename)
5c8c4d2f8b71 Merged revisions 76871-76872,77093-77095,77097-77101 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57452
diff changeset
64 try:
5c8c4d2f8b71 Merged revisions 76871-76872,77093-77095,77097-77101 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57452
diff changeset
65 for line in diff_lines:
5c8c4d2f8b71 Merged revisions 76871-76872,77093-77095,77097-77101 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57452
diff changeset
66 print line
5c8c4d2f8b71 Merged revisions 76871-76872,77093-77095,77097-77101 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57452
diff changeset
67 except UnicodeEncodeError:
5c8c4d2f8b71 Merged revisions 76871-76872,77093-77095,77097-77101 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57452
diff changeset
68 warn("couldn't encode %s's diff for your terminal" %
5c8c4d2f8b71 Merged revisions 76871-76872,77093-77095,77097-77101 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57452
diff changeset
69 (filename,))
5c8c4d2f8b71 Merged revisions 76871-76872,77093-77095,77097-77101 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57452
diff changeset
70 return
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
71
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
72
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
73 def warn(msg):
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
74 print >> sys.stderr, "WARNING: %s" % (msg,)
49314
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
75
cdc7f636778b Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48978
diff changeset
76
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
77 def main(fixer_pkg, args=None):
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
78 """Main program.
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
79
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
80 Args:
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
81 fixer_pkg: the name of a package where the fixers are located.
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
82 args: optional; a list of command line arguments. If omitted,
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
83 sys.argv[1:] is used.
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
84
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
85 Returns a suggested exit status (0, 1, 2).
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
86 """
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
87 # Set up option parser
50198
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49677
diff changeset
88 parser = optparse.OptionParser(usage="2to3 [options] file|dir ...")
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
89 parser.add_option("-d", "--doctests_only", action="store_true",
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
90 help="Fix up doctests only")
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
91 parser.add_option("-f", "--fix", action="append", default=[],
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
92 help="Each FIX specifies a transformation; default: all")
53821
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
93 parser.add_option("-j", "--processes", action="store", default=1,
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
94 type="int", help="Run 2to3 concurrently")
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
95 parser.add_option("-x", "--nofix", action="append", default=[],
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
96 help="Prevent a fixer from being run.")
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
97 parser.add_option("-l", "--list-fixes", action="store_true",
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
98 help="List available transformations (fixes/fix_*.py)")
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
99 parser.add_option("-p", "--print-function", action="store_true",
57452
41bd3123864d Merged revisions 76160-76161,76250,76252,76447,76506 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 55358
diff changeset
100 help="Modify the grammar so that print() is a function")
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
101 parser.add_option("-v", "--verbose", action="store_true",
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
102 help="More verbose logging")
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
103 parser.add_option("--no-diffs", action="store_true",
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
104 help="Don't show diffs of the refactoring")
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
105 parser.add_option("-w", "--write", action="store_true",
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
106 help="Write back modified files")
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
107 parser.add_option("-n", "--nobackups", action="store_true", default=False,
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
108 help="Don't write backups for modified files.")
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
109
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
110 # Parse command line arguments
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
111 refactor_stdin = False
57452
41bd3123864d Merged revisions 76160-76161,76250,76252,76447,76506 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 55358
diff changeset
112 flags = {}
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
113 options, args = parser.parse_args(args)
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
114 if not options.write and options.no_diffs:
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
115 warn("not writing files and not printing diffs; that's not very useful")
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
116 if not options.write and options.nobackups:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
117 parser.error("Can't use -n without -w")
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
118 if options.list_fixes:
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
119 print "Available transformations for the -f/--fix option:"
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
120 for fixname in refactor.get_all_fix_names(fixer_pkg):
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
121 print fixname
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
122 if not args:
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
123 return 0
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
124 if not args:
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
125 print >> sys.stderr, "At least one file or directory argument required."
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
126 print >> sys.stderr, "Use --help to show usage."
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
127 return 2
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
128 if "-" in args:
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
129 refactor_stdin = True
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
130 if options.write:
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
131 print >> sys.stderr, "Can't write to stdin."
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
132 return 2
57452
41bd3123864d Merged revisions 76160-76161,76250,76252,76447,76506 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 55358
diff changeset
133 if options.print_function:
41bd3123864d Merged revisions 76160-76161,76250,76252,76447,76506 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 55358
diff changeset
134 flags["print_function"] = True
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
135
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
136 # Set up logging handler
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
137 level = logging.DEBUG if options.verbose else logging.INFO
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
138 logging.basicConfig(format='%(name)s: %(message)s', level=level)
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
139
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
140 # Initialize the refactoring tool
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
141 avail_fixes = set(refactor.get_fixers_from_package(fixer_pkg))
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
142 unwanted_fixes = set(fixer_pkg + ".fix_" + fix for fix in options.nofix)
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
143 explicit = set()
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
144 if options.fix:
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
145 all_present = False
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
146 for fix in options.fix:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
147 if fix == "all":
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
148 all_present = True
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
149 else:
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
150 explicit.add(fixer_pkg + ".fix_" + fix)
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
151 requested = avail_fixes.union(explicit) if all_present else explicit
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
152 else:
49677
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
153 requested = avail_fixes.union(explicit)
82ccc7e77ec5 Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49314
diff changeset
154 fixer_names = requested.difference(unwanted_fixes)
57452
41bd3123864d Merged revisions 76160-76161,76250,76252,76447,76506 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 55358
diff changeset
155 rt = StdoutRefactoringTool(sorted(fixer_names), flags, sorted(explicit),
55358
732f72cbaf7d Merged revisions 73771,73811,73840,73842,73848-73849,73861,73957-73960,73964-73969,73972-73974,73977,73981,73984,74065,74113 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53934
diff changeset
156 options.nobackups, not options.no_diffs)
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
157
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
158 # Refactor all files and directories passed as arguments
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
159 if not rt.errors:
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
160 if refactor_stdin:
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
161 rt.refactor_stdin()
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
162 else:
53821
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
163 try:
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
164 rt.refactor(args, options.write, options.doctests_only,
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
165 options.processes)
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
166 except refactor.MultiprocessingUnsupported:
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
167 assert options.processes > 1
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
168 print >> sys.stderr, "Sorry, -j isn't " \
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
169 "supported on this platform."
fb10b88afd40 Merged revisions 68503,68507,68694,69054,69673,69679-69681,70991,70999,71003,71695 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50487
diff changeset
170 return 1
48978
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
171 rt.summarize()
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
172
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
173 # Return error status (0 if rt.errors is zero)
75c5a2c9376e Merged revisions 66174-66175,66177 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
174 return int(bool(rt.errors))