diff options
Diffstat (limited to 'apt-private')
-rw-r--r-- | apt-private/makefile | 2 | ||||
-rw-r--r-- | apt-private/private-cmndline.cc | 7 | ||||
-rw-r--r-- | apt-private/private-install.h | 3 | ||||
-rw-r--r-- | apt-private/private-list.cc | 8 | ||||
-rw-r--r-- | apt-private/private-output.cc | 12 | ||||
-rw-r--r-- | apt-private/private-output.h | 3 | ||||
-rw-r--r-- | apt-private/private-sources.cc | 59 | ||||
-rw-r--r-- | apt-private/private-sources.h | 3 | ||||
-rw-r--r-- | apt-private/private-utils.cc | 50 | ||||
-rw-r--r-- | apt-private/private-utils.h | 11 |
10 files changed, 148 insertions, 10 deletions
diff --git a/apt-private/makefile b/apt-private/makefile index 1d179f0b2..728890b9b 100644 --- a/apt-private/makefile +++ b/apt-private/makefile @@ -17,7 +17,7 @@ MAJOR=0.0 MINOR=0 SLIBS=$(PTHREADLIB) -lapt-pkg -PRIVATES=list install download output cachefile cacheset update upgrade cmndline moo search show main +PRIVATES=list install download output cachefile cacheset update upgrade cmndline moo search show main utils sources SOURCE += $(foreach private, $(PRIVATES), private-$(private).cc) HEADERS += $(foreach private, $(PRIVATES), private-$(private).h) diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc index 8ba6629a8..28309af07 100644 --- a/apt-private/private-cmndline.cc +++ b/apt-private/private-cmndline.cc @@ -149,7 +149,11 @@ bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const * const else if (CmdMatches("build-dep")) { addArg('a', "host-architecture", "APT::Get::Host-Architecture", CommandLine::HasArg); + addArg(0, "purge", "APT::Get::Purge", 0); addArg(0, "solver", "APT::Solver", CommandLine::HasArg); + // this has no effect *but* sbuild is using it (see LP: #1255806) + // once sbuild is fixed, this option can be removed + addArg('f', "fix-broken", "APT::Get::Fix-Broken", 0); } else if (CmdMatches("clean", "autoclean", "check", "download", "changelog") || CmdMatches("markauto", "unmarkauto")) // deprecated commands @@ -222,7 +226,8 @@ bool addArgumentsAPT(std::vector<CommandLine::Args> &Args, char const * const Cm { addArg(0,"installed","APT::Cmd::Installed",0); addArg(0,"upgradable","APT::Cmd::Upgradable",0); - addArg('a', "all-versions", "APT::Cmd::AllVersions", 0); + addArg('v', "verbose", "APT::Cmd::List-Include-Summary", 0); + addArg('a', "all-versions", "APT::Cmd::All-Versions", 0); } else if (addArgumentsAPTGet(Args, Cmd) || addArgumentsAPTCache(Args, Cmd)) { diff --git a/apt-private/private-install.h b/apt-private/private-install.h index 439c89712..2187146d3 100644 --- a/apt-private/private-install.h +++ b/apt-private/private-install.h @@ -95,6 +95,9 @@ struct TryToInstall { Cache->GetDepCache()->SetCandidateVersion(s->first); bool Success = true; + // the Changed list contains: + // first: "new version" + // second: "what-caused the change" std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > Changed; for (std::list<std::pair<pkgCache::VerIterator, std::string> >::const_iterator s = start.begin(); s != start.end(); ++s) diff --git a/apt-private/private-list.cc b/apt-private/private-list.cc index 8c61fcae8..a02ebf02d 100644 --- a/apt-private/private-list.cc +++ b/apt-private/private-list.cc @@ -69,7 +69,7 @@ class PackageNameMatcher : public Matcher /*{{{*/ cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern); #else APT::CacheFilter::PackageMatcher *cachefilter = NULL; - if(_config->FindB("APT::Cmd::UseRegexp", false) == true) + if(_config->FindB("APT::Cmd::Use-Regexp", false) == true) cachefilter = new APT::CacheFilter::PackageNameMatchesRegEx(pattern); else cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern); @@ -132,6 +132,8 @@ bool List(CommandLine &Cmd) std::map<std::string, std::string> output_map; std::map<std::string, std::string>::const_iterator K; + bool includeSummary = _config->FindB("APT::Cmd::List-Include-Summary"); + PackageNameMatcher matcher(patterns); LocalitySortedVersionSet bag; OpTextProgress progress; @@ -143,13 +145,13 @@ bool List(CommandLine &Cmd) for (LocalitySortedVersionSet::iterator V = bag.begin(); V != bag.end(); V++) { std::stringstream outs; - if(_config->FindB("APT::Cmd::AllVersions", false) == true) + if(_config->FindB("APT::Cmd::All-Versions", false) == true) { ListAllVersions(CacheFile, records, V.ParentPkg(), outs); output_map.insert(std::make_pair<std::string, std::string>( V.ParentPkg().Name(), outs.str())); } else { - ListSingleVersion(CacheFile, records, V, outs); + ListSingleVersion(CacheFile, records, V, outs, includeSummary); output_map.insert(std::make_pair<std::string, std::string>( V.ParentPkg().Name(), outs.str())); } diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc index 6fadf7274..91d13f31b 100644 --- a/apt-private/private-output.cc +++ b/apt-private/private-output.cc @@ -158,7 +158,8 @@ std::string GetShortDescription(pkgCacheFile &CacheFile, pkgRecords &records, pk } /*}}}*/ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/ - pkgCache::VerIterator V, std::ostream &out) + pkgCache::VerIterator V, std::ostream &out, + bool include_summary) { pkgCache::PkgIterator P = V.ParentPkg(); @@ -224,9 +225,12 @@ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/ out << GetVersion(CacheFile, V); } out << " " << GetArchitecture(CacheFile, P) << " "; - out << std::endl - << " " << GetShortDescription(CacheFile, records, P) - << std::endl; + if (include_summary) + { + out << std::endl + << " " << GetShortDescription(CacheFile, records, P) + << std::endl; + } } } /*}}}*/ diff --git a/apt-private/private-output.h b/apt-private/private-output.h index 9283e39ab..c3c76bb92 100644 --- a/apt-private/private-output.h +++ b/apt-private/private-output.h @@ -24,7 +24,8 @@ extern unsigned int ScreenWidth; bool InitOutput(); void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, - pkgCache::VerIterator V, std::ostream &out); + pkgCache::VerIterator V, std::ostream &out, + bool include_summary=true); diff --git a/apt-private/private-sources.cc b/apt-private/private-sources.cc new file mode 100644 index 000000000..65706e785 --- /dev/null +++ b/apt-private/private-sources.cc @@ -0,0 +1,59 @@ + +#include <apt-pkg/hashes.h> +#include <apti18n.h> + +#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 /*{{{*/ +// --------------------------------------------------------------------- +bool EditSources(CommandLine &CmdL) +{ + bool res; + pkgSourceList sl; + std::string outs; + + 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; + if (FileExists(sourceslist)) + before.FromFile(sourceslist); + + do { + EditFileInSensibleEditor(sourceslist); + _error->PushToStack(); + res = sl.Read(sourceslist); + if (!res) { + _error->DumpErrors(); + 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); + + if (FileExists(sourceslist) && !before.VerifyFile(sourceslist)) { + strprintf( + outs, _("Your '%s' file changed, please run 'apt-get update'."), + sourceslist.c_str()); + std::cout << outs << std::endl; + } + + return true; +} + /*}}}*/ diff --git a/apt-private/private-sources.h b/apt-private/private-sources.h new file mode 100644 index 000000000..b394622be --- /dev/null +++ b/apt-private/private-sources.h @@ -0,0 +1,3 @@ +#include <apt-pkg/cmndline.h> + +bool EditSources(CommandLine &CmdL); diff --git a/apt-private/private-utils.cc b/apt-private/private-utils.cc new file mode 100644 index 000000000..813f19329 --- /dev/null +++ b/apt-private/private-utils.cc @@ -0,0 +1,50 @@ +#include <cstdlib> + +#include <apt-pkg/configuration.h> +#include <apt-pkg/fileutl.h> +#include "private-utils.h" + + +// DisplayFileInPager - Display File with pager /*{{{*/ +void DisplayFileInPager(std::string filename) +{ + std::string pager = _config->Find("Dir::Bin::Pager", + "/usr/bin/sensible-pager"); + + pid_t Process = ExecFork(); + if (Process == 0) + { + const char *Args[3]; + Args[0] = pager.c_str(); + Args[1] = filename.c_str(); + Args[2] = 0; + execvp(Args[0],(char **)Args); + exit(100); + } + + // Wait for the subprocess + ExecWait(Process, "sensible-pager", false); +} + /*}}}*/ + +// EditFileInSensibleEditor - Edit File with editor /*{{{*/ +void EditFileInSensibleEditor(std::string filename) +{ + std::string editor = _config->Find("Dir::Bin::Editor", + "/usr/bin/sensible-editor"); + + pid_t Process = ExecFork(); + if (Process == 0) + { + const char *Args[3]; + Args[0] = editor.c_str(); + Args[1] = filename.c_str(); + Args[2] = 0; + execvp(Args[0],(char **)Args); + exit(100); + } + + // Wait for the subprocess + ExecWait(Process, "sensible-editor", false); +} + /*}}}*/ diff --git a/apt-private/private-utils.h b/apt-private/private-utils.h new file mode 100644 index 000000000..258dd06a8 --- /dev/null +++ b/apt-private/private-utils.h @@ -0,0 +1,11 @@ +#ifndef APT_PRIVATE_UTILS_H +#define APT_PRIVATE_UTILS_H + +#include<string> + +void DisplayFileInPager(std::string filename); +void EditFileInSensibleEditor(std::string filename); + + + +#endif |