summaryrefslogtreecommitdiffstats
path: root/scripts/devscripts/control.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/devscripts/control.py')
-rw-r--r--scripts/devscripts/control.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/scripts/devscripts/control.py b/scripts/devscripts/control.py
new file mode 100644
index 0000000..0208910
--- /dev/null
+++ b/scripts/devscripts/control.py
@@ -0,0 +1,93 @@
+# control.py - Represents a debian/control file
+#
+# Copyright (C) 2010, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""This module implements facilities to deal with Debian control."""
+
+import os
+import sys
+
+from devscripts.logger import Logger
+
+try:
+ import debian.deb822
+except ImportError:
+ Logger.error(
+ "Please install 'python3-debian' in order to use this utility.")
+ sys.exit(1)
+
+
+def _insert_after(paragraph, item_before, new_item, new_value):
+ """Insert new_item into directly after item_before
+
+ New items added to a dictionary are appended."""
+ item_found = False
+ for item in paragraph:
+ if item_found:
+ value = paragraph.pop(item)
+ paragraph[item] = value
+ if item == item_before:
+ item_found = True
+ paragraph[new_item] = new_value
+ if not item_found:
+ paragraph[new_item] = new_value
+
+
+class Control:
+ """Represents a debian/control file"""
+
+ def __init__(self, filename):
+ assert os.path.isfile(filename), "%s does not exist." % (filename)
+ self.filename = filename
+ sequence = open(filename)
+ self.paragraphs = list()
+ for paragraph in debian.deb822.Deb822.iter_paragraphs(sequence):
+ self.paragraphs.append(paragraph)
+
+ def get_maintainer(self):
+ """Returns the value of the Maintainer field."""
+ return self.paragraphs[0].get("Maintainer")
+
+ def get_original_maintainer(self):
+ """Returns the value of the XSBC-Original-Maintainer field."""
+ return self.paragraphs[0].get("XSBC-Original-Maintainer")
+
+ def save(self, filename=None):
+ """Saves the control file."""
+ if filename:
+ self.filename = filename
+ content = "\n".join([x.dump() for x in self.paragraphs])
+ control_file = open(self.filename, "wb")
+ control_file.write(content.encode("utf-8"))
+ control_file.close()
+
+ def set_maintainer(self, maintainer):
+ """Sets the value of the Maintainer field."""
+ self.paragraphs[0]["Maintainer"] = maintainer
+
+ def set_original_maintainer(self, original_maintainer):
+ """Sets the value of the XSBC-Original-Maintainer field."""
+ if "XSBC-Original-Maintainer" in self.paragraphs[0]:
+ self.paragraphs[0]["XSBC-Original-Maintainer"] = original_maintainer
+ else:
+ _insert_after(self.paragraphs[0], "Maintainer",
+ "XSBC-Original-Maintainer", original_maintainer)
+
+ def strip_trailing_spaces(self):
+ """Strips all trailing spaces from the control file."""
+ for paragraph in self.paragraphs:
+ for item in paragraph:
+ lines = paragraph[item].split("\n")
+ paragraph[item] = "\n".join([l.rstrip() for l in lines])