{
protected:
OpTextProgress Progress;
- void Prompt(const char *Text);
+ void Prompt(const char *Text);
string PromptLine(const char *Text);
bool AskCdromName(string &name);
virtual OpProgress* GetOpProgress();
};
-void pkgCdromTextStatus::Prompt(const char *Text)
+void pkgCdromTextStatus::Prompt(const char *Text)
{
char C;
cout << Text << ' ' << flush;
if (read(STDIN_FILENO,&C,1) < 0)
- _error->Errno("pkgCdromTextStatus::Prompt",
+ _error->Errno("pkgCdromTextStatus::Prompt",
"Failed to read from standard input (not a terminal?)");
if (C != '\n')
cout << endl;
string pkgCdromTextStatus::PromptLine(const char *Text)
{
cout << Text << ':' << endl;
-
+
string Res;
getline(cin,Res);
return Res;
}
-bool pkgCdromTextStatus::AskCdromName(string &name)
+bool pkgCdromTextStatus::AskCdromName(string &name)
{
cout << _("Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'") << flush;
name = PromptLine("");
-
+
return true;
}
-
-void pkgCdromTextStatus::Update(string text, int current)
+
+void pkgCdromTextStatus::Update(string text, int /*current*/)
{
if(text.size() > 0)
cout << text << flush;
}
-bool pkgCdromTextStatus::ChangeCdrom()
+bool pkgCdromTextStatus::ChangeCdrom()
{
Prompt(_("Please insert a Disc in the drive and press enter"));
return true;
}
-OpProgress* pkgCdromTextStatus::GetOpProgress()
-{
- return &Progress;
-};
+OpProgress* pkgCdromTextStatus::GetOpProgress()
+{
+ return &Progress;
+}
/*}}}*/
// SetupAutoDetect /*{{{*/
-bool AutoDetectCdrom(pkgUdevCdromDevices &UdevCdroms, unsigned int &i)
+static bool AutoDetectCdrom(pkgUdevCdromDevices &UdevCdroms, unsigned int &i, bool &automounted)
{
bool Debug = _config->FindB("Debug::Acquire::cdrom", false);
+ automounted = false;
+
vector<struct CdromDevice> v = UdevCdroms.Scan();
if (i >= v.size())
return false;
mkdir(AptMountPoint.c_str(), 0750);
if(MountCdrom(AptMountPoint, v[i].DeviceName) == false)
_error->Warning(_("Failed to mount '%s' to '%s'"), v[i].DeviceName.c_str(), AptMountPoint.c_str());
+ else
+ automounted = true;
_config->Set("Acquire::cdrom::mount", AptMountPoint);
_config->Set("APT::CDROM::NoMount", true);
}
sequence is to mount/umount the CD, Ident it then scan it for package
files and reduce that list. Then we copy over the package files and
verify them. Then rewrite the database files */
-bool DoAdd(CommandLine &)
+static bool DoAdd(CommandLine &)
{
pkgUdevCdromDevices UdevCdroms;
pkgCdromTextStatus log;
bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect", true);
unsigned int count = 0;
+ string AptMountPoint = _config->FindDir("Dir::Media::MountPath");
+ bool automounted = false;
if (AutoDetect && UdevCdroms.Dlopen())
- while (AutoDetectCdrom(UdevCdroms, count))
- res &= cdrom.Add(&log);
- if (count == 0) {
- res = cdrom.Add(&log);
- if (res == false) {
- _error->Error("%s", _(W_NO_CDROM_FOUND));
+ while (AutoDetectCdrom(UdevCdroms, count, automounted)) {
+ if (count == 1) {
+ // begin loop with res false to detect any success using OR
+ res = false;
+ }
+
+ // dump any warnings/errors from autodetect
+ if (_error->empty() == false)
+ _error->DumpErrors();
+
+ res |= cdrom.Add(&log);
+
+ if (automounted)
+ UnmountCdrom(AptMountPoint);
+
+ // dump any warnings/errors from add/unmount
+ if (_error->empty() == false)
+ _error->DumpErrors();
}
- }
- if(res)
+ if (count == 0)
+ res = cdrom.Add(&log);
+
+ if (res == false)
+ _error->Error("%s", _(W_NO_CDROM_FOUND));
+ else
cout << _("Repeat this process for the rest of the CDs in your set.") << endl;
return res;
// DoIdent - Ident a CDROM /*{{{*/
// ---------------------------------------------------------------------
/* */
-bool DoIdent(CommandLine &)
+static bool DoIdent(CommandLine &)
{
pkgUdevCdromDevices UdevCdroms;
string ident;
pkgCdrom cdrom;
bool res = true;
- bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect");
+ bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect", true);
unsigned int count = 0;
+ string AptMountPoint = _config->FindDir("Dir::Media::MountPath");
+ bool automounted = false;
if (AutoDetect && UdevCdroms.Dlopen())
- while (AutoDetectCdrom(UdevCdroms, count))
- res &= cdrom.Ident(ident, &log);
- if (count == 0) {
- res = cdrom.Ident(ident, &log);
- if (res == false) {
- _error->Error("%s", _(W_NO_CDROM_FOUND));
+ while (AutoDetectCdrom(UdevCdroms, count, automounted)) {
+ if (count == 1) {
+ // begin loop with res false to detect any success using OR
+ res = false;
+ }
+
+ // dump any warnings/errors from autodetect
+ if (_error->empty() == false)
+ _error->DumpErrors();
+
+ res |= cdrom.Ident(ident, &log);
+
+ if (automounted)
+ UnmountCdrom(AptMountPoint);
+
+ // dump any warnings/errors from add/unmount
+ if (_error->empty() == false)
+ _error->DumpErrors();
}
- }
+
+ if (count == 0)
+ res = cdrom.Ident(ident, &log);
+
+ if (res == false)
+ _error->Error("%s", _(W_NO_CDROM_FOUND));
+
return res;
}
/*}}}*/
// ShowHelp - Show the help screen /*{{{*/
// ---------------------------------------------------------------------
/* */
-bool ShowHelp(CommandLine &)
+static bool ShowHelp(CommandLine &)
{
ioprintf(cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,PACKAGE_VERSION,
COMMON_ARCH,__DATE__,__TIME__);