diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /testing/mozbase/mozprofile/mozprofile/diff.py | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'testing/mozbase/mozprofile/mozprofile/diff.py')
-rw-r--r-- | testing/mozbase/mozprofile/mozprofile/diff.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/testing/mozbase/mozprofile/mozprofile/diff.py b/testing/mozbase/mozprofile/mozprofile/diff.py new file mode 100644 index 000000000..98776e838 --- /dev/null +++ b/testing/mozbase/mozprofile/mozprofile/diff.py @@ -0,0 +1,81 @@ +#!/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() |