]> git.saurik.com Git - apt.git/blame - apt-private/private-sources.cc
do not crash if VF.File()/VF.File().Archive() is NULL
[apt.git] / apt-private / private-sources.cc
CommitLineData
9e6b13f3
MV
1
2#include <apt-pkg/hashes.h>
3#include <apti18n.h>
4
5#include "private-output.h"
6#include "private-sources.h"
7#include "private-utils.h"
8
a8f671c1
MV
9/* Interface discussion with donkult (for the future):
10 apt [add-{archive,release,component}|edit|change-release|disable]-sources
11 and be clever and work out stuff from the Release file
12*/
13
9e6b13f3
MV
14// EditSource - EditSourcesList /*{{{*/
15// ---------------------------------------------------------------------
16bool EditSources(CommandLine &CmdL)
17{
18 bool res;
19 pkgSourceList sl;
20 std::string outs;
21
a8f671c1
MV
22 std::string sourceslist;
23 if (CmdL.FileList[1] != NULL)
cf993341
MV
24 {
25 sourceslist = _config->FindDir("Dir::Etc::sourceparts") + CmdL.FileList[1];
26 if (!APT::String::Endswith(sourceslist, ".list"))
27 sourceslist += ".list";
28 } else {
a8f671c1 29 sourceslist = _config->FindFile("Dir::Etc::sourcelist");
cf993341 30 }
9e6b13f3 31 HashString before;
a8f671c1
MV
32 if (FileExists(sourceslist))
33 before.FromFile(sourceslist);
9e6b13f3 34
c189f87d
MV
35 int lockfd = GetLock(sourceslist);
36 if (lockfd < 0)
37 return false;
38
9e6b13f3
MV
39 do {
40 EditFileInSensibleEditor(sourceslist);
41 _error->PushToStack();
42 res = sl.Read(sourceslist);
43 if (!res) {
a8f671c1 44 _error->DumpErrors();
9e6b13f3
MV
45 strprintf(outs, _("Failed to parse %s. Edit again? "),
46 sourceslist.c_str());
47 std::cout << outs;
cf993341 48 // FIXME: should we add a "restore previous" option here?
9e6b13f3
MV
49 res = !YnPrompt(true);
50 }
51 _error->RevertToStack();
52 } while (res == false);
c189f87d 53 close(lockfd);
9e6b13f3 54
a8f671c1 55 if (FileExists(sourceslist) && !before.VerifyFile(sourceslist)) {
9e6b13f3
MV
56 strprintf(
57 outs, _("Your '%s' file changed, please run 'apt-get update'."),
58 sourceslist.c_str());
59 std::cout << outs << std::endl;
60 }
61
62 return true;
63}
64 /*}}}*/