From 49cb36fc56225b02b4c39aea43095de15da75217 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 22 Jul 2009 18:32:08 +0200 Subject: methods/cdrom.cc: move the scan into the loop that waits for a CD --- methods/cdrom.cc | 67 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 28 deletions(-) (limited to 'methods/cdrom.cc') diff --git a/methods/cdrom.cc b/methods/cdrom.cc index cd0d4e512..a677022ad 100644 --- a/methods/cdrom.cc +++ b/methods/cdrom.cc @@ -121,6 +121,8 @@ bool CDROMMethod::Fetch(FetchItem *Itm) FetchResult Res; bool Debug = _config->FindB("Debug::Acquire::cdrom",false); + if (Debug) + clog << "CDROMMethod::Fetch " << Itm->Uri << endl; /* All IMS queries are returned as a hit, CDROMs are readonly so time stamps never change */ @@ -156,54 +158,63 @@ bool CDROMMethod::Fetch(FetchItem *Itm) } // We already have a CD inserted, but it is the wrong one - if (CurrentID.empty() == false && Database.Find("CD::" + CurrentID) != Get.Host) + if (CurrentID.empty() == false && + CurrentID != "FAIL" && + Database.Find("CD::" + CurrentID) != Get.Host) { Fail(_("Wrong CD-ROM"),true); return true; } CDROM = _config->FindDir("Acquire::cdrom::mount","/cdrom/"); + if (Debug) + clog << "Looking for CDROM at " << CDROM << endl; - // auto-detect mode - if (CDROM == "apt-udev-auto/") + if (CDROM[0] == '.') + CDROM= SafeGetCWD() + '/' + CDROM; + string NewID; + pkgUdevCdromDevices udev; + + while (CurrentID.empty() == true) { - pkgUdevCdromDevices udev; - if(udev.Dlopen()) + // hrm, ugly the loop here + if (CDROM == "apt-udev-auto/") { - vector v = udev.Scan(); - for (unsigned int i=0; i < v.size(); i++) + if(udev.Dlopen()) { - if (!v[i].Mounted) + vector v = udev.Scan(); + for (unsigned int i=0; i < v.size(); i++) { - if (!FileExists("/media/apt")) - mkdir("/media/apt", 0755); - if(MountCdrom("/media/apt", v[i].DeviceName)) + if (Debug) + clog << "Have cdrom device " << v[i].DeviceName << endl; + if (!v[i].Mounted) { - if (IsCorrectCD(Get, "/media/apt")) + if (!FileExists("/media/apt")) + mkdir("/media/apt", 0755); + if(MountCdrom("/media/apt", v[i].DeviceName)) + { + if (IsCorrectCD(Get, "/media/apt")) + { + MountedByApt = true; + CDROM = "/media/apt"; + break; + } else { + UnmountCdrom("/media/apt"); + } + } + } else { + if (IsCorrectCD(Get, v[i].MountPath)) { - MountedByApt = true; - CDROM = "/media/apt"; + CDROM = v[i].MountPath; break; - } else { - UnmountCdrom("/media/apt"); } } - } else { - if (IsCorrectCD(Get, v[i].MountPath)) - { - CDROM = v[i].MountPath; - break; - } } + } else { + _error->WarningE("udev.Dlopen() failed","foo"); } } - } - if (CDROM[0] == '.') - CDROM= SafeGetCWD() + '/' + CDROM; - string NewID; - while (CurrentID.empty() == true) - { bool Hit = false; if(!IsMounted(CDROM)) MountedByApt = MountCdrom(CDROM); -- cgit v1.2.3