mirror of
https://github.com/idapython/src
synced 2026-06-08 14:47:00 +00:00
82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
from __future__ import print_function
|
|
|
|
import os, sys, pickle, subprocess
|
|
from argparse import ArgumentParser
|
|
|
|
parser = ArgumentParser()
|
|
parser.add_argument("-l", "--left", required=True)
|
|
parser.add_argument("-r", "--right", required=True)
|
|
args = parser.parse_args()
|
|
|
|
with open(args.left, "rb") as forig:
|
|
with open(args.right, "rb") as fthen:
|
|
orig = pickle.load(forig)
|
|
then = pickle.load(fthen)
|
|
|
|
sk_orig = sorted(orig.keys())
|
|
sk_then = sorted(then.keys())
|
|
for key in sk_orig:
|
|
if not key in sk_then:
|
|
print("Missing expected key: %s" % key)
|
|
|
|
for key in sk_then:
|
|
if not key in sk_orig:
|
|
print("Unexpected key found: %s" % key)
|
|
|
|
subprocess.check_call(["rm", "-r", "-f", "/tmp/diffs"])
|
|
subprocess.check_call(["mkdir", "/tmp/diffs"])
|
|
for key in sk_orig:
|
|
if not key in sk_then:
|
|
continue
|
|
|
|
lines_orig = orig[key]
|
|
# sanitize lines_orig
|
|
def san(l):
|
|
l = l.replace("raise_python_stl_bad_alloc", "__raise_ba")
|
|
l = l.replace("raise_python_out_of_range_exception", "__raise_oor")
|
|
l = l.replace("raise_python_stl_exception", "__raise_e")
|
|
l = l.replace("raise_python_swig_director_exception", "__raise_de")
|
|
l = l.replace("raise_python_unknown_exception", "__raise_u")
|
|
return l
|
|
lines_orig = map(san, lines_orig)
|
|
|
|
lines_then = then[key]
|
|
if lines_orig != lines_then:
|
|
left_path = "/tmp/left_%s" % key
|
|
right_path = "/tmp/right_%s" % key
|
|
with open(left_path, "wb") as fleft:
|
|
fleft.write("\n".join(lines_orig))
|
|
with open(right_path, "wb") as fright:
|
|
fright.write("\n".join(lines_then))
|
|
patch_path = "/tmp/diffs/%s.patch" % key
|
|
with open(patch_path, "wb") as fout:
|
|
subprocess.call(["diff", "-u", "-w", left_path, right_path], stdout=fout)
|
|
# Now, let's see if the patch isn't trivial/acceptable. If it is,
|
|
# then we just delete that file
|
|
trivial_crap = [
|
|
"""- {
|
|
- Py_INCREF(Py_None);
|
|
- resultobj = Py_None;
|
|
- }
|
|
+ resultobj = SWIG_Py_Void();""",
|
|
|
|
"""- result = (bool)__init_hexrays_plugin(arg1);
|
|
+ result = (bool)py_init_hexrays_plugin(arg1);""",
|
|
|
|
"""- result = (bool)__install_hexrays_callback(arg1);
|
|
+ result = (bool)py_install_hexrays_callback(arg1);""",
|
|
|
|
"""- __add_custom_viewer_popup_item(arg1,(char const *)arg2,(char const *)arg3,arg4);
|
|
+ py_add_custom_viewer_popup_item(arg1,(char const *)arg2,(char const *)arg3,arg4);""",
|
|
|
|
]
|
|
|
|
with open(patch_path, "rb") as fin:
|
|
lines = fin.readlines()
|
|
diff_lines = filter(lambda l: (l.startswith("-") and not l.startswith("---")) or (l.startswith("+") and not l.startswith("+++")), lines)
|
|
diff_clob = "".join(diff_lines)
|
|
# print "\"%s\"" % diff_clob
|
|
if diff_clob.strip() in trivial_crap:
|
|
# print "Removing trivial patch: %s" % patch_path
|
|
os.remove(patch_path)
|