Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/planemo/shed/diff.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
| author | shellac |
|---|---|
| date | Mon, 01 Jun 2020 08:59:25 -0400 |
| parents | 79f47841a781 |
| children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/planemo/shed/diff.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -"""Utilities for calculating effective repository diffs. - -Some intelligence is required because the tool shed updates attributes that it -is beneficial to ignore. -""" -from __future__ import print_function - -import os -import sys -from xml.etree import ElementTree - -from planemo.xml import diff - - -def diff_and_remove(working, label_a, label_b, f): - """Remove tool shed XML files and use a smart XML diff on them. - - Return 0 if and only if the XML content is the sam after stripping - attirbutes the tool shed updates. - """ - assert label_a != label_b - special = ["tool_dependencies.xml", "repository_dependencies.xml"] - deps_diff = 0 - # Could walk either A or B; will only compare if in same relative location - for dirpath, dirnames, filenames in os.walk(os.path.join(working, label_a)): - for filename in filenames: - if filename in special: - a = os.path.join(dirpath, filename) - b = os.path.join(working, label_b, os.path.relpath(a, os.path.join(working, label_a))) - files_exist = os.path.exists(a) and os.path.exists(b) - if files_exist: - deps_diff |= _shed_diff(a, b, f) - os.remove(a) - os.remove(b) - return deps_diff - - -def _shed_diff(file_a, file_b, f=sys.stdout): - """Strip attributes the tool shed writes and do smart XML diff. - - Returns 0 if and only if the XML content is the same after stripping - ``tool_shed`` and ``changeset_revision`` attributes. - """ - xml_a = ElementTree.parse(file_a).getroot() - xml_b = ElementTree.parse(file_b).getroot() - _strip_shed_attributes(xml_a) - _strip_shed_attributes(xml_b) - return diff.diff(xml_a, xml_b, reporter=f.write) - - -def _strip_shed_attributes(xml_element): - if xml_element.tag == "repository": - _remove_attribs(xml_element) - for child in xml_element: - _strip_shed_attributes(child) - - -def _remove_attribs(xml_element): - for attrib in ["changeset_revision", "toolshed"]: - if attrib in xml_element.attrib: - del xml_element.attrib[attrib] - - -__all__ = ( - "diff_and_remove", -)
