From fec33a6a41d980a5cc0b759cf7eba157f9f1442f Mon Sep 17 00:00:00 2001 From: Benjamin Drung Date: Thu, 23 Dec 2010 17:18:42 +0100 Subject: [PATCH] wrap-and-sort: Split Control into separate Python file. --- debian/copyright | 4 ++-- ubuntutools/control.py | 54 ++++++++++++++++++++++++++++++++++++++++++ wrap-and-sort | 27 +++++---------------- 3 files changed, 62 insertions(+), 23 deletions(-) create mode 100644 ubuntutools/control.py diff --git a/debian/copyright b/debian/copyright index c3bb8b3..45f4cea 100644 --- a/debian/copyright +++ b/debian/copyright @@ -188,13 +188,13 @@ Files: doc/sponsor-patch.1, suspicious-source, ubuntutools/builder.py, ubuntutools/config.py, + ubuntutools/control.py, ubuntutools/logger.py, ubuntutools/question.py, ubuntutools/sponsor_patch/*, ubuntutools/test/*, wrap-and-sort -Copyright: - 2010, Benjamin Drung +Copyright: 2010, Benjamin Drung 2010, Evan Broder 2010, Stefano Rivera License: ISC diff --git a/ubuntutools/control.py b/ubuntutools/control.py new file mode 100644 index 0000000..6908335 --- /dev/null +++ b/ubuntutools/control.py @@ -0,0 +1,54 @@ +# +# control.py - Represents a debian/control file +# +# Copyright (C) 2010, Benjamin Drung +# +# 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. + +import os + +import debian.deb822 + +class Control(object): + """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_source_paragraph(self): + """Returns the source paragraph of the control file.""" + if self.paragraphs: + return self.paragraphs[0] + else: + return None + + def save(self, filename=None): + """Saves the control file.""" + if filename: + self.filename = filename + content = u"\n".join([x.dump() for x in self.paragraphs]) + control_file = open(self.filename, "w") + control_file.write(content.encode("utf-8")) + control_file.close() + + 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]) diff --git a/wrap-and-sort b/wrap-and-sort index e4a7d30..3312f7b 100755 --- a/wrap-and-sort +++ b/wrap-and-sort @@ -15,13 +15,14 @@ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -import debian.deb822 import glob import optparse import os import os.path import sys +from ubuntutools.control import Control + CONTROL_LIST_FIELDS = ( "Breaks", "Build-Depends", @@ -36,25 +37,7 @@ CONTROL_LIST_FIELDS = ( "Xb-Npp-MimeType", ) -class Control(object): - def __init__(self, filename, cleanup): - assert os.path.isfile(filename), "%s does not exist." % (filename) - self.filename = filename - sequence = open(filename) - if cleanup: - sequence = [l.rstrip() for l in sequence.readlines()] - self.paragraphs = list() - for paragraph in debian.deb822.Deb822.iter_paragraphs(sequence): - self.paragraphs.append(paragraph) - - def save(self, filename=None): - if filename: - self.filename = filename - content = u"\n".join([x.dump() for x in self.paragraphs]) - f = open(self.filename, "w") - f.write(content.encode("utf-8")) - f.close() - +class WrapAndSortControl(Control): def wrap_and_sort(self, wrap_always, short_indent, sort_paragraphs, keep_first): for paragraph in self.paragraphs: @@ -145,7 +128,9 @@ def main(options): for control_file in control_files: if options.verbose: print control_file - control = Control(control_file, options.cleanup) + control = WrapAndSortControl(control_file) + if options.cleanup: + control.strip_trailing_spaces() control.wrap_and_sort(options.wrap_always, options.short_indent, options.sort_binary_packages, options.keep_first) control.save()