diff options
| author | Julian Andres Klode <jak@debian.org> | 2011-04-06 10:22:53 +0200 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2011-04-06 10:22:53 +0200 |
| commit | 30a0dff267d9e99c25d5902e296fd115746e05c9 (patch) | |
| tree | f2da2f051419c2038b3999734e1832a9b6c673dc | |
| parent | 82bd14484ffa3fbe0b68777402cb31000bd7dd22 (diff) | |
| download | python-apt-30a0dff267d9e99c25d5902e296fd115746e05c9.tar.gz | |
aptsources: Allow insertion of new multi-arch entries
| -rw-r--r-- | aptsources/sourceslist.py | 17 | ||||
| -rw-r--r-- | debian/changelog | 1 | ||||
| -rw-r--r-- | tests/test_aptsources.py | 36 |
3 files changed, 50 insertions, 4 deletions
diff --git a/aptsources/sourceslist.py b/aptsources/sourceslist.py index 3cfe1791..85db2de9 100644 --- a/aptsources/sourceslist.py +++ b/aptsources/sourceslist.py @@ -275,12 +275,14 @@ class SourcesList(object): yield entry raise StopIteration - def add(self, type, uri, dist, orig_comps, comment="", pos=-1, file=None): + def add(self, type, uri, dist, orig_comps, comment="", pos=-1, file=None, architectures=[]): """ Add a new source to the sources.list. The method will search for existing matching repos and will try to reuse them as far as possible """ + + architectures = set(architectures) # create a working copy of the component list so that # we can modify it later comps = orig_comps[:] @@ -288,7 +290,8 @@ class SourcesList(object): for source in self.list: if not source.disabled and not source.invalid and \ source.type == type and uri == source.uri and \ - source.dist == dist: + source.dist == dist and \ + set(source.architectures) == architectures: for new_comp in comps: if new_comp in source.comps: # we have this component already, delete it @@ -301,19 +304,25 @@ class SourcesList(object): # components if not source.disabled and not source.invalid and \ source.type == type and uri == source.uri and \ - source.dist == dist: + source.dist == dist and \ + set(source.architectures) == architectures: comps = uniq(source.comps + comps) source.comps = comps return source # if there is a corresponding repo which is disabled, enable it elif source.disabled and not source.invalid and \ source.type == type and uri == source.uri and \ + set(source.architectures) == architectures and \ source.dist == dist and \ len(set(source.comps) & set(comps)) == len(comps): source.disabled = False return source # there isn't any matching source, so create a new line and parse it - line = "%s %s %s" % (type, uri, dist) + + line = type + if architectures: + line += " [arch=%s]" % ",".join(architectures) + line += " %s %s" % (uri, dist) for c in comps: line = line + " " + c if comment != "": diff --git a/debian/changelog b/debian/changelog index c942278d..7ceda2ce 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ python-apt (0.8.0~exp2) UNRELEASED; urgency=low * aptsources: Parse multi-arch sources.list files correctly + * aptsources: Allow insertion of new multi-arch entries -- Julian Andres Klode <jak@debian.org> Wed, 06 Apr 2011 09:46:52 +0200 diff --git a/tests/test_aptsources.py b/tests/test_aptsources.py index aeb2ce31..1597674e 100644 --- a/tests/test_aptsources.py +++ b/tests/test_aptsources.py @@ -62,6 +62,14 @@ class TestAptSources(unittest.TestCase): "edgy", ["restricted"]) self.assertTrue(sources.list == before.list) + + before = copy.deepcopy(sources) + sources.add("deb", "http://de.archive.ubuntu.com/ubuntu/", + "natty", + ["main"], architectures=["amd64", "i386"]) + self.assertTrue(sources.list == before.list) + + # test to add something new: multiverse sources.add("deb", "http://de.archive.ubuntu.com/ubuntu/", "edgy", @@ -74,6 +82,34 @@ class TestAptSources(unittest.TestCase): "multiverse" in entry.comps): found = True self.assertTrue(found) + + # add a new natty entry without architecture specification + sources.add("deb", "http://de.archive.ubuntu.com/ubuntu/", + "natty", + ["multiverse"]) + found = False + for entry in sources: + if (entry.type == "deb" and + entry.uri == "http://de.archive.ubuntu.com/ubuntu/" and + entry.dist == "natty" and + entry.architectures == [] and + "multiverse" in entry.comps): + found = True + self.assertTrue(found) + + # Add universe to existing multi-arch line + sources.add("deb", "http://de.archive.ubuntu.com/ubuntu/", + "natty", + ["universe"], architectures=["i386", "amd64"]) + found = False + for entry in sources: + if (entry.type == "deb" and + entry.uri == "http://de.archive.ubuntu.com/ubuntu/" and + entry.dist == "natty" and + set(entry.architectures) == set(["amd64", "i386"]) and + set(entry.comps) == set(["main", "universe"])): + found = True + self.assertTrue(found) # test to add something new: multiverse *and* # something that is already there before = copy.deepcopy(sources) |
