mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-25 20:29:33 +00:00
79 lines
2.1 KiB
Python
79 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
"""
|
|
diff two profile summaries
|
|
"""
|
|
|
|
import difflib
|
|
import profile
|
|
import optparse
|
|
import os
|
|
import sys
|
|
|
|
__all__ = ['diff', 'diff_profiles']
|
|
|
|
def diff(profile1, profile2, diff_function=difflib.unified_diff):
|
|
|
|
profiles = (profile1, profile2)
|
|
parts = {}
|
|
parts_dict = {}
|
|
for index in (0, 1):
|
|
prof = profiles[index]
|
|
|
|
# first part, the path, isn't useful for diffing
|
|
parts[index] = prof.summary(return_parts=True)[1:]
|
|
|
|
parts_dict[index] = dict(parts[index])
|
|
|
|
# keys the first profile is missing
|
|
first_missing = [i for i in parts_dict[1]
|
|
if i not in parts_dict[0]]
|
|
parts[0].extend([(i, '') for i in first_missing])
|
|
|
|
# diffs
|
|
retval = []
|
|
for key, value in parts[0]:
|
|
other = parts_dict[1].get(key, '')
|
|
value = value.strip(); other = other.strip()
|
|
|
|
if key == 'Files':
|
|
# first line of files is the path; we don't care to diff that
|
|
value = '\n'.join(value.splitlines()[1:])
|
|
if other:
|
|
other = '\n'.join(other.splitlines()[1:])
|
|
|
|
value = value.splitlines()
|
|
other = other.splitlines()
|
|
section_diff = list(diff_function(value, other, profile1.profile, profile2.profile))
|
|
if section_diff:
|
|
retval.append((key, '\n'.join(section_diff)))
|
|
|
|
return retval
|
|
|
|
def diff_profiles(args=sys.argv[1:]):
|
|
|
|
# parse command line
|
|
usage = '%prog [options] profile1 profile2'
|
|
parser = optparse.OptionParser(usage=usage, description=__doc__)
|
|
options, args = parser.parse_args(args)
|
|
if len(args) != 2:
|
|
parser.error("Must give two profile paths")
|
|
missing = [arg for arg in args if not os.path.exists(arg)]
|
|
if missing:
|
|
parser.error("Profile not found: %s" % (', '.join(missing)))
|
|
|
|
# get the profile differences
|
|
diffs = diff(*([profile.Profile(arg)
|
|
for arg in args]))
|
|
|
|
# display them
|
|
while diffs:
|
|
key, value = diffs.pop(0)
|
|
print '[%s]:\n' % key
|
|
print value
|
|
if diffs:
|
|
print '-' * 4
|
|
|
|
if __name__ == '__main__':
|
|
diff_profiles()
|