Преглед на файлове

add support for "apt edit-source foo" sources.list.d component editing

Michael Vogt преди 12 години
родител
ревизия
a8f671c17a
променени са 1 файла, в които са добавени 14 реда и са изтрити 4 реда
  1. 14 4
      apt-private/private-sources.cc

+ 14 - 4
apt-private/private-sources.cc

@@ -6,6 +6,11 @@
 #include "private-sources.h"
 #include "private-sources.h"
 #include "private-utils.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         			        /*{{{*/
 // EditSource - EditSourcesList         			        /*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 bool EditSources(CommandLine &CmdL)
 bool EditSources(CommandLine &CmdL)
@@ -14,17 +19,22 @@ bool EditSources(CommandLine &CmdL)
    pkgSourceList sl;
    pkgSourceList sl;
    std::string outs;
    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] + ".list";
+   else
+      sourceslist = _config->FindFile("Dir::Etc::sourcelist");
 
 
    HashString before;
    HashString before;
-   before.FromFile(sourceslist);
+   if (FileExists(sourceslist))
+       before.FromFile(sourceslist);
 
 
    do {
    do {
       EditFileInSensibleEditor(sourceslist);
       EditFileInSensibleEditor(sourceslist);
       _error->PushToStack();
       _error->PushToStack();
       res = sl.Read(sourceslist);
       res = sl.Read(sourceslist);
       if (!res) {
       if (!res) {
+         _error->DumpErrors();
          strprintf(outs, _("Failed to parse %s. Edit again? "),
          strprintf(outs, _("Failed to parse %s. Edit again? "),
                    sourceslist.c_str());
                    sourceslist.c_str());
          std::cout << outs;
          std::cout << outs;
@@ -33,7 +43,7 @@ bool EditSources(CommandLine &CmdL)
       _error->RevertToStack();
       _error->RevertToStack();
    } while (res == false);
    } while (res == false);
 
 
-   if (!before.VerifyFile(sourceslist)) {
+   if (FileExists(sourceslist) && !before.VerifyFile(sourceslist)) {
       strprintf(
       strprintf(
          outs, _("Your '%s' file changed, please run 'apt-get update'."),
          outs, _("Your '%s' file changed, please run 'apt-get update'."),
          sourceslist.c_str());
          sourceslist.c_str());