summaryrefslogtreecommitdiff
path: root/gbp/deb/control.py
diff options
context:
space:
mode:
authorDaniel Dehennin <daniel.dehennin@baby-gnu.org>2012-05-20 17:36:59 +0200
committerGuido Günther <agx@sigxcpu.org>2012-05-20 19:42:16 +0200
commitedc648346aba7830f7ab89c856eebdf45bfe5a44 (patch)
tree7fbf379e83d6d7b9e0272c16e684be8af919195b /gbp/deb/control.py
parent2ecf9e339f08fdb65607e738bac9216f078caeff (diff)
downloadgit-buildpackage-edc648346aba7830f7ab89c856eebdf45bfe5a44.tar.gz
git-buildpackage-edc648346aba7830f7ab89c856eebdf45bfe5a44.tar.bz2
git-buildpackage-edc648346aba7830f7ab89c856eebdf45bfe5a44.zip
Provide minimalist debian/control object
Closes: #673473 Signed-off-by: Guido Günther <agx@sigxcpu.org>
Diffstat (limited to 'gbp/deb/control.py')
-rw-r--r--gbp/deb/control.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/gbp/deb/control.py b/gbp/deb/control.py
new file mode 100644
index 00000000..da01ebea
--- /dev/null
+++ b/gbp/deb/control.py
@@ -0,0 +1,78 @@
+# vim: set fileencoding=utf-8 :
+#
+# (C) 2012 Daniel Dehennin <daniel.dehennin@baby-gnu.org>
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+"""A Debian Control"""
+
+import email
+import os
+
+class NoControlError(Exception):
+ """No control found"""
+ pass
+
+class ParseControlError(Exception):
+ """Problem parsing control"""
+ pass
+
+class Control(object):
+ """A Debian control"""
+
+ def __init__(self, contents=None, filename="debian/control"):
+ """
+ Parse an existing control file.
+
+ @param contents: content of a control file
+ @type contents: C{str}
+ @param filename: name of the control file
+ @type filename: C{str}
+ @return: Control object
+ @rtype: C{gbp.deb.conrol.Control} object
+ """
+ if contents:
+ control = email.message_from_string(contents)
+ else:
+ if not os.access(filename, os.F_OK):
+ raise NoControlError("Control file %s does not exist" % filename)
+
+ with file(filename) as f:
+ control = email.message_from_file(f)
+
+ if not control.items():
+ raise ParseControlError("Empty or invalid control file or contents")
+
+ self._control = control
+ self.filename = filename
+
+ def __getitem__(self, item):
+ return self._control[item]
+
+ def __setitem__(self, item, value):
+ self._control[item] = value
+
+ @property
+ def name(self):
+ """The packges name"""
+ return self._control['Source']
+
+ @property
+ def section(self):
+ """The packges section"""
+ return self._control['Section']
+
+ @property
+ def priority(self):
+ """The packges priority"""
+ return self._control['Priority']