|
15 | 15 | Tested on releases back to 0.7.0.
|
16 | 16 |
|
17 | 17 | """
|
18 |
| -import argparse |
19 |
| -argparser = argparse.ArgumentParser(description=""" |
20 |
| -'Program description. |
21 |
| -""".strip()) |
22 | 18 |
|
23 |
| -argparser.add_argument('-f', '--force-overwrite', |
| 19 | +try: |
| 20 | + import argparse |
| 21 | + argparser = argparse.ArgumentParser(description=""" |
| 22 | + 'Program description. |
| 23 | + """.strip()) |
| 24 | + |
| 25 | + argparser.add_argument('-f', '--force-overwrite', |
24 | 26 | default=False,
|
25 | 27 | help='Setting this will overwrite any existing cache results for the current commit',
|
26 | 28 | action='store_true')
|
27 |
| -argparser.add_argument('-d', '--debug', |
| 29 | + argparser.add_argument('-d', '--debug', |
28 | 30 | default=False,
|
29 | 31 | help='Report cache hits/misses',
|
30 | 32 | action='store_true')
|
31 | 33 |
|
32 |
| -args = argparser.parse_args() |
| 34 | + args = argparser.parse_args() |
| 35 | +except: |
| 36 | + class Foo(object): |
| 37 | + debug=False |
| 38 | + force_overwrite=False |
| 39 | + |
| 40 | + args = Foo() # for 2.6, no argparse |
33 | 41 |
|
34 | 42 | #print args.accumulate(args.integers)
|
35 | 43 |
|
|
70 | 78 | import shutil
|
71 | 79 | import multiprocessing
|
72 | 80 | pyver = "%d.%d" % (sys.version_info[:2])
|
73 |
| - files = ["pandas"] |
| 81 | + fileq = ["pandas"] |
74 | 82 | to_process = dict()
|
75 |
| - orig_hashes= dict((f.split("-")[0],f) for f in os.listdir(BUILD_CACHE_DIR) |
76 |
| - if "-" in f and f.endswith(pyver)) |
77 |
| - post_hashes= dict((f.split("-")[1],f) for f in os.listdir(BUILD_CACHE_DIR) |
78 |
| - if "-" in f and f.endswith(pyver)) |
79 | 83 |
|
80 |
| - while files: |
81 |
| - f = files.pop() |
| 84 | + # retrieve the hashes existing in the cache |
| 85 | + orig_hashes=dict() |
| 86 | + post_hashes=dict() |
| 87 | + for path,dirs,files in os.walk(os.path.join(BUILD_CACHE_DIR,'pandas')): |
| 88 | + for f in files: |
| 89 | + s=f.split(".py-")[-1] |
| 90 | + try: |
| 91 | + prev_h,post_h,ver = s.split('-') |
| 92 | + if ver == pyver: |
| 93 | + orig_hashes[prev_h] = os.path.join(path,f) |
| 94 | + post_hashes[post_h] = os.path.join(path,f) |
| 95 | + except: |
| 96 | + pass |
| 97 | +
|
| 98 | + while fileq: |
| 99 | + f = fileq.pop() |
82 | 100 |
|
83 | 101 | if os.path.isdir(f):
|
84 |
| - files.extend([os.path.join(f,x) for x in os.listdir(f)]) |
| 102 | + fileq.extend([os.path.join(f,x) for x in os.listdir(f)]) |
85 | 103 | else:
|
86 | 104 | if not f.endswith(".py"):
|
87 | 105 | continue
|
|
90 | 108 | h = sha1(open(f,"rb").read()).hexdigest()
|
91 | 109 | except IOError:
|
92 | 110 | to_process[h] = f
|
93 |
| - if h in orig_hashes and not BC_FORCE_OVERWRITE: |
94 |
| - src = os.path.join(BUILD_CACHE_DIR,orig_hashes[h]) |
95 |
| - if BC_DEBUG: |
96 |
| - print("2to3 cache hit %s,%s" % (f,h)) |
97 |
| - shutil.copyfile(src,f) |
98 |
| - elif h not in post_hashes: |
99 |
| -
|
100 |
| - # we're not in a dev dir with already processed files |
101 |
| - if BC_DEBUG: |
102 |
| - print("2to3 cache miss %s,%s" % (f,h)) |
103 |
| - print("2to3 will process " + f) |
104 |
| - to_process[h] = f |
| 111 | + else: |
| 112 | + if h in orig_hashes and not BC_FORCE_OVERWRITE: |
| 113 | + src = orig_hashes[h] |
| 114 | + if BC_DEBUG: |
| 115 | + print("2to3 cache hit %s,%s" % (f,h)) |
| 116 | + shutil.copyfile(src,f) |
| 117 | + elif h not in post_hashes: |
| 118 | + # we're not in a dev dir with already processed files |
| 119 | + if BC_DEBUG: |
| 120 | + print("2to3 cache miss (will process) %s,%s" % (f,h)) |
| 121 | + to_process[h] = f |
105 | 122 |
|
106 | 123 | avail_fixes = set(refactor.get_fixers_from_package("lib2to3.fixes"))
|
107 | 124 | avail_fixes.discard('lib2to3.fixes.fix_next')
|
108 | 125 | t=refactor.RefactoringTool(avail_fixes)
|
109 |
| - print("Starting 2to3 refactoring...") |
110 |
| - for f in to_process.values(): |
111 |
| - if BC_DEBUG: |
112 |
| - print("2to3 on %s" % f) |
113 |
| - try: |
114 |
| - t.refactor([f],True) |
115 |
| - post_h = sha1(open(f, "rb").read()).hexdigest() |
116 |
| - cached_fname = f + "-" + post_h + "-" + pyver |
| 126 | + if to_process: |
| 127 | + print("Starting 2to3 refactoring...") |
| 128 | + for orig_h,f in to_process.items(): |
117 | 129 | if BC_DEBUG:
|
118 |
| - print("cache put %s,%s in %s" % (f, h, cached_fname)) |
119 |
| - shutil.copyfile(f, os.path.join(BUILD_CACHE_DIR, cached_fname)) |
| 130 | + print("2to3 on %s" % f) |
| 131 | + try: |
| 132 | + t.refactor([f],True) |
| 133 | + post_h = sha1(open(f, "rb").read()).hexdigest() |
| 134 | + cached_fname = f + '-' + orig_h + '-' + post_h + '-' + pyver |
| 135 | + path = os.path.join(BUILD_CACHE_DIR, cached_fname) |
| 136 | + pathdir =os.path.dirname(path) |
| 137 | + if BC_DEBUG: |
| 138 | + print("cache put %s in %s" % (f, path)) |
| 139 | + try: |
| 140 | + os.makedirs(pathdir) |
| 141 | + except OSError as exc: |
| 142 | + import errno |
| 143 | + if exc.errno == errno.EEXIST and os.path.isdir(pathdir): |
| 144 | + pass |
| 145 | + else: |
| 146 | + raise |
120 | 147 |
|
121 |
| - except: |
122 |
| - pass |
123 |
| - print("2to3 done refactoring.") |
| 148 | + shutil.copyfile(f, path) |
| 149 | +
|
| 150 | + except Exception as e: |
| 151 | + print("While processing %s 2to3 raised: %s" % (f,str(e))) |
| 152 | +
|
| 153 | + pass |
| 154 | + print("2to3 done refactoring.") |
124 | 155 |
|
125 | 156 | except Exception as e:
|
126 |
| - print( "Exception: " + str(e)) |
| 157 | + if not isinstance(e,ZeroDivisionError): |
| 158 | + print( "Exception: " + str(e)) |
127 | 159 | BUILD_CACHE_DIR = None
|
128 | 160 |
|
129 | 161 | class CompilationCacheMixin(object):
|
|
0 commit comments