diff options
| author | Julian Andres Klode <jak@debian.org> | 2009-01-09 21:50:26 +0100 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2009-01-09 21:50:26 +0100 |
| commit | 91939209a22a0d2d3c807432edd3b8c504c45ebd (patch) | |
| tree | 93dc2d6783d533c812fb85ed1fff49b7679533c7 | |
| parent | 9c0e4ac3ec3657c5b77ec4a50b47af08625d3985 (diff) | |
| download | python-apt-91939209a22a0d2d3c807432edd3b8c504c45ebd.tar.gz | |
* apt/cdrom.py: Cleanup, support sources.list.d
| -rw-r--r-- | apt/cdrom.py | 85 |
1 files changed, 64 insertions, 21 deletions
diff --git a/apt/cdrom.py b/apt/cdrom.py index c0e57094..797c644e 100644 --- a/apt/cdrom.py +++ b/apt/cdrom.py @@ -1,14 +1,49 @@ +# cdrom.py - CDROM handling +# +# Copyright (c) 2005 Canonical +# Copyright (c) 2009 Julian Andres Klode <jak@debian.org> +# +# Author: Michael Vogt <michael.vogt@ubuntu.com> +# +# 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 +"""Classes related to cdrom handling.""" +import glob + import apt_pkg -from progress import CdromProgress +from apt.progress import CdromProgress + class Cdrom(object): + """Support for apt-cdrom like features. + + This class has several optional parameters for initialisation, which may + be used to influence the behaviour of the object: + + The optional parameter `progress` is a CdromProgress() subclass, which will + ask for the correct cdrom, etc. If not specified or None, a CdromProgress() + object will be used. + + The optional parameter `mountpoint` may be used to specify an alternative + mountpoint. + + If the optional parameter `nomount` is True, the cdroms will not be + mounted. This is the default behaviour. + """ + def __init__(self, progress=None, mountpoint=None, nomount=True): - """ Support for apt-cdrom like features. - Options: - - progress: optional progress.CdromProgress() subclass - - mountpoint: optional alternative mountpoint - - nomount: do not mess with mount/umount the CD - """ self._cdrom = apt_pkg.GetCdrom() if progress is None: self._progress = CdromProgress() @@ -16,32 +51,40 @@ class Cdrom(object): self._progress = progress # see if we have a alternative mountpoint if mountpoint is not None: - apt_pkg.Config.Set("Acquire::cdrom::mount",mountpoint) + apt_pkg.Config.Set("Acquire::cdrom::mount", mountpoint) # do not mess with mount points by default - if nomount is True: + if nomount: apt_pkg.Config.Set("APT::CDROM::NoMount", "true") else: apt_pkg.Config.Set("APT::CDROM::NoMount", "false") + def add(self): - " add cdrom to the sources.list " + """Add cdrom to the sources.list.""" return self._cdrom.Add(self._progress) + def ident(self): - " identify the cdrom " + """Identify the cdrom.""" (res, ident) = self._cdrom.Ident(self._progress) if res: return ident - return None + @property def inSourcesList(self): - " check if the cdrom is already in the current sources.list " - cdid = self.ident() - if cdid is None: + """Check if the cdrom is already in the current sources.list.""" + cd_id = self.ident() + if cd_id is None: # FIXME: throw exception instead return False - # FIXME: check sources.list.d/ as well - for line in open(apt_pkg.Config.FindFile("Dir::Etc::sourcelist")): - line = line.strip() - if not line.startswith("#") and cdid in line: - return True + # Get a list of files + src = glob.glob(apt_pkg.Config.FindDir("Dir::Etc::sourceparts") + '*') + src.append(apt_pkg.Config.FindFile("Dir::Etc::sourcelist")) + # Check each file + for fname in src: + fobj = open(fname) + try: + for line in fobj: + if not line.lstrip().startswith("#") and cd_id in line: + return True + finally: + fobj.close() return False - |
