summaryrefslogtreecommitdiff
path: root/ftparchive
diff options
context:
space:
mode:
authorMichael Vogt <egon@debian-devbox>2013-03-01 12:18:20 +0100
committerMichael Vogt <egon@debian-devbox>2013-03-01 12:18:20 +0100
commit7e789027197cdfb4b6aefb0b41a34a45fa10431d (patch)
treeccc87c530973b6721c482d155695695f4d904a8b /ftparchive
parentfd785e49fa017abbe1871f18af515fdedb3ad183 (diff)
parent90ceb0b5113cc6b65416553fcebbf6d5fd8c6752 (diff)
merged lp:~mvo/apt/add-missing-dsc-hashes
Diffstat (limited to 'ftparchive')
-rw-r--r--ftparchive/apt-ftparchive.cc5
-rw-r--r--ftparchive/writer.cc51
-rw-r--r--ftparchive/writer.h4
3 files changed, 47 insertions, 13 deletions
diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc
index 4b2c3ba12..2639bc2f6 100644
--- a/ftparchive/apt-ftparchive.cc
+++ b/ftparchive/apt-ftparchive.cc
@@ -254,7 +254,8 @@ bool PackageMap::GenSources(Configuration &Setup,struct CacheDB::Stats &Stats)
SrcDone = true;
// Create a package writer object.
- SourcesWriter Sources(flCombine(OverrideDir,BinOverride),
+ SourcesWriter Sources(_config->Find("APT::FTPArchive::DB"),
+ flCombine(OverrideDir,BinOverride),
flCombine(OverrideDir,SrcOverride),
flCombine(OverrideDir,SrcExtraOverride));
if (SrcExt.empty() == false && Sources.SetExts(SrcExt) == false)
@@ -705,7 +706,7 @@ bool SimpleGenSources(CommandLine &CmdL)
SOverride.c_str());
// Create a package writer object.
- SourcesWriter Sources(Override,SOverride);
+ SourcesWriter Sources(_config->Find("APT::FTPArchive::DB"),Override,SOverride);
if (_error->PendingError() == true)
return false;
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc
index 3065526ad..f58d4bc1f 100644
--- a/ftparchive/writer.cc
+++ b/ftparchive/writer.cc
@@ -562,8 +562,9 @@ TranslationWriter::~TranslationWriter()
// SourcesWriter::SourcesWriter - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
-SourcesWriter::SourcesWriter(string const &BOverrides,string const &SOverrides,
- string const &ExtOverrides)
+SourcesWriter::SourcesWriter(string const &DB, string const &BOverrides,string const &SOverrides,
+ string const &ExtOverrides) :
+ Db(DB), Stats(Db.Stats)
{
Output = stdout;
AddPattern("*.dsc");
@@ -575,7 +576,9 @@ SourcesWriter::SourcesWriter(string const &BOverrides,string const &SOverrides,
DoMD5 = _config->FindB("APT::FTPArchive::Sources::MD5",DoMD5);
DoSHA1 = _config->FindB("APT::FTPArchive::Sources::SHA1",DoSHA1);
DoSHA256 = _config->FindB("APT::FTPArchive::Sources::SHA256",DoSHA256);
+ DoSHA512 = _config->FindB("APT::FTPArchive::Sources::SHA512",DoSHA512);
NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
+ DoAlwaysStat = _config->FindB("APT::FTPArchive::AlwaysStat", false);
// Read the override file
if (BOverrides.empty() == false && BOver.ReadOverride(BOverrides) == false)
@@ -740,19 +743,16 @@ bool SourcesWriter::DoPackage(string FileName)
if (DoSHA1 == true && Tags.Exists("Checksums-Sha1"))
ostreamSha1 << "\n " << string(SHA1.Result()) << " " << St.st_size << " "
<< strippedName << "\n " << Tags.FindS("Checksums-Sha1");
- string const ChecksumsSha1 = ostreamSha1.str();
std::ostringstream ostreamSha256;
if (DoSHA256 == true && Tags.Exists("Checksums-Sha256"))
ostreamSha256 << "\n " << string(SHA256.Result()) << " " << St.st_size << " "
<< strippedName << "\n " << Tags.FindS("Checksums-Sha256");
- string const ChecksumsSha256 = ostreamSha256.str();
std::ostringstream ostreamSha512;
- if (Tags.Exists("Checksums-Sha512"))
+ if (DoSHA512 == true && Tags.Exists("Checksums-Sha512"))
ostreamSha512 << "\n " << string(SHA512.Result()) << " " << St.st_size << " "
<< strippedName << "\n " << Tags.FindS("Checksums-Sha512");
- string const ChecksumsSha512 = ostreamSha512.str();
// Strip the DirStrip prefix from the FileName and add the PathPrefix
string NewFileName;
@@ -768,7 +768,7 @@ bool SourcesWriter::DoPackage(string FileName)
string Directory = flNotFile(OriginalPath);
string Package = Tags.FindS("Source");
- // Perform the delinking operation over all of the files
+ // Perform operation over all of the files
string ParseJnk;
const char *C = Files.c_str();
char *RealPath = NULL;
@@ -780,9 +780,36 @@ bool SourcesWriter::DoPackage(string FileName)
ParseQuoteWord(C,ParseJnk) == false ||
ParseQuoteWord(C,ParseJnk) == false)
return _error->Error("Error parsing file record");
-
- char Jnk[2];
+
string OriginalPath = Directory + ParseJnk;
+
+ // Add missing hashes to source files
+ if ((DoSHA1 == true && !Tags.Exists("Checksums-Sha1")) ||
+ (DoSHA256 == true && !Tags.Exists("Checksums-Sha256")) ||
+ (DoSHA512 == true && !Tags.Exists("Checksums-Sha512")))
+ {
+ if (Db.GetFileInfo(OriginalPath, false, false, false, DoMD5, DoSHA1, DoSHA256, DoSHA512, DoAlwaysStat)
+ == false)
+ {
+ return _error->Error("Error getting file info");
+ }
+
+ if (DoSHA1 == true && !Tags.Exists("Checksums-Sha1"))
+ ostreamSha1 << "\n " << string(Db.SHA1Res) << " "
+ << Db.GetFileSize() << " " << ParseJnk;
+
+ if (DoSHA256 == true && !Tags.Exists("Checksums-Sha256"))
+ ostreamSha256 << "\n " << string(Db.SHA256Res) << " "
+ << Db.GetFileSize() << " " << ParseJnk;
+
+ if (DoSHA512 == true && !Tags.Exists("Checksums-Sha512"))
+ ostreamSha512 << "\n " << string(Db.SHA512Res) << " "
+ << Db.GetFileSize() << " " << ParseJnk;
+ }
+
+ // Perform the delinking operation
+ char Jnk[2];
+
if (readlink(OriginalPath.c_str(),Jnk,sizeof(Jnk)) != -1 &&
(RealPath = realpath(OriginalPath.c_str(),NULL)) != 0)
{
@@ -797,6 +824,10 @@ bool SourcesWriter::DoPackage(string FileName)
if (Directory.length() > 2)
Directory.erase(Directory.end()-1);
+ string const ChecksumsSha1 = ostreamSha1.str();
+ string const ChecksumsSha256 = ostreamSha256.str();
+ string const ChecksumsSha512 = ostreamSha512.str();
+
// This lists all the changes to the fields we are going to make.
// (5 hardcoded + checksums + maintainer + end marker)
TFRewriteData Changes[5+2+1+SOverItem->FieldOverride.size()+1];
@@ -844,7 +875,7 @@ bool SourcesWriter::DoPackage(string FileName)
Stats.Packages++;
- return true;
+ return Db.Finish();
}
/*}}}*/
diff --git a/ftparchive/writer.h b/ftparchive/writer.h
index 76a3dfd1e..4932b0cc8 100644
--- a/ftparchive/writer.h
+++ b/ftparchive/writer.h
@@ -157,6 +157,7 @@ class ContentsWriter : public FTWScanner
class SourcesWriter : public FTWScanner
{
+ CacheDB Db;
Override BOver;
Override SOver;
char *Buffer;
@@ -165,6 +166,7 @@ class SourcesWriter : public FTWScanner
public:
bool NoOverride;
+ bool DoAlwaysStat;
// General options
string PathPrefix;
@@ -174,7 +176,7 @@ class SourcesWriter : public FTWScanner
virtual bool DoPackage(string FileName);
- SourcesWriter(string const &BOverrides,string const &SOverrides,
+ SourcesWriter(string const &DB,string const &BOverrides,string const &SOverrides,
string const &ExtOverrides=string());
virtual ~SourcesWriter() {free(Buffer);};
};