summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/cdrom.cc3
-rw-r--r--cmdline/apt-cdrom.cc67
-rw-r--r--debian/apt.dirs1
3 files changed, 67 insertions, 4 deletions
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc
index 72d8e4d41..3467f49d7 100644
--- a/apt-pkg/cdrom.cc
+++ b/apt-pkg/cdrom.cc
@@ -921,6 +921,7 @@ pkgUdevCdromDevices::Scan() /*{{{*/
pkgUdevCdromDevices::~pkgUdevCdromDevices() /*{{{*/
{
- dlclose(libudev_handle);
+ if (libudev_handle != NULL)
+ dlclose(libudev_handle);
}
/*}}}*/
diff --git a/cmdline/apt-cdrom.cc b/cmdline/apt-cdrom.cc
index d804c55e5..fc949ce7b 100644
--- a/cmdline/apt-cdrom.cc
+++ b/cmdline/apt-cdrom.cc
@@ -98,6 +98,39 @@ OpProgress* pkgCdromTextStatus::GetOpProgress()
return &Progress;
};
/*}}}*/
+// SetupAutoDetect /*{{{*/
+bool AutoDetectCdrom(pkgUdevCdromDevices &UdevCdroms, int &i)
+{
+ bool Debug = _config->FindB("Debug::Acquire::cdrom", false);
+
+ vector<struct CdromDevice> v = UdevCdroms.Scan();
+ if (i >= v.size())
+ return false;
+
+ if (Debug)
+ clog << "Looking at devce " << i
+ << " DeviveName: " << v[i].DeviceName
+ << " IsMounted: '" << v[i].Mounted << "'"
+ << " MountPoint: '" << v[i].MountPath << "'"
+ << endl;
+
+ if (v[i].Mounted)
+ {
+ // set the right options
+ _config->Set("Acquire::cdrom::mount", v[i].MountPath);
+ _config->Set("APT::CDROM::NoMount", true);
+ } else {
+ MountCdrom("/var/lib/apt/media", v[i].DeviceName);
+ MountCdrom("/var/lib/apt/media", v[i].DeviceName);
+ _config->Set("Acquire::cdrom::mount", "/var/lib/apt/media");
+ _config->Set("APT::CDROM::NoMount", true);
+ }
+ i++;
+
+ return true;
+}
+ /*}}}*/
+
// DoAdd - Add a new CDROM /*{{{*/
// ---------------------------------------------------------------------
/* This does the main add bit.. We show some status and things. The
@@ -106,12 +139,25 @@ OpProgress* pkgCdromTextStatus::GetOpProgress()
verify them. Then rewrite the database files */
bool DoAdd(CommandLine &)
{
- bool res = false;
+ pkgUdevCdromDevices UdevCdroms;
pkgCdromTextStatus log;
pkgCdrom cdrom;
- res = cdrom.Add(&log);
+ bool res = false;
+
+ bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect");
+ int count = 0;
+
+ if (AutoDetect && UdevCdroms.Dlopen())
+ {
+ while (AutoDetectCdrom(UdevCdroms, count))
+ res &= cdrom.Add(&log);
+ } else {
+ res = cdrom.Add(&log);
+ }
+
if(res)
cout << _("Repeat this process for the rest of the CDs in your set.") << endl;
+
return res;
}
/*}}}*/
@@ -120,10 +166,24 @@ bool DoAdd(CommandLine &)
/* */
bool DoIdent(CommandLine &)
{
+ pkgUdevCdromDevices UdevCdroms;
string ident;
pkgCdromTextStatus log;
pkgCdrom cdrom;
- return cdrom.Ident(ident, &log);
+ bool res = true;
+
+ bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect");
+ int count = 0;
+
+ if (AutoDetect && UdevCdroms.Dlopen())
+ {
+ while (AutoDetectCdrom(UdevCdroms, count))
+ res &= cdrom.Ident(ident, &log);
+ } else {
+ return cdrom.Ident(ident, &log);
+ }
+
+ return res;
}
/*}}}*/
// ShowHelp - Show the help screen /*{{{*/
@@ -164,6 +224,7 @@ int main(int argc,const char *argv[]) /*{{{*/
{
CommandLine::Args Args[] = {
{'h',"help","help",0},
+ {'a',"auto-detect","Acquire::cdrom::AutoDetect",0},
{'v',"version","version",0},
{'d',"cdrom","Acquire::cdrom::mount",CommandLine::HasArg},
{'r',"rename","APT::CDROM::Rename",0},
diff --git a/debian/apt.dirs b/debian/apt.dirs
index fb6716c35..b812f116b 100644
--- a/debian/apt.dirs
+++ b/debian/apt.dirs
@@ -9,6 +9,7 @@ etc/logrotate.d
var/cache/apt/archives/partial
var/lib/apt/lists/partial
var/lib/apt/periodic
+var/lib/apt/media
var/log/apt
usr/share/bug/apt
usr/share/lintian/overrides