From 989539655e3bb8e6934b5f69ece67c173a26c4f2 Mon Sep 17 00:00:00 2001 From: Arch Librarian Date: Mon, 20 Sep 2004 17:04:30 +0000 Subject: * Enable apt-ftparchive to generate Release files Author: mdz Date: 2003-12-26 20:08:56 GMT * Enable apt-ftparchive to generate Release files --- debian/changelog | 6 ++ ftparchive/apt-ftparchive.cc | 19 +++++- ftparchive/writer.cc | 149 ++++++++++++++++++++++++++++++++++--------- ftparchive/writer.h | 22 +++++-- po/apt-all.pot | 121 +++++++++++++++++------------------ 5 files changed, 219 insertions(+), 98 deletions(-) diff --git a/debian/changelog b/debian/changelog index 907af1b9a..9c85e89e6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +apt (0.5.17) unstable; urgency=low + + * Enable apt-ftparchive to generate Release files + + -- + apt (0.5.16) unstable; urgency=low * po/de.po update from Michael Karcher diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc index 426ec5637..c811343b6 100644 --- a/ftparchive/apt-ftparchive.cc +++ b/ftparchive/apt-ftparchive.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: apt-ftparchive.cc,v 1.8 2003/07/18 15:28:58 mdz Exp $ +// $Id: apt-ftparchive.cc,v 1.9 2003/12/26 20:08:56 mdz Exp $ /* ###################################################################### apt-scanpackages - Efficient work-alike for dpkg-scanpackages @@ -223,6 +223,7 @@ bool PackageMap::GenPackages(Configuration &Setup,struct CacheDB::Stats &Stats) return !_error->PendingError(); } + /*}}}*/ // PackageMap::GenSources - Actually generate a Source file /*{{{*/ // --------------------------------------------------------------------- @@ -671,6 +672,21 @@ bool SimpleGenSources(CommandLine &CmdL) return true; } + /*}}}*/ +// SimpleGenRelease - Generate a Release file for a directory tree /*{{{*/ +// --------------------------------------------------------------------- +bool SimpleGenRelease(CommandLine &CmdL) +{ + ReleaseWriter Release(""); + if (_error->PendingError() == true) + return false; + + if (Release.RecursiveScan(CmdL.FileList[1]) == false) + return false; + + return true; +} + /*}}}*/ // Generate - Full generate, using a config file /*{{{*/ // --------------------------------------------------------------------- @@ -887,6 +903,7 @@ int main(int argc, const char *argv[]) CommandLine::Dispatch Cmds[] = {{"packages",&SimpleGenPackages}, {"contents",&SimpleGenContents}, {"sources",&SimpleGenSources}, + {"release",&SimpleGenRelease}, {"generate",&Generate}, {"clean",&Clean}, {"help",&ShowHelp}, diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index 94d88388a..68fd85091 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -1,6 +1,6 @@ // -*- 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 @@ -26,7 +26,9 @@ #include #include +#include #include +#include #include #include "cachedb.h" @@ -58,8 +60,6 @@ FTWScanner::FTWScanner() { 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) @@ -85,16 +85,19 @@ int FTWScanner::Scanner(const char *File,const struct stat *sb,int Flag) 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::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 @@ -277,17 +280,6 @@ bool FTWScanner::Delink(string &FileName,const char *OriginalPath, 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 /*{{{*/ // --------------------------------------------------------------------- @@ -296,8 +288,7 @@ PackagesWriter::PackagesWriter(string DB,string Overrides,string ExtOverrides) : Db(DB),Stats(Db.Stats) { Output = stdout; - Ext[0] = ".deb"; - Ext[1] = 0; + AddPattern("*.deb"); DeLinkLimit = 0; // Process the command line options @@ -319,6 +310,28 @@ PackagesWriter::PackagesWriter(string DB,string Overrides,string ExtOverrides) : _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 /*{{{*/ // --------------------------------------------------------------------- @@ -449,8 +462,7 @@ SourcesWriter::SourcesWriter(string BOverrides,string SOverrides, string ExtOverrides) { Output = stdout; - Ext[0] = ".dsc"; - Ext[1] = 0; + AddPattern("*.dsc"); DeLinkLimit = 0; Buffer = 0; BufSize = 0; @@ -686,8 +698,7 @@ ContentsWriter::ContentsWriter(string DB) : Db(DB), Stats(Db.Stats) { - Ext[0] = ".deb"; - Ext[1] = 0; + AddPattern("*.deb"); Output = stdout; } /*}}}*/ @@ -777,4 +788,82 @@ bool ContentsWriter::ReadFromPkgs(string PkgFile,string PkgCompress) 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 Fields; + Fields["Origin"] = ""; + Fields["Label"] = ""; + Fields["Suite"] = ""; + Fields["Version"] = ""; + Fields["Codename"] = ""; + Fields["Date"] = datestr; + Fields["Architectures"] = ""; + Fields["Components"] = ""; + Fields["Description"] = ""; + + for(map::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; +} diff --git a/ftparchive/writer.h b/ftparchive/writer.h index 854d3424b..6f728dd1b 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: writer.h,v 1.4 2001/06/26 02:50:27 jgg Exp $ +// $Id: writer.h,v 1.5 2003/12/26 20:08:56 mdz Exp $ /* ###################################################################### Writer @@ -29,13 +29,12 @@ using std::string; using std::cout; using std::endl; +using std::vector; class FTWScanner { protected: - - char *TmpExt; - const char *Ext[10]; + vector Patterns; const char *OriginalPath; char *RealPath; bool ErrorPrinted; @@ -66,10 +65,12 @@ class FTWScanner virtual bool DoPackage(string FileName) = 0; bool RecursiveScan(string Dir); bool LoadFileList(string BaseDir,string File); + bool ClearPatterns() { Patterns.clear(); }; + bool AddPattern(string Pattern) { Patterns.push_back(Pattern); }; bool SetExts(string Vals); FTWScanner(); - virtual ~FTWScanner() {delete [] RealPath; delete [] TmpExt;}; + virtual ~FTWScanner() {delete [] RealPath;}; }; class PackagesWriter : public FTWScanner @@ -148,5 +149,16 @@ class SourcesWriter : public FTWScanner virtual ~SourcesWriter() {free(Buffer);}; }; +class ReleaseWriter : public FTWScanner +{ +public: + ReleaseWriter(string DB); + virtual bool DoPackage(string FileName); +protected: + // General options + string PathPrefix; + string DirStrip; + FILE *Output; +}; #endif diff --git a/po/apt-all.pot b/po/apt-all.pot index 3dd7073ef..221306fcb 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: LANGUAGE \n" @@ -147,8 +147,8 @@ msgid " %4i %s\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 "" @@ -240,31 +240,31 @@ 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" @@ -305,11 +305,11 @@ msgid "" " -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 "" @@ -347,73 +347,73 @@ 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 "" @@ -643,11 +643,11 @@ 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 "" @@ -705,7 +705,7 @@ 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 "" @@ -714,7 +714,7 @@ 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 "" @@ -872,133 +872,130 @@ 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" -- cgit v1.2.3