X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/9e6b13f3751f8a1287ff79861980afb7792a5f9e..8d1cb6da6e21302c654da3f09de3975af7e4a11f:/apt-private/private-sources.cc?ds=sidebyside diff --git a/apt-private/private-sources.cc b/apt-private/private-sources.cc index eb9c5b971..5f61a23ab 100644 --- a/apt-private/private-sources.cc +++ b/apt-private/private-sources.cc @@ -1,10 +1,28 @@ +#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" +/* Interface discussion with donkult (for the future): + apt [add-{archive,release,component}|edit|change-release|disable]-sources + and be clever and work out stuff from the Release file +*/ // EditSource - EditSourcesList /*{{{*/ // --------------------------------------------------------------------- @@ -12,32 +30,42 @@ bool EditSources(CommandLine &CmdL) { bool res; pkgSourceList sl; - std::string outs; - - // FIXME: suport CmdL.FileList to specify sources.list.d files - std::string sourceslist = _config->FindFile("Dir::Etc::sourcelist"); + std::string sourceslist; + if (CmdL.FileList[1] != NULL) + { + 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; - before.FromFile(sourceslist); + if (FileExists(sourceslist)) + before.FromFile(sourceslist); + + int lockfd = GetLock(sourceslist); + if (lockfd < 0) + return false; do { EditFileInSensibleEditor(sourceslist); _error->PushToStack(); res = sl.Read(sourceslist); if (!res) { - strprintf(outs, _("Failed to parse %s. Edit again? "), - sourceslist.c_str()); - std::cout << outs; - res = !YnPrompt(true); + std::string outs; + strprintf(outs, _("Failed to parse %s. Edit again? "), sourceslist.c_str()); + // FIXME: should we add a "restore previous" option here? + res = !YnPrompt(outs.c_str(), true); } _error->RevertToStack(); } while (res == false); + close(lockfd); - if (!before.VerifyFile(sourceslist)) { - strprintf( - outs, _("Your '%s' file changed, please run 'apt-get update'."), + if (FileExists(sourceslist) && !before.VerifyFile(sourceslist)) { + ioprintf( + std::cout, _("Your '%s' file changed, please run 'apt-get update'."), sourceslist.c_str()); - std::cout << outs << std::endl; } return true;