Add APT::FTPArchive::LongDescription to disable the inclusion of the
[ntk/apt.git] / ftparchive / writer.cc
index 59107e0..b2ebdca 100644 (file)
@@ -28,6 +28,7 @@
 #include <ftw.h>
 #include <fnmatch.h>
 #include <iostream>
+#include <memory>
     
 #include "cachedb.h"
 #include "apt-ftparchive.h"
@@ -307,6 +308,7 @@ PackagesWriter::PackagesWriter(string DB,string Overrides,string ExtOverrides,
    DoSHA256 = _config->FindB("APT::FTPArchive::SHA256",true);
    DoContents = _config->FindB("APT::FTPArchive::Contents",true);
    NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
+   LongDescription = _config->FindB("APT::FTPArchive::LongDescription",true);
 
    if (Db.Loaded() == false)
       DoContents = false;
@@ -413,10 +415,18 @@ bool PackagesWriter::DoPackage(string FileName)
       NewFileName = FileName;
    if (PathPrefix.empty() == false)
       NewFileName = flCombine(PathPrefix,NewFileName);
-          
+
+   /* Configuration says we don't want to include the long Description
+      in the package file - instead we want to ship a separated file */
+   string desc;
+   if (LongDescription == false) {
+      desc = Tags.FindS("Description").append("\n");
+      OverItem->FieldOverride["Description"] = desc.substr(0, desc.find('\n')).c_str();
+   }
+
    // This lists all the changes to the fields we are going to make.
    // (7 hardcoded + maintainer + suggests + end marker)
-   TFRewriteData Changes[6+2+OverItem->FieldOverride.size()+1];
+   TFRewriteData Changes[6+2+OverItem->FieldOverride.size()+1+1];
 
    unsigned int End = 0;
    SetTFRewriteData(Changes[End++], "Size", Size);
@@ -428,6 +438,14 @@ bool PackagesWriter::DoPackage(string FileName)
    SetTFRewriteData(Changes[End++], "Status", 0);
    SetTFRewriteData(Changes[End++], "Optional", 0);
 
+   string DescriptionMd5;
+   if (LongDescription == false) {
+      MD5Summation descmd5;
+      descmd5.Add(desc.c_str());
+      DescriptionMd5 = descmd5.Result().Value();
+      SetTFRewriteData(Changes[End++], "Description-md5", DescriptionMd5.c_str());
+   }
+
    // Rewrite the maintainer field if necessary
    bool MaintFailed;
    string NewMaint = OverItem->SwapMaint(Tags.FindS("Maintainer"),MaintFailed);
@@ -814,9 +832,11 @@ ReleaseWriter::ReleaseWriter(string DB)
    AddPattern("Packages");
    AddPattern("Packages.gz");
    AddPattern("Packages.bz2");
+   AddPattern("Packages.lzma");
    AddPattern("Sources");
    AddPattern("Sources.gz");
    AddPattern("Sources.bz2");
+   AddPattern("Sources.lzma");
    AddPattern("Release");
    AddPattern("md5sum.txt");