X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/a8f671c17a7f34e80a49bf367bceaa009551b066..a6deb7a0ea70e945dfd750d1bdc1b783b187873e:/apt-private/private-sources.cc diff --git a/apt-private/private-sources.cc b/apt-private/private-sources.cc index 37b0534bd..301936b9d 100644 --- a/apt-private/private-sources.cc +++ b/apt-private/private-sources.cc @@ -1,10 +1,23 @@ +#include #include -#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include -#include "private-output.h" -#include "private-sources.h" -#include "private-utils.h" +#include /* Interface discussion with donkult (for the future): apt [add-{archive,release,component}|edit|change-release|disable]-sources @@ -21,14 +34,21 @@ bool EditSources(CommandLine &CmdL) std::string sourceslist; if (CmdL.FileList[1] != NULL) - sourceslist = _config->FindDir("Dir::Etc::sourceparts") + CmdL.FileList[1] + ".list"; - else + { + sourceslist = _config->FindDir("Dir::Etc::sourceparts") + CmdL.FileList[1]; + if (!APT::String::Endswith(sourceslist, ".list")) + sourceslist += ".list"; + } else { sourceslist = _config->FindFile("Dir::Etc::sourcelist"); - + } HashString before; if (FileExists(sourceslist)) before.FromFile(sourceslist); + int lockfd = GetLock(sourceslist); + if (lockfd < 0) + return false; + do { EditFileInSensibleEditor(sourceslist); _error->PushToStack(); @@ -38,10 +58,12 @@ bool EditSources(CommandLine &CmdL) strprintf(outs, _("Failed to parse %s. Edit again? "), sourceslist.c_str()); std::cout << outs; + // FIXME: should we add a "restore previous" option here? res = !YnPrompt(true); } _error->RevertToStack(); } while (res == false); + close(lockfd); if (FileExists(sourceslist) && !before.VerifyFile(sourceslist)) { strprintf(