// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: writer.cc,v 1.7 2003/02/10 07:34:41 doogie Exp $
+// $Id: writer.cc,v 1.8 2003/12/26 20:08:56 mdz Exp $
/* ######################################################################
Writer
#include <sys/types.h>
#include <unistd.h>
+#include <ctime>
#include <ftw.h>
+#include <fnmatch.h>
#include <iostream>
#include "cachedb.h"
{
ErrorPrinted = false;
NoLinkAct = !_config->FindB("APT::FTPArchive::DeLinkAct",true);
- TmpExt = 0;
- Ext[0] = 0;
RealPath = 0;
long PMax = pathconf(".",_PC_PATH_MAX);
if (PMax > 0)
if (Flag != FTW_F)
return 0;
- // See if it is a .deb
- if (strlen(File) < 4)
- return 0;
-
- unsigned CurExt = 0;
- for (; Owner->Ext[CurExt] != 0; CurExt++)
- if (strcmp(File+strlen(File)-strlen(Owner->Ext[CurExt]),
- Owner->Ext[CurExt]) == 0)
- break;
- if (Owner->Ext[CurExt] == 0)
+ const char *LastComponent = strrchr(File, '/');
+ if (LastComponent == NULL)
+ LastComponent = File;
+ else
+ LastComponent++;
+
+ vector<string>::iterator I;
+ for(I = Owner->Patterns.begin(); I != Owner->Patterns.end(); ++I)
+ {
+ if (fnmatch((*I).c_str(), LastComponent, 0) == 0)
+ break;
+ }
+ if (I == Owner->Patterns.end())
return 0;
/* Process it. If the file is a link then resolve it into an absolute
return true;
}
/*}}}*/
-// FTWScanner::SetExts - Set extensions to support /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool FTWScanner::SetExts(string Vals)
-{
- delete [] TmpExt;
- TmpExt = new char[Vals.length()+1];
- strcpy(TmpExt,Vals.c_str());
- return TokSplitString(' ',TmpExt,(char **)Ext,sizeof(Ext)/sizeof(Ext[0]));
-}
- /*}}}*/
// PackagesWriter::PackagesWriter - Constructor /*{{{*/
// ---------------------------------------------------------------------
Db(DB),Stats(Db.Stats)
{
Output = stdout;
- Ext[0] = ".deb";
- Ext[1] = 0;
+ AddPattern("*.deb");
DeLinkLimit = 0;
// Process the command line options
_error->DumpErrors();
}
+ /*}}}*/
+// FTWScanner::SetExts - Set extensions to support /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FTWScanner::SetExts(string Vals)
+{
+ ClearPatterns();
+ string::size_type Start = 0;
+ for(string::size_type space = Vals.find(' ');
+ space != string::npos;
+ space = Vals.find(' ', space))
+ {
+ if (space > 0)
+ {
+ AddPattern(string("*") + string(Start, space-1));
+ Start = space + 1;
+ }
+ }
+
+ return true;
+}
+
/*}}}*/
// PackagesWriter::DoPackage - Process a single package /*{{{*/
// ---------------------------------------------------------------------
string ExtOverrides)
{
Output = stdout;
- Ext[0] = ".dsc";
- Ext[1] = 0;
+ AddPattern("*.dsc");
DeLinkLimit = 0;
Buffer = 0;
BufSize = 0;
Db(DB), Stats(Db.Stats)
{
- Ext[0] = ".deb";
- Ext[1] = 0;
+ AddPattern("*.deb");
Output = stdout;
}
/*}}}*/
return true;
}
+
/*}}}*/
+
+// ReleaseWriter::ReleaseWriter - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+ReleaseWriter::ReleaseWriter(string DB)
+{
+ AddPattern("Packages");
+ AddPattern("Packages.gz");
+ Output = stdout;
+ time_t now = time(NULL);
+ char datestr[128];
+ if (strftime(datestr, sizeof(datestr), "%a, %d %b %Y %H:%M:%S UTC",
+ gmtime(&now)) == 0)
+ {
+ datestr[0] = '\0';
+ }
+
+ map<string,string> Fields;
+ Fields["Origin"] = "";
+ Fields["Label"] = "";
+ Fields["Suite"] = "";
+ Fields["Version"] = "";
+ Fields["Codename"] = "";
+ Fields["Date"] = datestr;
+ Fields["Architectures"] = "";
+ Fields["Components"] = "";
+ Fields["Description"] = "";
+
+ for(map<string,string>::const_iterator I = Fields.begin();
+ I != Fields.end();
+ ++I)
+ {
+ string Config = string("APT::FTPArchive::Release::") + (*I).first;
+ string Value = _config->Find(Config, (*I).second.c_str());
+ if (Value == "")
+ continue;
+
+ fprintf(Output, "%s: %s\n", (*I).first.c_str(), Value.c_str());
+ }
+
+ fprintf(Output, "MD5Sum:\n");
+}
+ /*}}}*/
+// ReleaseWriter::DoPackage - Process a single package /*{{{*/
+// ---------------------------------------------------------------------
+bool ReleaseWriter::DoPackage(string FileName)
+{
+ // Strip the DirStrip prefix from the FileName and add the PathPrefix
+ string NewFileName;
+ if (DirStrip.empty() == false &&
+ FileName.length() > DirStrip.length() &&
+ stringcmp(FileName.begin(),FileName.begin() + DirStrip.length(),
+ DirStrip.begin(),DirStrip.end()) == 0)
+ NewFileName = string(FileName.begin() + DirStrip.length(),FileName.end());
+ else
+ NewFileName = FileName;
+ if (PathPrefix.empty() == false)
+ NewFileName = flCombine(PathPrefix,NewFileName);
+
+ FileFd fd(FileName, FileFd::ReadOnly);
+
+ if (!fd.IsOpen())
+ {
+ return false;
+ }
+
+ MD5Summation MD5;
+ MD5.AddFD(fd.Fd(), fd.Size());
+
+ string MD5Sum = MD5.Result();
+ fprintf(Output, " %s %16d %s\n",
+ MD5Sum.c_str(), fd.Size(), FileName.c_str());
+
+ fd.Close();
+
+ return true;
+}
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2003-12-20 15:27-0800\n"
+"POT-Creation-Date: 2003-12-26 12:05-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"
msgstr ""
#: cmdline/apt-cache.cc:1581 cmdline/apt-cdrom.cc:731 cmdline/apt-config.cc:70
-#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:544
-#: cmdline/apt-get.cc:2271 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:545
+#: cmdline/apt-get.cc:2256 cmdline/apt-sortpkgs.cc:144
#, c-format
msgid "%s %s for %s %s compiled on %s %s\n"
msgstr ""
msgid "Cannot get debconf version. Is debconf installed?"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:163 ftparchive/apt-ftparchive.cc:336
+#: ftparchive/apt-ftparchive.cc:163 ftparchive/apt-ftparchive.cc:337
msgid "Package extension list is too long"
msgstr ""
#: ftparchive/apt-ftparchive.cc:165 ftparchive/apt-ftparchive.cc:179
-#: ftparchive/apt-ftparchive.cc:202 ftparchive/apt-ftparchive.cc:251
-#: ftparchive/apt-ftparchive.cc:265 ftparchive/apt-ftparchive.cc:287
+#: ftparchive/apt-ftparchive.cc:202 ftparchive/apt-ftparchive.cc:252
+#: ftparchive/apt-ftparchive.cc:266 ftparchive/apt-ftparchive.cc:288
#, c-format
msgid "Error Processing directory %s"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:249
+#: ftparchive/apt-ftparchive.cc:250
msgid "Source extension list is too long"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:366
+#: ftparchive/apt-ftparchive.cc:367
msgid "Error writing header to contents file"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:396
+#: ftparchive/apt-ftparchive.cc:397
#, c-format
msgid "Error Processing Contents %s"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:550
+#: ftparchive/apt-ftparchive.cc:551
msgid ""
"Usage: apt-ftparchive [options] command\n"
"Commands: packages binarypath [overridefile [pathprefix]]\n"
" -o=? Set an arbitary configuration option"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:731
+#: ftparchive/apt-ftparchive.cc:747
msgid "No selections matched"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:804
+#: ftparchive/apt-ftparchive.cc:820
#, c-format
msgid "Some files are missing in the package file group `%s'"
msgstr ""
msgid "W: Unable to stat %s\n"
msgstr ""
-#: ftparchive/writer.cc:122
+#: ftparchive/writer.cc:125
msgid "E: "
msgstr ""
-#: ftparchive/writer.cc:124
+#: ftparchive/writer.cc:127
msgid "W: "
msgstr ""
-#: ftparchive/writer.cc:131
+#: ftparchive/writer.cc:134
msgid "E: Errors apply to file "
msgstr ""
-#: ftparchive/writer.cc:148 ftparchive/writer.cc:178
+#: ftparchive/writer.cc:151 ftparchive/writer.cc:181
#, c-format
msgid "Failed to resolve %s"
msgstr ""
-#: ftparchive/writer.cc:160
+#: ftparchive/writer.cc:163
msgid "Tree walking failed"
msgstr ""
-#: ftparchive/writer.cc:185
+#: ftparchive/writer.cc:188
#, c-format
msgid "Failed to open %s"
msgstr ""
-#: ftparchive/writer.cc:242
+#: ftparchive/writer.cc:245
#, c-format
msgid " DeLink %s [%s]\n"
msgstr ""
-#: ftparchive/writer.cc:250
+#: ftparchive/writer.cc:253
#, c-format
msgid "Failed to readlink %s"
msgstr ""
-#: ftparchive/writer.cc:254
+#: ftparchive/writer.cc:257
#, c-format
msgid "Failed to unlink %s"
msgstr ""
-#: ftparchive/writer.cc:261
+#: ftparchive/writer.cc:264
#, c-format
msgid "*** Failed to link %s to %s"
msgstr ""
-#: ftparchive/writer.cc:271
+#: ftparchive/writer.cc:274
#, c-format
msgid " DeLink limit of %sB hit.\n"
msgstr ""
-#: ftparchive/writer.cc:338 apt-inst/extract.cc:181 apt-inst/extract.cc:193
+#: ftparchive/writer.cc:351 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:358
+#: ftparchive/writer.cc:371
msgid "Archive had no package field"
msgstr ""
-#: ftparchive/writer.cc:366 ftparchive/writer.cc:576
+#: ftparchive/writer.cc:379 ftparchive/writer.cc:588
#, c-format
msgid " %s has no override entry\n"
msgstr ""
-#: ftparchive/writer.cc:409 ftparchive/writer.cc:658
+#: ftparchive/writer.cc:422 ftparchive/writer.cc:670
#, c-format
msgid " %s maintainer is %s not %s\n"
msgstr ""
msgid "Packages need to be removed but Remove is disabled."
msgstr ""
-#: cmdline/apt-get.cc:744 cmdline/apt-get.cc:1726 cmdline/apt-get.cc:1759
+#: cmdline/apt-get.cc:744 cmdline/apt-get.cc:1712 cmdline/apt-get.cc:1745
msgid "Unable to lock the download directory"
msgstr ""
-#: cmdline/apt-get.cc:754 cmdline/apt-get.cc:1807 cmdline/apt-get.cc:2018
+#: cmdline/apt-get.cc:754 cmdline/apt-get.cc:1793 cmdline/apt-get.cc:2004
#: apt-pkg/cachefile.cc:67
msgid "The list of sources could not be read."
msgstr ""
msgid "Do you want to continue? [Y/n] "
msgstr ""
-#: cmdline/apt-get.cc:911 cmdline/apt-get.cc:1282 cmdline/apt-get.cc:1916
+#: cmdline/apt-get.cc:911 cmdline/apt-get.cc:1282 cmdline/apt-get.cc:1902
#, c-format
msgid "Failed to fetch %s %s\n"
msgstr ""
msgid "Some files failed to download"
msgstr ""
-#: cmdline/apt-get.cc:930 cmdline/apt-get.cc:1925
+#: cmdline/apt-get.cc:930 cmdline/apt-get.cc:1911
msgid "Download complete and in download only mode"
msgstr ""
msgid "The following extra packages will be installed:"
msgstr ""
-#: cmdline/apt-get.cc:1600
+#: cmdline/apt-get.cc:1586
msgid "Suggested packages:"
msgstr ""
-#: cmdline/apt-get.cc:1601
+#: cmdline/apt-get.cc:1587
msgid "Recommended packages:"
msgstr ""
-#: cmdline/apt-get.cc:1621
+#: cmdline/apt-get.cc:1607
msgid "Calculating Upgrade... "
msgstr ""
-#: cmdline/apt-get.cc:1624 methods/ftp.cc:702 methods/connect.cc:99
+#: cmdline/apt-get.cc:1610 methods/ftp.cc:702 methods/connect.cc:99
msgid "Failed"
msgstr ""
-#: cmdline/apt-get.cc:1629
+#: cmdline/apt-get.cc:1615
msgid "Done"
msgstr ""
-#: cmdline/apt-get.cc:1802
+#: cmdline/apt-get.cc:1788
msgid "Must specify at least one package to fetch source for"
msgstr ""
-#: cmdline/apt-get.cc:1829 cmdline/apt-get.cc:2036
+#: cmdline/apt-get.cc:1815 cmdline/apt-get.cc:2022
#, c-format
msgid "Unable to find a source package for %s"
msgstr ""
-#: cmdline/apt-get.cc:1876
+#: cmdline/apt-get.cc:1862
#, c-format
msgid "You don't have enough free space in %s"
msgstr ""
-#: cmdline/apt-get.cc:1881
+#: cmdline/apt-get.cc:1867
#, c-format
msgid "Need to get %sB/%sB of source archives.\n"
msgstr ""
-#: cmdline/apt-get.cc:1884
+#: cmdline/apt-get.cc:1870
#, c-format
msgid "Need to get %sB of source archives.\n"
msgstr ""
-#: cmdline/apt-get.cc:1890
+#: cmdline/apt-get.cc:1876
#, c-format
msgid "Fetch Source %s\n"
msgstr ""
-#: cmdline/apt-get.cc:1921
+#: cmdline/apt-get.cc:1907
msgid "Failed to fetch some archives."
msgstr ""
-#: cmdline/apt-get.cc:1949
+#: cmdline/apt-get.cc:1935
#, c-format
msgid "Skipping unpack of already unpacked source in %s\n"
msgstr ""
-#: cmdline/apt-get.cc:1961
+#: cmdline/apt-get.cc:1947
#, c-format
msgid "Unpack command '%s' failed.\n"
msgstr ""
-#: cmdline/apt-get.cc:1978
+#: cmdline/apt-get.cc:1964
#, c-format
msgid "Build command '%s' failed.\n"
msgstr ""
-#: cmdline/apt-get.cc:1997
+#: cmdline/apt-get.cc:1983
msgid "Child process failed"
msgstr ""
-#: cmdline/apt-get.cc:2013
+#: cmdline/apt-get.cc:1999
msgid "Must specify at least one package to check builddeps for"
msgstr ""
-#: cmdline/apt-get.cc:2041
+#: cmdline/apt-get.cc:2027
#, c-format
msgid "Unable to get build-dependency information for %s"
msgstr ""
-#: cmdline/apt-get.cc:2061
+#: cmdline/apt-get.cc:2047
#, c-format
msgid "%s has no build depends.\n"
msgstr ""
-#: cmdline/apt-get.cc:2113
+#: cmdline/apt-get.cc:2099
#, c-format
msgid ""
"%s dependency for %s cannot be satisfied because the package %s cannot be "
"found"
msgstr ""
-#: cmdline/apt-get.cc:2165
+#: cmdline/apt-get.cc:2151
#, c-format
msgid ""
"%s dependency for %s cannot be satisfied because no available versions of "
"package %s can satisfy version requirements"
msgstr ""
-#: cmdline/apt-get.cc:2200
+#: cmdline/apt-get.cc:2186
#, c-format
msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
msgstr ""
-#: cmdline/apt-get.cc:2225
+#: cmdline/apt-get.cc:2211
#, c-format
msgid "Failed to satisfy %s dependency for %s: %s"
msgstr ""
-#: cmdline/apt-get.cc:2239
+#: cmdline/apt-get.cc:2225
#, c-format
-msgid ""
-"Some broken packages were found while trying to process build-dependencies "
-"for %s.\n"
-"You might want to run `apt-get -f install' to correct these."
+msgid "Build-dependencies for %s could not be satisfied."
msgstr ""
-#: cmdline/apt-get.cc:2244
+#: cmdline/apt-get.cc:2229
msgid "Failed to process build dependencies"
msgstr ""
-#: cmdline/apt-get.cc:2276
+#: cmdline/apt-get.cc:2261
msgid "Supported Modules:"
msgstr ""
-#: cmdline/apt-get.cc:2317
+#: cmdline/apt-get.cc:2302
msgid ""
"Usage: apt-get [options] command\n"
" apt-get [options] install|remove pkg1 [pkg2 ...]\n"