summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2009-01-09 21:50:26 +0100
committerJulian Andres Klode <jak@debian.org>2009-01-09 21:50:26 +0100
commit91939209a22a0d2d3c807432edd3b8c504c45ebd (patch)
tree93dc2d6783d533c812fb85ed1fff49b7679533c7
parent9c0e4ac3ec3657c5b77ec4a50b47af08625d3985 (diff)
downloadpython-apt-91939209a22a0d2d3c807432edd3b8c504c45ebd.tar.gz
* apt/cdrom.py: Cleanup, support sources.list.d
-rw-r--r--apt/cdrom.py85
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
-