Browse Source

Merge remote-tracking branch 'mvo/debian/sid' into debian/sid

Conflicts:
	apt-private/private-cmndline.cc
debian/1.8.y
Michael Vogt 10 years ago
parent
commit
e4a93f90b2
  1. 25
      apt-pkg/contrib/hashes.cc
  2. 9
      apt-pkg/contrib/hashes.h
  3. 8
      apt-pkg/contrib/strutl.cc
  4. 1
      apt-pkg/contrib/strutl.h
  5. 2
      apt-private/makefile
  6. 2
      apt-private/private-cmndline.cc
  7. 4
      apt-private/private-list.cc
  8. 59
      apt-private/private-sources.cc
  9. 3
      apt-private/private-sources.h
  10. 50
      apt-private/private-utils.cc
  11. 11
      apt-private/private-utils.h
  12. 19
      cmdline/apt-get.cc
  13. 9
      cmdline/apt.cc
  14. 18
      test/libapt/strutil_test.cc

25
apt-pkg/contrib/hashes.cc

@ -54,6 +54,26 @@ HashString::HashString(std::string StringedHash) /*{{{*/
}
/*}}}*/
bool HashString::VerifyFile(std::string filename) const /*{{{*/
{
std::string fileHash = GetHashForFile(filename);
if(_config->FindB("Debug::Hashes",false) == true)
std::clog << "HashString::VerifyFile: got: " << fileHash << " expected: " << toStr() << std::endl;
return (fileHash == Hash);
}
/*}}}*/
bool HashString::FromFile(std::string filename) /*{{{*/
{
// pick the strongest hash
if (Type == "")
Type = _SupportedHashes[0];
Hash = GetHashForFile(filename);
return true;
}
/*}}}*/
std::string HashString::GetHashForFile(std::string filename) const /*{{{*/
{
std::string fileHash;
@ -84,10 +104,7 @@ bool HashString::VerifyFile(std::string filename) const /*{{{*/
}
Fd.Close();
if(_config->FindB("Debug::Hashes",false) == true)
std::clog << "HashString::VerifyFile: got: " << fileHash << " expected: " << toStr() << std::endl;
return (fileHash == Hash);
return fileHash;
}
/*}}}*/
const char** HashString::SupportedHashes()

9
apt-pkg/contrib/hashes.h

@ -36,7 +36,10 @@ class HashString
protected:
std::string Type;
std::string Hash;
static const char * _SupportedHashes[10];
static const char* _SupportedHashes[10];
// internal helper
std::string GetHashForFile(std::string filename) const;
public:
HashString(std::string Type, std::string Hash);
@ -49,6 +52,10 @@ class HashString
// verify the given filename against the currently loaded hash
bool VerifyFile(std::string filename) const;
// generate a hash string from the given filename
bool FromFile(std::string filename);
// helper
std::string toStr() const; // convert to str as "type:hash"
bool empty() const;

8
apt-pkg/contrib/strutl.cc

@ -49,6 +49,14 @@ std::string Strip(const std::string &s)
size_t end = s.find_last_not_of(" \t\n");
return s.substr(start, end-start+1);
}
bool Endswith(const std::string &s, const std::string &end)
{
if (end.size() > s.size())
return false;
return (s.substr(s.size() - end.size(), s.size()) == end);
}
}
}
/*}}}*/

1
apt-pkg/contrib/strutl.h

@ -36,6 +36,7 @@ using std::ostream;
namespace APT {
namespace String {
std::string Strip(const std::string &s);
bool Endswith(const std::string &s, const std::string &ending);
};
};

2
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)

2
apt-private/private-cmndline.cc

@ -226,8 +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))
{

4
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);
@ -145,7 +145,7 @@ 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>(

59
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;
}
/*}}}*/

3
apt-private/private-sources.h

@ -0,0 +1,3 @@
#include <apt-pkg/cmndline.h>
bool EditSources(CommandLine &CmdL);

50
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);
}
/*}}}*/

11
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

19
cmdline/apt-get.cc

@ -59,6 +59,7 @@
#include <apt-private/private-update.h>
#include <apt-private/private-cmndline.h>
#include <apt-private/private-moo.h>
#include <apt-private/private-utils.h>
#include <apt-private/acqprogress.h>
@ -1378,24 +1379,6 @@ bool DownloadChangelog(CacheFile &CacheFile, pkgAcquire &Fetcher,
return _error->Error("changelog download failed");
}
/*}}}*/
// DisplayFileInPager - Display File with pager /*{{{*/
void DisplayFileInPager(string filename)
{
pid_t Process = ExecFork();
if (Process == 0)
{
const char *Args[3];
Args[0] = "/usr/bin/sensible-pager";
Args[1] = filename.c_str();
Args[2] = 0;
execvp(Args[0],(char **)Args);
exit(100);
}
// Wait for the subprocess
ExecWait(Process, "sensible-pager", false);
}
/*}}}*/
// DoChangelog - Get changelog from the command line /*{{{*/
// ---------------------------------------------------------------------
bool DoChangelog(CommandLine &CmdL)

9
cmdline/apt.cc

@ -41,6 +41,7 @@
#include <apt-pkg/pkgsystem.h>
#include <apt-pkg/indexfile.h>
#include <apt-pkg/metaindex.h>
#include <apt-pkg/hashes.h>
#include <apti18n.h>
@ -54,8 +55,12 @@
#include <apt-private/private-upgrade.h>
#include <apt-private/private-show.h>
#include <apt-private/private-main.h>
#include <apt-private/private-utils.h>
#include <apt-private/private-sources.h>
/*}}}*/
bool ShowHelp(CommandLine &CmdL)
{
ioprintf(c1out,_("%s %s for %s compiled on %s %s\n"),PACKAGE,PACKAGE_VERSION,
@ -74,6 +79,8 @@ bool ShowHelp(CommandLine &CmdL)
" update - update list of available packages\n"
" install - install packages\n"
" upgrade - upgrade the systems packages\n"
"\n"
" edit-sources - edit the source information file\n"
);
return true;
@ -89,6 +96,8 @@ int main(int argc, const char *argv[]) /*{{{*/
{"remove", &DoInstall},
{"update",&DoUpdate},
{"upgrade",&DoUpgradeWithAllowNewPackages},
// misc
{"edit-sources",&EditSources},
// helper
{"moo",&DoMoo},
{"help",&ShowHelp},

18
test/libapt/strutil_test.cc

@ -69,5 +69,23 @@ int main(int argc,char *argv[])
result = StringSplit(input, "");
equals(result.size(), 0);
// endswith
bool b;
input = "abcd";
b = APT::String::Endswith(input, "d");
equals(b, true);
b = APT::String::Endswith(input, "cd");
equals(b, true);
b = APT::String::Endswith(input, "abcd");
equals(b, true);
b = APT::String::Endswith(input, "x");
equals(b, false);
b = APT::String::Endswith(input, "abcndefg");
equals(b, false);
return 0;
}

Loading…
Cancel
Save