diff --git a/osc/core.py b/osc/core.py index 1af0f94c..ebefc721 100644 --- a/osc/core.py +++ b/osc/core.py @@ -53,6 +53,7 @@ from . import oscerr from . import output from . import store as osc_store from .connection import http_request, http_GET, http_POST, http_PUT, http_DELETE +from .obs_scm import File from .output import sanitize_text from .store import Store from .util import xdg @@ -263,60 +264,6 @@ def revision_is_empty(rev: Union[None, str, int]): return rev in (None, "") -@total_ordering -class File: - """represent a file, including its metadata""" - - def __init__(self, name, md5, size, mtime, skipped=False): - self.name = name - self.md5 = md5 - self.size = size - self.mtime = mtime - self.skipped = skipped - - def __repr__(self): - return self.name - - def __str__(self): - return self.name - - def __eq__(self, other): - if isinstance(other, str): - return self.name == other - self_data = (self.name, self.md5, self.size, self.mtime, self.skipped) - other_data = (other.name, other.md5, other.size, other.mtime, other.skipped) - return self_data == other_data - - def __lt__(self, other): - self_data = (self.name, self.md5, self.size, self.mtime, self.skipped) - other_data = (other.name, other.md5, other.size, other.mtime, other.skipped) - return self_data < other_data - - @classmethod - def from_xml_node(cls, node): - assert node.tag == "entry" - kwargs = { - "name": node.get("name"), - "md5": node.get("md5"), - "size": int(node.get("size")), - "mtime": int(node.get("mtime")), - "skipped": "skipped" in node.attrib, - } - return cls(**kwargs) - - def to_xml_node(self, parent_node): - attributes = { - "name": self.name, - "md5": self.md5, - "size": str(int(self.size)), - "mtime": str(int(self.mtime)), - } - if self.skipped: - attributes["skipped"] = "true" - new_node = ET.SubElement(parent_node, "entry", attributes) - return new_node - - class Serviceinfo: """Source service content """ diff --git a/osc/obs_scm/__init__.py b/osc/obs_scm/__init__.py new file mode 100644 index 00000000..401f3300 --- /dev/null +++ b/osc/obs_scm/__init__.py @@ -0,0 +1 @@ +from .file import File diff --git a/osc/obs_scm/file.py b/osc/obs_scm/file.py new file mode 100644 index 00000000..cd2fd3c6 --- /dev/null +++ b/osc/obs_scm/file.py @@ -0,0 +1,57 @@ +from functools import total_ordering + +from ..util.xml import ET + + +@total_ordering +class File: + """represent a file, including its metadata""" + + def __init__(self, name, md5, size, mtime, skipped=False): + self.name = name + self.md5 = md5 + self.size = size + self.mtime = mtime + self.skipped = skipped + + def __repr__(self): + return self.name + + def __str__(self): + return self.name + + def __eq__(self, other): + if isinstance(other, str): + return self.name == other + self_data = (self.name, self.md5, self.size, self.mtime, self.skipped) + other_data = (other.name, other.md5, other.size, other.mtime, other.skipped) + return self_data == other_data + + def __lt__(self, other): + self_data = (self.name, self.md5, self.size, self.mtime, self.skipped) + other_data = (other.name, other.md5, other.size, other.mtime, other.skipped) + return self_data < other_data + + @classmethod + def from_xml_node(cls, node): + assert node.tag == "entry" + kwargs = { + "name": node.get("name"), + "md5": node.get("md5"), + "size": int(node.get("size")), + "mtime": int(node.get("mtime")), + "skipped": "skipped" in node.attrib, + } + return cls(**kwargs) + + def to_xml_node(self, parent_node): + attributes = { + "name": self.name, + "md5": self.md5, + "size": str(int(self.size)), + "mtime": str(int(self.mtime)), + } + if self.skipped: + attributes["skipped"] = "true" + new_node = ET.SubElement(parent_node, "entry", attributes) + return new_node diff --git a/setup.cfg b/setup.cfg index 5dfb3129..39d24a0d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -37,6 +37,7 @@ packages = osc.commands osc.git_scm osc.obs_api + osc.obs_scm osc.output osc.util install_requires =