import difflib
import os.path
import Tkinter, tkFileDialog
root = Tkinter.Tk()
root.withdraw()
sample_data_in_base = False
collapse_whitespace = True
base_file_name = "base.html"
def ignore_ws(c):
return c in " \t\n\r"
filename1 = tkFileDialog.askopenfilename(title= "First file?")
f1 = file(filename1,'r').readlines()
filename2 = tkFileDialog.askopenfilename(title= "Second file?")
f2 = file(filename2,'r').readlines()
d = difflib.ndiff(f1,f2, charjunk=ignore_ws)
base = ""
r1 = r2 = '{% extends "'+base_file_name+'" %}'
block_open = False
block = 0
for line in d:
# equal line, goes into base, not r1 or r2
if line[:2] == " ":
#block tag open? close it
if block_open:
tag = "{% endblock " + str(block) + " %}\n"
base += tag
r1 += tag
r2 += tag
block += 1
block_open = False
base += line[2:]
continue
# else: different line
# block tag closed? open it
if not block_open:
tag = "{% block " + str(block) + " %}\n"
base += tag
r1 += tag
r2 += tag
block_open = True
# line from f1? put into r1 (and maybe base)
if line[:2] == "- ":
r1 += line[2:]
if sample_data_in_base:
base += line[2:]
# line from f2? put into r2
if line[:2] == "+ ":
r2 += line[2:]
for name,text in [(base_file_name,base),(filename1,r1),(filename2,r2)]:
root,ext = os.path.splitext(name)
if text!=base:
name = root+"_refactored"+ext
f=file(name,'w')
f.writelines(text)
f.close()
Comments
WARNING
I already had a base.html and it overwrote it without a prompt. Now that will teach me about reading the instructions and remembering to use version control!
#
Woops. Sorry!
#