Add SHA1 support to "apt-ftparchive release"
authorArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 17:04:32 +0000 (17:04 +0000)
committerArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 17:04:32 +0000 (17:04 +0000)
Author: mdz
Date: 2003-12-26 20:50:01 GMT
Add SHA1 support to "apt-ftparchive release"

ftparchive/apt-ftparchive.cc
ftparchive/writer.cc
ftparchive/writer.h
po/apt-all.pot

index c811343..02e98ba 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: apt-ftparchive.cc,v 1.9 2003/12/26 20:08:56 mdz Exp $
+// $Id: apt-ftparchive.cc,v 1.10 2003/12/26 20:50:01 mdz Exp $
 /* ######################################################################
 
    apt-scanpackages - Efficient work-alike for dpkg-scanpackages
@@ -684,6 +684,8 @@ bool SimpleGenRelease(CommandLine &CmdL)
    if (Release.RecursiveScan(CmdL.FileList[1]) == false)
       return false;
 
+   Release.Finish();
+
    return true;
 }
 
index 68fd850..3b1cb69 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: writer.cc,v 1.8 2003/12/26 20:08:56 mdz Exp $
+// $Id: writer.cc,v 1.9 2003/12/26 20:50:01 mdz Exp $
 /* ######################################################################
 
    Writer 
@@ -22,6 +22,7 @@
 #include <apt-pkg/error.h>
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/md5.h>
+#include <apt-pkg/sha1.h>
 #include <apt-pkg/deblistparser.h>
 
 #include <sys/types.h>
@@ -829,8 +830,6 @@ ReleaseWriter::ReleaseWriter(string DB)
 
       fprintf(Output, "%s: %s\n", (*I).first.c_str(), Value.c_str());
    }
-
-   fprintf(Output, "MD5Sum:\n");
 }
                                                                        /*}}}*/
 // ReleaseWriter::DoPackage - Process a single package                 /*{{{*/
@@ -856,14 +855,47 @@ bool ReleaseWriter::DoPackage(string FileName)
       return false;
    }
 
+   CheckSums[FileName].size = fd.Size();
+
    MD5Summation MD5;
    MD5.AddFD(fd.Fd(), fd.Size());
+   CheckSums[FileName].MD5 = MD5.Result();
 
-   string MD5Sum = MD5.Result();
-   fprintf(Output, " %s %16d %s\n",
-           MD5Sum.c_str(), fd.Size(), FileName.c_str());
+   fd.Seek(0);
+   SHA1Summation SHA1;
+   SHA1.AddFD(fd.Fd(), fd.Size());
+   CheckSums[FileName].SHA1 = SHA1.Result();
 
    fd.Close();
    
    return true;
 }
+
+                                                                       /*}}}*/
+// ReleaseWriter::Finish - Output the checksums                                /*{{{*/
+// ---------------------------------------------------------------------
+void ReleaseWriter::Finish()
+{
+   fprintf(Output, "MD5Sum:\n");
+   for(map<string,struct CheckSum>::iterator I = CheckSums.begin();
+       I != CheckSums.end();
+       ++I)
+   {
+      fprintf(Output, " %s %16ld %s\n",
+              (*I).second.MD5.c_str(),
+              (*I).second.size,
+              (*I).first.c_str());
+   }
+
+   fprintf(Output, "SHA1:\n");
+   for(map<string,struct CheckSum>::iterator I = CheckSums.begin();
+       I != CheckSums.end();
+       ++I)
+   {
+      fprintf(Output, " %s %16ld %s\n",
+              (*I).second.SHA1.c_str(),
+              (*I).second.size,
+              (*I).first.c_str());
+   }
+}
+
index 6f728dd..f347ca3 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: writer.h,v 1.5 2003/12/26 20:08:56 mdz Exp $
+// $Id: writer.h,v 1.6 2003/12/26 20:50:01 mdz Exp $
 /* ######################################################################
 
    Writer 
@@ -21,6 +21,7 @@
 #include <stdio.h>
 #include <iostream>
 #include <vector>
+#include <map>
 
 #include "cachedb.h"
 #include "override.h"
@@ -30,6 +31,7 @@ using std::string;
 using std::cout;
 using std::endl;
 using std::vector;
+using std::map;
     
 class FTWScanner
 {
@@ -154,11 +156,22 @@ class ReleaseWriter : public FTWScanner
 public:
    ReleaseWriter(string DB);
    virtual bool DoPackage(string FileName);
-protected:
+   void Finish();
+
+   FILE *Output;
    // General options
    string PathPrefix;
    string DirStrip;
-   FILE *Output;
+
+protected:
+   struct CheckSum
+   {
+      string MD5;
+      string SHA1;
+      // Limited by FileFd::Size()
+      unsigned long size;
+   };
+   map<string,struct CheckSum> CheckSums;
 };
 
 #endif
index 221306f..7a3d481 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2003-12-26 12:05-0800\n"
+"POT-Creation-Date: 2003-12-26 12:44-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -305,11 +305,11 @@ msgid ""
 "  -o=?  Set an arbitary configuration option"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:747
+#: ftparchive/apt-ftparchive.cc:749
 msgid "No selections matched"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:820
+#: ftparchive/apt-ftparchive.cc:822
 #, c-format
 msgid "Some files are missing in the package file group `%s'"
 msgstr ""
@@ -337,83 +337,83 @@ msgstr ""
 msgid "Unable to get a cursor"
 msgstr ""
 
-#: ftparchive/writer.cc:78
+#: ftparchive/writer.cc:79
 #, c-format
 msgid "W: Unable to read directory %s\n"
 msgstr ""
 
-#: ftparchive/writer.cc:83
+#: ftparchive/writer.cc:84
 #, c-format
 msgid "W: Unable to stat %s\n"
 msgstr ""
 
-#: ftparchive/writer.cc:125
+#: ftparchive/writer.cc:126
 msgid "E: "
 msgstr ""
 
-#: ftparchive/writer.cc:127
+#: ftparchive/writer.cc:128
 msgid "W: "
 msgstr ""
 
-#: ftparchive/writer.cc:134
+#: ftparchive/writer.cc:135
 msgid "E: Errors apply to file "
 msgstr ""
 
-#: ftparchive/writer.cc:151 ftparchive/writer.cc:181
+#: ftparchive/writer.cc:152 ftparchive/writer.cc:182
 #, c-format
 msgid "Failed to resolve %s"
 msgstr ""
 
-#: ftparchive/writer.cc:163
+#: ftparchive/writer.cc:164
 msgid "Tree walking failed"
 msgstr ""
 
-#: ftparchive/writer.cc:188
+#: ftparchive/writer.cc:189
 #, c-format
 msgid "Failed to open %s"
 msgstr ""
 
-#: ftparchive/writer.cc:245
+#: ftparchive/writer.cc:246
 #, c-format
 msgid " DeLink %s [%s]\n"
 msgstr ""
 
-#: ftparchive/writer.cc:253
+#: ftparchive/writer.cc:254
 #, c-format
 msgid "Failed to readlink %s"
 msgstr ""
 
-#: ftparchive/writer.cc:257
+#: ftparchive/writer.cc:258
 #, c-format
 msgid "Failed to unlink %s"
 msgstr ""
 
-#: ftparchive/writer.cc:264
+#: ftparchive/writer.cc:265
 #, c-format
 msgid "*** Failed to link %s to %s"
 msgstr ""
 
-#: ftparchive/writer.cc:274
+#: ftparchive/writer.cc:275
 #, c-format
 msgid " DeLink limit of %sB hit.\n"
 msgstr ""
 
-#: ftparchive/writer.cc:351 apt-inst/extract.cc:181 apt-inst/extract.cc:193
+#: ftparchive/writer.cc:352 apt-inst/extract.cc:181 apt-inst/extract.cc:193
 #: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121
 #, c-format
 msgid "Failed to stat %s"
 msgstr ""
 
-#: ftparchive/writer.cc:371
+#: ftparchive/writer.cc:372
 msgid "Archive had no package field"
 msgstr ""
 
-#: ftparchive/writer.cc:379 ftparchive/writer.cc:588
+#: ftparchive/writer.cc:380 ftparchive/writer.cc:589
 #, c-format
 msgid "  %s has no override entry\n"
 msgstr ""
 
-#: ftparchive/writer.cc:422 ftparchive/writer.cc:670
+#: ftparchive/writer.cc:423 ftparchive/writer.cc:671
 #, c-format
 msgid "  %s maintainer is %s not %s\n"
 msgstr ""