From 92296fe4b0862a04ea3d965b4cd2d4a420e3be9f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 8 Jul 2016 15:59:23 +0200 Subject: support "install ./foo.changes" We support installing ./foo.deb (and ./foo.dsc for source) for a while now, but it can be a bit clunky to work with those directly if you e.g. build packages locally in a 'central' build-area. The changes files also include hashsums and can be signed, so this can also be considered an enhancement in terms of security as a user "just" has to verify the signature on the changes file then rather than checking all deb files individually in these manual installation procedures. --- apt-pkg/deb/debsrcrecords.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'apt-pkg/deb/debsrcrecords.cc') diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc index e8295debb..5454d79c3 100644 --- a/apt-pkg/deb/debsrcrecords.cc +++ b/apt-pkg/deb/debsrcrecords.cc @@ -41,7 +41,15 @@ debSrcRecordParser::debSrcRecordParser(std::string const &File,pkgIndexFile cons Tags.Init(&Fd, 102400); } } - +std::string debSrcRecordParser::Package() const /*{{{*/ +{ + auto const name = Sect.FindS("Package"); + if (iIndex == nullptr) + return name.empty() ? Sect.FindS("Source") : name; + else + return name; +} + /*}}}*/ // SrcRecordParser::Binaries - Return the binaries field /*{{{*/ // --------------------------------------------------------------------- /* This member parses the binaries field into a pair of class arrays and @@ -190,6 +198,15 @@ bool debSrcRecordParser::Files2(std::vector &List) ParseQuoteWord(C, path) == false) return _error->Error("Error parsing file record in %s of source package %s", checksumField.c_str(), Package().c_str()); + if (iIndex == nullptr && checksumField == "Files") + { + // the Files field has a different format than the rest in deb-changes files + std::string ignore; + if (ParseQuoteWord(C, ignore) == false || + ParseQuoteWord(C, path) == false) + return _error->Error("Error parsing file record in %s of source package %s", checksumField.c_str(), Package().c_str()); + } + HashString const hashString(*type, hash); if (Base.empty() == false) path = Base + path; -- cgit v1.2.3