comparison venv/lib/python2.7/site-packages/planemo/shed/diff.py @ 0:d67268158946 draft

planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
author bcclaywell
date Mon, 12 Oct 2015 17:43:33 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:d67268158946
1 from __future__ import print_function
2
3 import os
4 import sys
5 from xml.etree import ElementTree
6
7 from planemo.xml import diff
8
9
10 def diff_and_remove(working, label_a, label_b, f):
11 assert label_a != label_b
12 special = ["tool_dependencies.xml", "repository_dependencies.xml"]
13 deps_diff = 0
14 # Could walk either A or B; will only compare if in same relative location
15 for dirpath, dirnames, filenames in os.walk(os.path.join(working, label_a)):
16 for filename in filenames:
17 if filename in special:
18 a = os.path.join(dirpath, filename)
19 b = os.path.join(working, label_b, os.path.relpath(a, os.path.join(working, label_a)))
20 if os.path.exists(a) and os.path.exists(b):
21 deps_diff &= _shed_diff(a, b, f)
22 os.remove(a)
23 os.remove(b)
24 return deps_diff
25
26
27 def _shed_diff(file_a, file_b, f=sys.stdout):
28 xml_a = ElementTree.parse(file_a).getroot()
29 xml_b = ElementTree.parse(file_b).getroot()
30 _strip_shed_attributes(xml_a)
31 _strip_shed_attributes(xml_b)
32 return diff.diff(xml_a, xml_b, reporter=f.write)
33
34
35 def _strip_shed_attributes(xml_element):
36 if xml_element.tag == "repository":
37 _remove_attribs(xml_element)
38 children = xml_element.getchildren()
39 if len(children) > 0:
40 for child in children:
41 _strip_shed_attributes(child)
42
43
44 def _remove_attribs(xml_element):
45 for attrib in ["changeset_revision", "toolshed"]:
46 if attrib in xml_element.attrib:
47 del xml_element.attrib[attrib]