From 6d626d6f0c3a3313b55a865c084f16a762d60713 Mon Sep 17 00:00:00 2001 From: Dexter Morgan Date: Thu, 2 Jun 2011 20:41:49 +0000 Subject: Branch for updates --- ChangeLog | 2142 +++++++++++++++++++++++++++++++++++++++ MANIFEST | 12 + Makefile.PL | 55 + NEWS | 84 ++ dumpdistribconf | 75 ++ editdistrib | 256 +++++ gendistrib | 396 ++++++++ genhdlist-old | 193 ++++ genhdlist2 | 647 ++++++++++++ packdrake | 189 ++++ packdrake.pm | 182 ++++ patches/faster-gendistrib.patch | 112 ++ t/01packdrake.t | 66 ++ 13 files changed, 4409 insertions(+) create mode 100644 ChangeLog create mode 100644 MANIFEST create mode 100644 Makefile.PL create mode 100644 NEWS create mode 100755 dumpdistribconf create mode 100755 editdistrib create mode 100755 gendistrib create mode 100644 genhdlist-old create mode 100644 genhdlist2 create mode 100755 packdrake create mode 100644 packdrake.pm create mode 100644 patches/faster-gendistrib.patch create mode 100755 t/01packdrake.t diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..f76384e --- /dev/null +++ b/ChangeLog @@ -0,0 +1,2142 @@ +2006-08-22 01:29 Olivier Thauvin + + * gendistrib: - discret change in the order of index generation, + this would avoid link breakage when a distrib use index that can + generated by another (srpms, noarch or biarch...) + +2006-08-21 23:33 Olivier Thauvin + + * gendistrib: - split works to increase lazyness + +2006-08-21 15:11 Olivier Thauvin + + * ChangeLog: - update ChangeLog + +2006-08-21 15:06 Olivier Thauvin + + * MANIFEST, Makefile.PL, rpmtools.spec: - do no longer use + specfile from here + +2006-08-21 15:00 Olivier Thauvin + + * gendistrib: - exit on error + +2006-08-21 14:58 Olivier Thauvin + + * gendistrib: - nochkdep is default, use chkdep + - die ASAP if no work need + - make more error fatal, using Distribconf::Checks + +2006-08-21 15:06 Olivier Thauvin + + * MANIFEST, Makefile.PL, rpmtools.spec: - do no longer use + specfile from here + +2006-08-21 15:00 Olivier Thauvin + + * gendistrib: - exit on error + +2006-08-21 14:58 Olivier Thauvin + + * gendistrib: - nochkdep is default, use chkdep + - die ASAP if no work need + - make more error fatal, using Distribconf::Checks + +2006-07-13 11:53 Rafael Garcia-Suarez + + * gendistrib: This man page is about gendistrib, not genhdlist. + Also, fix $VERSION under svn. + +2006-06-12 13:11 Rafael Garcia-Suarez + + * parsehdlist.c: RPMTAG_SOURCEPACKAGE is deprecated, use + RPMTAG_SOURCERPM + +2006-03-20 13:45 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.28 + +2006-03-20 12:52 Rafael Garcia-Suarez + + * genhdlist: Add a --norecursive option to genhdlist (Michael + Scherer) + +2006-03-01 11:22 Rafael Garcia-Suarez + + * parsehdlist.c: Fix compilation warning + +2006-01-16 15:15 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.27-1mdk + +2006-01-16 15:10 Rafael Garcia-Suarez + + * parsehdlist.c: Replace serial by epoch everywhere, to be able to + build with rpm 4.4.4. + The --serial switch is still recognized, but not documented. + Update Copyright. + +2006-01-16 14:51 Rafael Garcia-Suarez + + * gendistrib: Use mktemp for temp files. Error checking when + opening files. Fix comments. Update copyright. + +2006-01-16 14:34 Rafael Garcia-Suarez + + * gendistrib: Revert Titi's last commit and reindent properly + +2006-01-13 11:02 Rafael Garcia-Suarez + + * rpmtools.spec: Add BuildRequires for regression tests + +2006-01-11 14:37 Thierry Vignaud + + * gendistrib: fix obvious bug + +2005-12-30 16:06 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.26-2mdk + +2005-12-30 15:53 Rafael Garcia-Suarez + + * gendistrib: Fix typo; update copyright + +2005-12-30 15:34 Rafael Garcia-Suarez + + * genhdlist: Make it clear that genhdlist always generates a + synthesis. + Update copyright notice. + +2005-12-05 18:15 Rafael Garcia-Suarez + + * Makefile.PL, rpmtools.spec: Don't install empty manpages + +2005-12-05 17:26 Rafael Garcia-Suarez + + * rpmtools.spec: Trust automatic requires. + +2005-11-16 16:20 Thierry Vignaud + + * rpmtools.spec: bump conflicts due to file moves + +2005-11-16 14:46 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.26-1mdk + +2005-11-16 14:28 Rafael Garcia-Suarez + + * editdistrib: Add a version command + +2005-11-16 14:22 Rafael Garcia-Suarez + + * editdistrib: Fix a few typos; add a "quit" command + +2005-11-16 13:57 Rafael Garcia-Suarez + + * Makefile.PL, rpmtools.spec: Put packdrake(1) manpage in the + packdrake rpm, not in the rpmtools rpm. + Don't install manpages in section 3 for obsolete modules. + +2005-11-16 13:56 Rafael Garcia-Suarez + + * packdrake: Don't leave empty sections in manpage + +2005-11-16 13:15 Rafael Garcia-Suarez + + * gendistrib: Fix the location where the MD5SUM files are + generated (thanks joeghi) + +2005-11-15 12:42 Rafael Garcia-Suarez + + * packdrake.pm: Remove wrapper overhead, use directly new module + +2005-11-15 12:21 Rafael Garcia-Suarez + + * Distribconf.pm, Distribconf/Build.pm, Packdrakeng.pm, + Packdrakeng/zlib.pm: Replace modules by wrappers around new + MDV:: namespace. Add a deprecation warning. + +2005-11-15 12:19 Rafael Garcia-Suarez + + * t/01packdrakeng.t: use_ok must be done at compile time for + imports to work + +2005-11-15 11:22 Rafael Garcia-Suarez + + * dumpdistribconf, gendistrib: Use modules in the new namespace + MDV:: + +2005-11-15 11:16 Rafael Garcia-Suarez + + * MANIFEST: Add editdistrib to the MANIFEST + +2005-11-15 11:10 Rafael Garcia-Suarez + + * ., .cvsignore: Ignore MakeMaker build files and compiled binaries + +2005-10-18 15:41 Olivier Blin + + * packdrake: fix syntax error + +2005-10-14 01:49 Olivier Thauvin + + * editdistrib: - add del/save/set/check + +2005-10-11 21:23 Pascal Terjan + + * gendistrib: Fix typo + +2005-10-11 06:32 Olivier Thauvin + + * editdistrib: - factorize code + +2005-10-10 23:26 Olivier Thauvin + + * editdistrib: - add addmedia() + - use MDV::... + +2005-10-10 12:42 Olivier Thauvin + + * editdistrib: - add + +2005-10-04 12:07 Rafael Garcia-Suarez + + * rpmtools.spec: Make perl-devel dependency portable (thanks to + Buchan) + +2005-10-03 17:00 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.25-1mdk + +2005-10-03 16:00 Rafael Garcia-Suarez + + * packdrake: Make Pod::Usage optional, for dependency reasons + +2005-10-03 15:40 Rafael Garcia-Suarez + + * Packdrakeng/zlib.pm: Disarm warnings + +2005-10-03 15:09 Rafael Garcia-Suarez + + * packdrake: Add --version. Doc clarification. + +2005-10-03 14:08 Rafael Garcia-Suarez + + * packdrake: Use Pod::Usage + +2005-10-03 12:49 Rafael Garcia-Suarez + + * packdrake: Begin cleanup. + +2005-10-03 11:25 Rafael Garcia-Suarez + + * Makefile.PL: Don't depend on MDK::Common + +2005-09-30 16:21 Rafael Garcia-Suarez + + * gendistrib: Put license in POD + +2005-09-30 15:56 Rafael Garcia-Suarez + + * genhdlist: Use a random temp directory. Remove --headersdir + option. + +2005-09-30 15:23 Rafael Garcia-Suarez + + * genhdlist: Put license in doc. More code cleanup. + +2005-09-30 15:14 Rafael Garcia-Suarez + + * genhdlist: Don't create a list file, unless explicitly told so + (with --list) + +2005-09-30 14:59 Rafael Garcia-Suarez + + * genhdlist: Add a --subdir option + +2005-09-30 14:32 Rafael Garcia-Suarez + + * genhdlist: More docs and cleanup + +2005-09-30 14:07 Rafael Garcia-Suarez + + * genhdlist: Well, if tempdir doesn't exist, that's okay too + +2005-09-30 14:04 Rafael Garcia-Suarez + + * genhdlist: Safety check: make sur temporary directory is owned + by user + +2005-09-30 13:39 Rafael Garcia-Suarez + + * genhdlist: Add an option --md5sum + +2005-09-30 12:45 Rafael Garcia-Suarez + + * genhdlist: TODO + +2005-09-30 12:43 Rafael Garcia-Suarez + + * Distribconf.pm, dumpdistribconf: Use meaningful return values + for DistribConf::load() + +2005-09-30 12:29 Rafael Garcia-Suarez + + * gendistrib: Factorize + +2005-09-30 12:26 Rafael Garcia-Suarez + + * dumpdistribconf: Don't give two meanings to -h + +2005-09-29 16:38 Rafael Garcia-Suarez + + * t/01packdrakeng.t: Test cleanup + +2005-09-29 16:08 Rafael Garcia-Suarez + + * dumpdistribconf: Use Pod::Usage + +2005-09-29 15:51 Rafael Garcia-Suarez + + * dumpdistribconf: Use Distribconf::Build, or else it will go boom + +2005-09-29 15:21 Rafael Garcia-Suarez + + * Distribconf/Build.pm: More docs and minor fixes + +2005-09-29 14:16 Rafael Garcia-Suarez + + * Distribconf/Build.pm: Don't repeat copyright put in Distribconf + +2005-09-29 14:14 Rafael Garcia-Suarez + + * Distribconf.pm: Avoid uninitialized warnings. Licensing terms. + TODO and XXX notations. + +2005-09-29 13:44 Rafael Garcia-Suarez + + * Distribconf.pm: More docs for Distribconf + +2005-09-29 13:43 Rafael Garcia-Suarez + + * Distribconf/Build.pm: Reports errors on STDERR, not STDOUT + +2005-09-29 12:28 Rafael Garcia-Suarez + + * Distribconf.pm: More, more docs + * gendistrib: Add SEE ALSO + * Distribconf/Build.pm: Spell check error message + +2005-09-28 16:17 Rafael Garcia-Suarez + + * rpmtools.spec: Spec cleanup + +2005-09-28 16:05 Rafael Garcia-Suarez + + * Packdrakeng/zlib.pm: Add version, fix typo + +2005-09-28 16:01 Rafael Garcia-Suarez + + * Distribconf.pm, Distribconf/Build.pm: Add in Distribconf modules + +2005-09-28 15:58 Rafael Garcia-Suarez + + * genhdlist: Add a description, typo fixes + +2005-09-28 15:11 Rafael Garcia-Suarez + + * gendistrib, genhdlist: Sort manpage by alphabetical order + +2005-09-28 15:09 Rafael Garcia-Suarez + + * gendistrib: Remove unnecessary, misnamed, undocumented and + deprecated option --distrib + +2005-09-28 14:29 Rafael Garcia-Suarez + + * genhdlist: Use Pod::Usage + +2005-09-28 14:19 Rafael Garcia-Suarez + + * genhdlist: Code cleanup + +2005-09-28 13:44 Rafael Garcia-Suarez + + * gendistrib: Add a manpage for gendistrib(1) + +2005-09-28 12:06 Rafael Garcia-Suarez + + * Makefile.PL, gendistrib, rpmtools.spec: Use Pod::Usage for + gendistrib + +2005-09-28 10:38 Rafael Garcia-Suarez + + * gendistrib: Add --version option. Suppress idiotic -s option + alias. + +2005-09-28 10:32 Rafael Garcia-Suarez + + * gendistrib: First POD draft. + +2005-09-28 09:54 Rafael Garcia-Suarez + + * Makefile.PL, rpm2header.c: Remove obsolete code + +2005-09-28 08:50 Rafael Garcia-Suarez + + * Distribconf.pm, gendistrib: Documentation nits. Fix some fatal + error messages. + +2005-09-14 15:05 Olivier Thauvin + + * rpmtools.spec: -add %check + +2005-09-14 15:04 Olivier Thauvin + + * ChangeLog, rpmtools.spec: - 5.0.24 + +2005-09-14 01:02 Olivier Thauvin + + * gendistrib: - skip hdlist rebuild per media when not need + +2005-09-07 09:33 Olivier Thauvin + + * gendistrib: - add --blind option / rebuild even it is not need + +2005-09-07 06:41 Olivier Thauvin + + * gendistrib: - do not rebuild hdlist if not need + +2005-09-06 23:48 Olivier Thauvin + + * gendistrib: add --destdir option + +2005-09-06 19:46 Olivier Thauvin + + * Distribconf.pm, Distribconf/Build.pm, Packdrakeng.pm, + dumpdistribconf, packdrake.pm: - s/mandrake/mandriva/ + +2005-09-06 16:58 Olivier Thauvin + + * gendistrib: - make empty media non fatal, use --noemptymedia to + back old behaviour + - add --mediacfg in --help + - die if header dir can't be recreate + +2005-09-06 15:56 Olivier Thauvin + + * gendistrib: - show all missing directory before dying when + --skipmissingdir is not specified + +2005-08-23 12:57 Rafael Garcia-Suarez + + * t/01packdrakeng.t: Test fix to go along with the previous + change. Be more TAP compliant. + Die early of errors. + +2005-08-23 12:50 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.23-1mdk + +2005-08-23 12:47 Rafael Garcia-Suarez + + * Packdrakeng.pm: If extracting an archive to an undefined + directory, output to stdout. + (used by urpmq) + +2005-08-22 17:59 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.22 + +2005-08-22 16:54 Rafael Garcia-Suarez + + * Packdrakeng.pm: Use destdir = "." if not specified. + Don't use warnings. + +2005-08-19 15:33 Thierry Vignaud + + * Packdrakeng.pm: let it pass perl_checker + * .perl_checker: blacklist a few packages in order to be able to + run perl_checker over Packadrake + +2005-08-19 15:30 Thierry Vignaud + + * Packdrakeng.pm: (tempfile) display which file we failed to create + +2005-06-20 10:14 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 4.0.21 + +2005-06-16 01:01 Rafael Garcia-Suarez + + * Packdrakeng.pm: Create temp file in $TMPDIR instead of $TMP, and + warn when creation failed + +2005-05-26 09:32 Rafael Garcia-Suarez + + * Distribconf/Build.pm: Fix error messages + +2005-05-10 09:24 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.20-2mdk + +2005-04-15 15:48 Rafael Garcia-Suarez + + * rpmtools.spec: Be less dependant on distribution name + +2005-04-04 15:31 Pixel + + * Packdrakeng.pm, rpmtools.spec: packdrake: remove dirty message + when decompressing without Compress::Zlib + +2005-03-29 15:45 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.19-1mdk + +2005-03-29 15:37 Rafael Garcia-Suarez + + * gendistrib: Remove redundant code + +2005-03-29 15:24 Rafael Garcia-Suarez + + * gendistrib: Create the directory "thismediainfo" if it doesn't + exist + +2005-03-14 13:01 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.18-1mdk + +2005-03-14 12:47 Rafael Garcia-Suarez + + * gendistrib: Build hdlists in temporary locations + +2005-03-07 15:06 Rafael Garcia-Suarez + + * rpmtools.spec: 5.0.17-1mdk + +2005-03-07 15:00 Rafael Garcia-Suarez + + * gendistrib: Factorisation of paths + +2005-03-07 14:20 Rafael Garcia-Suarez + + * gendistrib: Generate media-specific MD5SUM files in + 'thismediainfo' dir, not 'mediainfo' + +2005-03-07 13:45 Rafael Garcia-Suarez + + * Distribconf.pm: Doc and POD fixes + +2005-03-07 10:59 Rafael Garcia-Suarez + + * gendistrib: Spelling fix + +2005-03-01 11:46 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.16-1mdk + +2005-03-01 11:33 Rafael Garcia-Suarez + + * parsehdlist.c: Output help to stdout + +2005-03-01 11:31 Rafael Garcia-Suarez + + * parsehdlist.c: Patch by Leon Brooks to add an --sql option to + dump output as SQL INSERT + statements, and an --url option to get the rpm's URL tag. + +2005-02-28 11:37 Rafael Garcia-Suarez + + * Packdrakeng.pm: POD fixes. + +2005-02-28 11:32 Rafael Garcia-Suarez + + * Packdrakeng.pm: toc_f_count wasn't stored in the Packdrakeng + object, and it's used by + rpmdrake's search progress bar. (bug 14008) + +2005-02-23 18:32 Pablo Saratxaga + + * ChangeLog: converted to UTF-8 + +2005-02-22 20:25 Olivier Thauvin + + * ChangeLog: -update + +2005-02-22 20:24 Olivier Thauvin + + * MANIFEST, Makefile.PL, rpmtools.spec: - 5.0.15 + +2005-02-22 20:15 Olivier Thauvin + + * gendistrib: - --skipmissingdir + - preform a simple on the distrib + - die ealier on missing media dir + - generate VERSION it self + +2005-02-22 20:12 Olivier Thauvin + + * Distribconf, Distribconf.pm, Distribconf/Build.pm: - split + Distribconf with Build + - add write_VERSION + +2005-02-22 12:52 Olivier Thauvin + + * Distribconf.pm: - don't add a 'm' to size in hdlists + +2005-02-21 21:40 Olivier Thauvin + + * Distribconf.pm: - add getfullpath + - s![ /]*!_! in default path + - add check() + +2005-02-21 21:36 Olivier Thauvin + + * gendistrib: - add a "\n" to beautify output + +2005-02-21 15:45 Olivier Thauvin + + * ChangeLog: - update + * rpmtools.spec: - 5.0.14 + +2005-02-21 15:42 Olivier Thauvin + + * gendistrib: -fix wrong commit + +2005-02-21 15:34 Olivier Thauvin + + * Distribconf.pm, gendistrib: Distribconf + +2005-02-21 13:15 Olivier Thauvin + + * ChangeLog: - update + +2005-02-21 13:14 Olivier Thauvin + + * rpmtools.spec: - 5.0.13 + * Distribconf.pm: - add doc for pubkey + +2005-02-21 13:11 Olivier Thauvin + + * Distribconf.pm: - lowercase media name in file name + - manage pubkey + +2005-02-21 12:47 Olivier Thauvin + + * Distribconf.pm: - avoid error message about non existing + media.cfg + +2005-02-21 00:10 Olivier Thauvin + + * ChangeLog: - update + +2005-02-21 00:06 Olivier Thauvin + + * gendistrib: - s/getpath/getvalue/ + +2005-02-21 00:05 Olivier Thauvin + + * ChangeLog: - update + +2005-02-21 00:04 Olivier Thauvin + + * rpmtools.spec: - 5.0.12 + +2005-02-21 00:03 Olivier Thauvin + + * gendistrib: - skip media genration if suppl or askmedia + +2005-02-20 23:36 Olivier Thauvin + + * rpmtools.spec: - remove prefix tag + +2005-02-20 23:20 Olivier Thauvin + + * gendistrib, rpmtools.spec: - don't create existing dir + - minor fix + - 5.8.11 + +2005-02-20 21:44 Olivier Thauvin + + * MANIFEST, Makefile.PL: - add Districonf and co + +2005-02-20 21:15 Olivier Thauvin + + * Distribconf.pm, dumpdistribconf: - initials release for managing + mandrakelinux distro tree + +2005-02-17 12:58 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.10-1mdk + +2005-02-17 12:30 Rafael Garcia-Suarez + + * gendistrib: Ensure links are done + +2005-02-17 11:26 Rafael Garcia-Suarez + + * gendistrib: Spelling fixes in usage + +2005-02-17 10:57 Rafael Garcia-Suarez + + * gendistrib: Generate MD5SUM files + +2005-02-17 10:23 Rafael Garcia-Suarez + + * gendistrib: More cleanup + +2005-02-17 09:58 Rafael Garcia-Suarez + + * gendistrib: Add creation of links to hdlist/synthesis in + media_info subdirectories + (and add a command line option to disable it) + +2005-02-17 09:09 Rafael Garcia-Suarez + + * gendistrib: Code cleanup + +2005-02-17 08:16 Rafael Garcia-Suarez + + * gendistrib: Handle new hdlists format (with sizes) + +2005-02-02 11:28 Rafael Garcia-Suarez + + * rpmtools.spec: Remove redundant and bogus require on perl-base + +2005-01-17 13:26 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.9-1mdk + +2005-01-17 13:01 Rafael Garcia-Suarez + + * genhdlist: Add a "follow" option to the File::Find call, to + follow symlinks, as + suggested by Steven Shiau. Plus some tidying up and perl_checker + fixes. + +2005-01-07 12:38 Rafael Garcia-Suarez + + * Packdrakeng.pm: More filehandle cleanup + +2005-01-03 21:52 Rafael Garcia-Suarez + + * Packdrakeng/zlib.pm: Fix warning messages (english grammar, plus + final \n) + +2005-01-03 16:55 Olivier Thauvin + + * ChangeLog: - update for 5.0.8 + +2005-01-03 16:54 Olivier Thauvin + + * Packdrakeng.pm, rpmtools.spec: - Fix options parsing + - 5.0.8 + +2005-01-03 16:38 Olivier Thauvin + + * Packdrakeng.pm, Packdrakeng/zlib.pm: - fix data read detection + when using cache + +2004-12-30 16:00 Olivier Thauvin + + * ChangeLog: - update + * rpmtools.spec: - 5.0.7 + +2004-12-30 15:55 Olivier Thauvin + + * Packdrakeng.pm, Packdrakeng/zlib.pm: - speedup uncompress + function + - factorize code + +2004-12-21 23:14 Olivier Thauvin + + * Packdrakeng/zlib.pm: -really fix syswrite + +2004-12-21 22:29 Olivier Thauvin + + * Packdrakeng/zlib.pm: - check data are really writen + +2004-12-20 12:25 Olivier Thauvin + + * Packdrakeng.pm, t/01packdrakeng.t: - add infofile() function + - more doc + +2004-12-17 16:04 Rafael Garcia-Suarez + + * packdrake: perl_checker fixes + +2004-12-17 13:32 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.6-1mdk + +2004-12-17 13:24 Rafael Garcia-Suarez + + * Packdrakeng.pm, Packdrakeng/zlib.pm: Ensure Packdrakeng::zlib + loads properly, and is not used if Compress::Zlib + is not available + +2004-12-17 13:13 Rafael Garcia-Suarez + + * t/01packdrakeng.t, t/02packdrake.t: Neatier test labels + +2004-12-17 10:21 Rafael Garcia-Suarez + + * Packdrakeng.pm: Simplify optional module loading + +2004-12-16 15:21 Rafael Garcia-Suarez + + * packdrake.pm: At least show a warning when an archive can't be + found + +2004-12-16 15:03 Rafael Garcia-Suarez + + * Packdrakeng.pm: Don't invoke compression/decompression + subroutines as methods + +2004-12-16 12:50 Olivier Thauvin + + * Makefile.PL: - add tag command + +2004-12-15 19:52 Olivier Thauvin + + * Packdrakeng.pm: - more docs + +2004-12-14 19:21 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.5-1mdk + +2004-12-14 19:16 Rafael Garcia-Suarez + + * Packdrakeng.pm: Fix indentation and capitalize some warning + messages + +2004-12-14 19:13 Rafael Garcia-Suarez + + * Packdrakeng.pm: Use $pack->{log}() instead of warn(), so --quiet + works again + +2004-12-14 10:38 Rafael Garcia-Suarez + + * Makefile.PL: Don't hardcode version in several places + +2004-12-14 10:27 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.4 + +2004-12-14 10:25 Rafael Garcia-Suarez + + * rpmtools.spec: Don't require Compress::Zlib (only suggest :) + +2004-12-14 10:24 Rafael Garcia-Suarez + + * packdrake.pm: extract_archive() should do nothing in no files + are specified. + Add an extract_all_archive function. + +2004-12-14 01:44 Olivier Thauvin + + * Packdrakeng.pm: - fix mkpath + +2004-12-14 00:23 Olivier Thauvin + + * ChangeLog: - update for 5.0.3 + +2004-12-14 00:22 Olivier Thauvin + + * Makefile.PL, Packdrakeng.pm, rpmtools.spec: - 5.0.3 + - fix mkpath + +2004-12-14 00:02 Olivier Thauvin + + * Packdrakeng.pm, t/01packdrakeng.t: - don't use File::* modules + +2004-12-13 17:54 Rafael Garcia-Suarez + + * rpmtools.spec: Fix a misplaced Provides in the specfile. + +2004-12-13 16:17 Rafael Garcia-Suarez + + * Packdrakeng.pm: Explicit import list for POSIX + +2004-12-13 15:57 Olivier Thauvin + + * rpmtools.spec: - add conflicts to help update + +2004-12-13 15:49 Olivier Thauvin + + * ChangeLog: - update + +2004-12-13 15:48 Olivier Thauvin + + * Makefile.PL, rpmtools.spec: - add missing file zlib.pm + +2004-12-13 15:29 Olivier Thauvin + + * rpmtools.spec: - cosmetic change, make rpmlint happy + +2004-12-13 15:26 Olivier Thauvin + + * Makefile.PL: - version is 5.0.1 + +2004-12-13 15:20 Olivier Thauvin + + * ChangeLog: - update + +2004-12-13 15:13 Olivier Thauvin + + * MANIFEST: - add Packdrakeng/zlib.pm + +2004-12-13 15:10 Olivier Thauvin + + * Packdrakeng, Packdrakeng/zlib.pm: - externalize Compress::Zlib + * Packdrakeng.pm: - s/use/eval {require}/ on Compress::Zlib, so it + can works without it + +2004-12-13 15:06 Olivier Thauvin + + * rpmtools.spec: - split package + - 5.0.1 + +2004-12-09 13:04 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 5.0.0-2mdk + +2004-12-09 12:56 Rafael Garcia-Suarez + + * Makefile.PL: Refine "rpm" make target + +2004-12-09 12:46 Rafael Garcia-Suarez + + * Packdrakeng.pm: Pull $VERSION from CVS + +2004-12-09 12:43 Rafael Garcia-Suarez + + * packdrake: Adjust copyright + +2004-12-09 12:34 Rafael Garcia-Suarez + + * packdrake.pm: POD fixes. + +2004-12-07 10:19 Olivier Thauvin + + * t/01packdrakeng.t: - minor fix + +2004-12-07 09:57 Rafael Garcia-Suarez + + * t/02packdrake.t: Compare strings with eq, not == + +2004-12-07 09:47 Rafael Garcia-Suarez + + * Packdrakeng.pm: POD fix + +2004-12-07 09:34 Rafael Garcia-Suarez + + * Packdrakeng.pm: Minor doc fixes + +2004-12-07 08:10 Rafael Garcia-Suarez + + * Makefile.PL: Improve distclean make target + +2004-12-06 23:29 Olivier Thauvin + + * ChangeLog, MANIFEST: - ChangeLog + +2004-12-06 23:27 Olivier Thauvin + + * MANIFEST, Makefile, Makefile.PL, Packdrakeng.pm, packdrake.pm, + rpmtools.spec, t/02packdrake.t: - 5.0.0 + - more test and fix + +2004-12-06 16:42 Olivier Thauvin + + * Packdrakeng.pm, t/01packdrakeng.t: - fix dir / symlink creation + - add test + +2004-12-06 15:40 Michael Scherer + + * Packdrakeng.pm: - fix small typos in docs + +2004-12-06 11:15 Olivier Thauvin + + * distriblint: - removing this ugly script + +2004-12-06 11:11 Olivier Thauvin + + * MANIFEST, Makefile, Makefile.PL, packdrake-pm, packdrake.pm, + rpmtools.spec: - bump to packdrakeng + +2004-12-05 21:05 Olivier Thauvin + + * Packdrakeng.pm, t/01packdrakeng.t: - fix data length detection + in extern_compress + - add test + +2004-12-05 16:36 Olivier Thauvin + + * Packdrakeng.pm, packdrakeng.pm: - rename packdrakeng.pm to + Packdrakeng.pm to follow perl policy + +2004-12-05 07:13 Olivier Thauvin + + * packdrakeng.pm, t/01packdrakeng.t: - fix data length to write + - test: use strict ;) then fix it !! + +2004-12-04 04:32 Olivier Thauvin + + * packdrakeng.pm, t/01packdrakeng.t: - add external call to + compress programs + - clean code + - fix bugs... + - start doc + - add test + +2004-11-29 10:11 Olivier Thauvin + + * t, t/01packdrakeng.t: - first commit + +2004-11-29 08:45 Olivier Thauvin + + * packdrakeng.pm: - managed more than one file by bloc + - add few comment + +2004-11-29 00:30 Olivier Thauvin + + * packdrake-pm/packdrake.pm: - cosmectic fix + +2004-11-27 14:08 Olivier Thauvin + + * packdrakeng.pm: - fix compressed size read + - some return on error add + +2004-11-26 00:34 Olivier Thauvin + + * packdrakeng.pm: - Update errors + +2004-11-25 22:27 Olivier Thauvin + + * packdrakeng.pm: - first commit for this wonderfull packdrake ng + pm file + +2004-11-18 12:48 Rafael Garcia-Suarez + + * gendistrib: Logging nits + +2004-11-17 17:21 Rafael Garcia-Suarez + + * gendistrib: Fix usage notes + +2004-09-02 05:19 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 4.5-25mdk + +2004-09-02 05:03 Rafael Garcia-Suarez + + * distriblint, gendistrib: Make rpm tools handle new keywords in + hdlists file. + +2004-08-18 00:21 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 4.5-24mdk + +2004-08-18 00:15 Rafael Garcia-Suarez + + * Makefile: Install rpm2cpio.pl + +2004-08-17 23:57 Rafael Garcia-Suarez + + * rpm2cpio.pl: Minor adjustements + +2004-08-17 23:50 Rafael Garcia-Suarez + + * rpm2cpio.pl: Add a pure-perl version of rpm2cpio (for emergency + cases), + written by Roger Espel Llima. (from + http://www.iagora.com/~espel/rpm2cpio) + +2004-08-11 05:22 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 4.5-23mdk + +2004-08-11 05:10 Rafael Garcia-Suarez + + * parsehdlist.c: Don't include internal dependencies of the rpmlib + in the parsehdlist output + +2004-07-22 08:25 Rafael Garcia-Suarez + + * distriblint, gendistrib, packdrake-pm/packdrake.pm, + rpmtools.spec: 4.5-22mdk: Updates for the new media layout in + cooker + +2004-07-05 06:47 Rafael Garcia-Suarez + + * ChangeLog, rpmtools.spec: 4.5-21mdk + +2004-07-05 06:23 Rafael Garcia-Suarez + + * parsehdlist.c: Fix error message + +2004-07-05 05:40 Rafael Garcia-Suarez + + * parsehdlist.c: Minor fixes in help message + * Makefile: Add a rule for changelog generation + +2004-04-23 12:39 Rafael Garcia-Suarez + + * rpmtools.spec: 4.5-20mdk + +2004-04-23 09:04 Rafael Garcia-Suarez + + * Makefile: Fix CFLAGS in the Makefile for compilation with + versions of rpm >= 4.2. + +2004-04-23 08:49 Rafael Garcia-Suarez + + * packdrake, packdrake-pm/packdrake.pm: Add a --quiet option to + packdrake + +2004-04-21 09:17 Warly + + * gendistrib: make $ENV{TMPDIR} the default cache location + +2004-02-25 13:35 Olivier Thauvin + + * rpmtools.spec: rebuild for perl + +2004-01-18 02:30 Olivier Thauvin + + * genhdlist: - Don't put wrong rpm in list file when using dontdie + +2004-01-16 18:05 Olivier Thauvin + + * ChangeLog: Generated by cvs2cl the 16_Jan + +2004-01-16 18:04 Olivier Thauvin + + * genhdlist, rpmtools.spec: fix genhdlist without arg + +2004-01-16 00:58 Olivier Thauvin + + * rpmtools.spec: - 17mdk + +2004-01-16 00:53 Olivier Thauvin + + * genhdlist: - add --dest option + - fix dir parsing + +2004-01-09 15:49 Warly + + * rpmtools.spec: add provides perl(packdrake) + +2004-01-05 22:15 Olivier Thauvin + + * ChangeLog, rpmtools.spec: -15mdk + +2004-01-05 22:09 Olivier Thauvin + + * Makefile: use %_topdir instead /home/users/olivier + +2004-01-05 21:51 Olivier Thauvin + + * gendistrib, genhdlist: add somes feature + +2003-12-09 19:38 Fançois Pons + + * Makefile, rpmtools.spec: added RH 7.3 support + +2003-08-28 13:44 Fançois Pons + + * gendistrib: fixed MD5SUM files to be removed, added noarch for + %{ARCH} possible substitution. + +2003-08-28 13:40 Fançois Pons + + * rpmtools.spec: 4.5-13mdk + +2003-08-28 13:39 Fançois Pons + + * gendistrib: added %{ARCH} management + +2003-08-01 13:17 Fançois Pons + + * rpmtools.spec: final 4.5-12mdk + +2003-08-01 12:21 Fançois Pons + + * rpmtools.spec: 4.5-12mdk + +2003-05-19 15:26 Thierry Vignaud + + * packdrake-pm/packdrake.pm: perl_checker fixes + +2003-05-12 16:47 Guillaume Cottenceau + + * rpmtools.spec: rebuild for new perl requires/provides + +2003-04-29 20:19 Frederic Lepied + + * rpmtools.spec: 4.5-10mdk + +2003-04-29 20:18 Frederic Lepied + + * Makefile: use rpmbuild instead of rpm + +2003-04-29 20:17 Frederic Lepied + + * rpm2header.c: added rpm 4.2 support + +2003-03-10 10:42 Fançois Pons + + * rpmtools.spec: added URL tag. + +2003-03-10 10:39 Fançois Pons + + * gendistrib, rpmtools.spec: 4.5-9mdk + +2003-02-20 15:54 Fançois Pons + + * packdrake-pm/packdrake.pm, rpmtools.spec: 4.5-8mdk + +2002-12-05 23:43 Pixel + + * packdrake-pm/packdrake.pm, rpmtools.spec: fix a bug in an error + message (as detected by perl_checker) + +2002-12-04 21:44 Pixel + + * packdrake-pm/packdrake.pm, rpmtools.spec: packdrake.pm is now + perl_checker compliant + +2002-11-28 01:01 Pixel + + * packdrake-pm/packdrake.pm, rpmtools.spec: packdrake.pm is now + perl_checker compliant + +2002-11-26 18:30 Pixel + + * packdrake-pm/packdrake.pm, rpmtools.spec: packdrake.pm is now + perl_checker compliant + +2002-11-26 14:12 Fançois Pons + + * packdrake-pm/packdrake.pm: fix of pixel from perl-checker. + +2002-10-16 14:08 Fançois Pons + + * rpmtools.spec: updated spec file with obsoletes changed by + conflicts. + +2002-10-16 14:07 Fançois Pons + + * gendistrib, packdrake-pm/packdrake.pm, rpmtools.spec: 4.5-3mdk + +2002-08-05 19:04 Pixel + + * Makefile, Makefile.PL, build_archive, extract_archive, + genbasefiles, gendepslist2.cc, genfilelist, genhdlist_cz2, + genhdlists, hdlist2files.cc, hdlist2groups.cc, hdlist2names.cc, + hdlist2prereq.cc, packdrake-pm, packdrake-pm/Makefile.PL, + packdrake-pm/packdrake.pm, packdrake.pm, rpm-find-leaves.c, + rpmtools.pm, rpmtools.spec, rpmtools.xs: - remove obsolete stuff + - move packdrake.pm in its own directory to make MakeMaker happy + +2002-08-05 15:05 Guillaume Cottenceau + + * Makefile, parsehdlist.c, rpmtools.spec: add --fileswinfo query + to parsehdlist so that we can know more + informations on the package for which we print the files (needed + by + upcoming rpmdrake supporting searching in files) + +2002-07-23 18:43 Fançois Pons + + * rpmtools.spec: 4.4-1mdk + +2002-07-23 18:31 Fançois Pons + + * Makefile, rpmtools.pm, rpmtools.spec: 4.4-1mdk + +2002-07-09 11:00 Pixel + + * rpmtools.spec: adapt to perl 5.8.0 + +2002-06-28 07:10 Fançois Pons + + * distriblint, rpmtools.spec: 4.3-5mdk + +2002-06-27 18:28 Fançois Pons + + * Makefile, rpmtools.spec: 4.3-4mdk (forget installation of + distriblint) + +2002-06-27 18:27 Fançois Pons + + * distriblint, rpmtools.spec: 4.3-4mdk + +2002-06-18 16:02 Fançois Pons + + * Makefile, rpmtools.spec: fixes for real addition and + installation. + +2002-06-18 15:57 Fançois Pons + + * genhdlist, rpmtools.spec: 4.3-3mdk (added genhdlist) + +2002-06-03 12:04 Fançois Pons + + * gendistrib: added missing log removed since gendistrib use + perl-URPM. + +2002-06-03 11:06 Fançois Pons + + * gendistrib, rpmtools.spec: synced gendistrib with URPM 0.02 or + later. + +2002-05-31 10:58 Fançois Pons + + * Makefile, gendistrib, rpmtools.pm, rpmtools.spec: start using + perl-URPM + +2002-05-29 08:11 Fançois Pons + + * rpmtools.spec: latest rpmtools 4.2. + +2002-05-29 08:10 Fançois Pons + + * rpmtools.xs: back fix from URPM module. + +2002-04-22 15:59 Fançois Pons + + * rpmtools.pm, rpmtools.spec, rpmtools.xs: improved generation of + synthesis (smaller) + +2002-04-15 13:25 Fançois Pons + + * packdrake.pm, rpmtools.spec: fixed with NIS and packdrake + --extract. + +2002-04-10 14:33 Fançois Pons + + * packdrake.pm, rpmtools.pm, rpmtools.spec: compatible with perl + 5.005 and above. + +2002-03-20 19:58 Frederic Lepied + + * rpmtools.spec: 4.2-9mdk + +2002-03-06 18:59 Fançois Pons + + * rpmtools.pm, rpmtools.spec: 4.2-8mdk, now final 8.2 ? + +2002-03-06 18:51 Fançois Pons + + * rpmtools.pm, rpmtools.spec: 4.2-7mdk, final ? + +2002-02-27 11:02 Fançois Pons + + * rpmtools.spec, rpmtools.xs: 4.2-6mdk + +2002-02-18 10:54 Fançois Pons + + * parsehdlist.c, rpmtools.spec: 4.2-4mdk + +2002-02-14 16:26 Fançois Pons + + * rpmtools.spec, rpmtools.xs: 4.2-3mdk, memory leak fixed. + +2002-02-11 13:32 Fançois Pons + + * rpmtools.spec: update date changelog. + +2002-02-08 17:06 Fançois Pons + + * rpmtools.spec, rpmtools.xs: 4.2-2mdk + +2002-02-08 16:55 Fançois Pons + + * Makefile, parsehdlist.c, rpmtools.pm, rpmtools.spec: 4.2-1mdk + +2002-02-05 16:55 Fançois Pons + + * rpmtools.pm, rpmtools.spec: 4.1-4mdk + +2002-01-30 11:45 Fançois Pons + + * rpmtools.pm, rpmtools.spec: 4.1-3mdk + +2002-01-24 09:39 Fançois Pons + + * rpmtools.spec, rpmtools.xs: 4.1-2mdk + +2002-01-22 18:39 Fançois Pons + + * Makefile, gendistrib, rpmtools.pm, rpmtools.spec: new 4.1 + version. + +2002-01-17 12:01 Fançois Pons + + * parsehdlist.c, rpmtools.spec, rpmtools.xs: 4.0-7mdk + +2002-01-17 10:05 Fançois Pons + + * rpmtools.pm, rpmtools.spec, rpmtools.xs: 4.0-6mdk + +2002-01-16 18:21 Fançois Pons + + * rpmtools.pm, rpmtools.spec: 4.0-5mdk + +2002-01-15 17:08 Fançois Pons + + * parsehdlist.c, rpmtools.pm, rpmtools.spec: 4.0-4mdk + +2002-01-10 09:27 Fançois Pons + + * rpmtools.pm, rpmtools.spec: fixed stupid bug in read_hdlist. + +2002-01-09 16:32 Fançois Pons + + * gendistrib, rpmtools.pm, rpmtools.spec: first snapshot candidate + for first alpha of 8.2. + +2001-12-05 16:42 Fançois Pons + + * Makefile, gendistrib, rpmtools.pm, rpmtools.spec, rpmtools.xs: + 4.0 release (changes of provides internally). + +2001-12-05 14:42 Fançois Pons + + * parsehdlist.c: fixed bad alloca size. + +2001-12-05 11:24 Fançois Pons + + * Makefile, parsehdlist.c, rpmtools.pm, rpmtools.spec: 3.2 for + newer urpmi. + +2001-11-26 17:46 Fançois Pons + + * rpmtools.pm, rpmtools.spec: fixes for alpha. + +2001-11-26 16:54 Fançois Pons + + * rpmtools.pm, rpmtools.spec: fixed compss file reading. + +2001-11-16 14:01 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-11-16 09:32 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-11-14 20:15 Fançois Pons + + * rpmtools.spec: new release. + +2001-11-14 20:14 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2001-11-14 20:11 Fançois Pons + + * parsehdlist.c: fixed core dump when name is given with other + argument on some case. + changed --name behaviour to give filename along with fullname. + +2001-08-09 16:47 Pixel + + * rpmtools.spec: *** empty log message *** + +2001-07-25 15:12 Fançois Pons + + * Makefile: avoid using version_compare. + +2001-07-25 14:59 Fançois Pons + + * Makefile.PL, rpmtools.pm, rpmtools.spec, rpmtools.xs: use rpmlib + version comparison function, force destiny. + +2001-07-23 15:15 Fançois Pons + + * Makefile, rpmtools.pm, rpmtools.spec, rpmtools.xs: first 3.1 + major relase, with fullname in info hash. + +2001-07-21 10:34 Warly + + * rpmtools.pm, rpmtools.spec, rpmtools.xs: add sourcerpm tag + +2001-07-18 12:50 Fançois Pons + + * Makefile, Makefile.PL, rpmtools.spec: new release with new rpm. + +2001-07-05 13:32 Fançois Pons + + * rpmtools.pm, rpmtools.spec: added compute_id method. + +2001-07-02 12:39 Fançois Pons + + * parsehdlist.c, rpmtools.spec: added arch support for parsehdlist. + +2001-06-28 16:40 Fançois Pons + + * rpmtools.pm: dependencies is right. + +2001-06-28 15:42 Fançois Pons + + * rpmtools.pm, rpmtools.spec: cleaned rpmtools. + +2001-06-27 15:18 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-06-27 09:53 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-06-26 15:10 Fançois Pons + + * rpmtools.pm, rpmtools.spec: fixes for bad behaviour of + build_hdlist. + added better relocation code. + +2001-06-25 12:55 Fançois Pons + + * rpmtools.spec: late time fix. + +2001-06-25 12:54 Fançois Pons + + * rpmtools.pm: updated to use @ separator char instead of : in + provides file. + +2001-06-25 11:54 Fançois Pons + + * rpmtools.spec: fix version_compare 3.0-2mdk + +2001-06-25 11:49 Fançois Pons + + * rpmtools.pm: fix version compare for string like "0.beta4" + compared to "0.rc1", the latest + should be the greatest on comparing "beta" and "rc". + +2001-06-21 16:25 Fançois Pons + + * Makefile, Makefile.PL, parsehdlist.c, rpmtools.pm, + rpmtools.spec, rpmtools.xs: new 3.0 release, see rpmtools.spec. + +2001-06-14 08:59 Fançois Pons + + * Makefile, Makefile.PL, rpmtools.spec: *** empty log message *** + +2001-06-06 13:34 Fançois Pons + + * rpmtools.pm, rpmtools.spec: fix ordering of packages to avoid + some nasty loop in prerequisite chain + as for GConf and libGConf currently. + +2001-05-22 13:36 Fançois Pons + + * rpmtools.pm, rpmtools.spec, rpmtools.xs: added arch support. + +2001-04-16 16:47 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2001-04-16 16:46 Fançois Pons + + * parsehdlist.c: added back kill to child process as some report + of locking ? + +2001-04-14 14:27 Fançois Pons + + * rpmtools.spec: final for 8.0 ? + +2001-04-14 14:23 Fançois Pons + + * rpmtools.pm: fixed absurd mismatch of use <=> and cmp. + +2001-04-14 11:55 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2001-04-14 11:52 Fançois Pons + + * parsehdlist.c: fixed interactive mode with provides tag to + return flags and version, + commented print_list no more used. + +2001-04-14 11:47 Fançois Pons + + * parsehdlist.c: simplified header construction and fixed + --compact to match exactly what + is needed for synthesis file. + +2001-04-12 12:58 Fançois Pons + + * packdrake.pm, rpmtools.spec: *** empty log message *** + +2001-04-03 12:50 Fançois Pons + + * parsehdlist.c, rpmtools.pm, rpmtools.spec: *** empty log message + *** + +2001-03-26 15:14 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-03-26 13:39 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-03-23 14:20 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-03-23 14:14 Fançois Pons + + * rpmtools.pm, rpmtools.spec, rpmtools.xs: *** empty log message + *** + +2001-03-23 13:37 Fançois Pons + + * parsehdlist.c: added --compact option to help producing + synthesis file (need s/:/@/g). + +2001-03-23 13:36 Fançois Pons + + * rpmtools.xs: try to be cleaner for subscript but not enough. + +2001-03-23 13:35 Fançois Pons + + * rpmtools.pm: workarount hashes subscript error of perl. + * rpmtools.spec: 2.3-13mdk. + +2001-03-12 15:25 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2001-03-12 15:21 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2001-03-12 15:20 Fançois Pons + + * packdrake.pm, parsehdlist.c, rpmtools.spec: *** empty log + message *** + +2001-03-12 14:02 Frederic Lepied + + * Makefile.PL: don't link explicitly with db libs. + +2001-03-08 17:15 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-03-07 15:34 Fançois Pons + + * parsehdlist.c, rpmtools.spec: *** empty log message *** + +2001-03-05 13:40 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2001-03-04 18:22 Warly + + * Makefile: add db1 and db-3.1 to the static build for + rpm2header_static + +2001-03-01 17:06 Fançois Pons + + * gendistrib, rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-02-27 17:05 Fançois Pons + + * gendistrib, rpmtools.spec: *** empty log message *** + +2001-02-26 15:06 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-02-19 16:45 Fançois Pons + + * rpmtools.pm, rpmtools.spec, rpmtools.xs: *** empty log message + *** + +2001-02-19 14:56 Fançois Pons + + * rpmtools.pm, rpmtools.spec, rpmtools.xs: *** empty log message + *** + +2001-02-16 13:00 Fançois Pons + + * parsehdlist.c, rpmtools.spec, rpmtools.xs: *** empty log message + *** + +2001-02-14 13:29 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-02-14 13:20 Fançois Pons + + * Makefile, rpmtools.pm, rpmtools.spec, rpmtools.xs: *** empty log + message *** + +2001-02-13 15:01 Fançois Pons + + * Makefile, rpmtools.pm, rpmtools.spec, rpmtools.xs: added faster + method to rpmtools.xs, fixed code and added exit too. + +2001-01-30 17:47 Fançois Pons + + * rpmtools.spec: *** empty log message *** + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2001-01-23 19:30 Fançois Pons + + * rpmtools.spec: 2.1-9mdk + +2001-01-23 19:20 Fançois Pons + + * gendistrib: updated to use new build_hdlist. + +2001-01-23 19:18 Fançois Pons + + * packdrake, packdrake.pm, rpmtools.pm, rpmtools.spec: added --dir + and -d flag for packdrake*. + management of specific directory for building archive. + +2001-01-22 17:35 Fançois Pons + + * rpmtools.pm: added base selection in choices, for glibc. + so when glibc or compat-glibc are required, only glibc is + requested. + +2001-01-22 12:53 Fançois Pons + + * genhdlists: modified to use rpmtools module. + +2001-01-17 15:51 Fançois Pons + + * Makefile: added gendistrib and removed obsolete tools. + +2001-01-17 15:50 Fançois Pons + + * gendistrib: initial revision. + +2001-01-17 15:47 Fançois Pons + + * rpmtools.pm: fixed volative current working directory in + build_hdlist + and use of noclean options. + +2001-01-17 15:46 Fançois Pons + + * rpmtools.spec: added gendistrib in %files and removed + genhdlists, genhdlist_cz2 and genbasefiles. + +2001-01-17 15:45 Fançois Pons + + * rpmtools.spec: 2.1-8mdk + +2001-01-16 16:40 Fançois Pons + + * packdrake.pm: fixed use of white space in archive name. + +2001-01-16 16:39 Fançois Pons + + * parsehdlist.c: added --output options. + * rpmtools.pm: add build_hdlist method. + increase version to 0.03. + +2001-01-16 16:38 Fançois Pons + + * rpmtools.spec: 2.1-7mdk snapshot. + +2001-01-05 15:54 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2001-01-05 15:24 Fançois Pons + + * packdrake.pm: really fixe exit in child process (when used with + DrakX, exit is not allowed) + +2001-01-05 14:40 Fançois Pons + + * packdrake.pm: changed exit by exec 'true' + +2001-01-05 10:54 Fançois Pons + + * packdrake.pm: fixed printing to STDOUT while extracting (usefull + if extracting to STDOUT :-) + +2001-01-04 18:36 Fançois Pons + + * parsehdlist.c: removed need of packdrake, so live update will be + nicer + +2001-01-04 15:20 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-12-08 15:50 Fançois Pons + + * packdrake, packdrake.pm, parsehdlist.c, rpmtools.pm, + rpmtools.spec, rpmtools.xs: *** empty log message *** + +2000-11-23 18:14 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-11-23 18:12 Fançois Pons + + * parsehdlist.c: fixed memory leaks that were causing problems if + used interactively. + +2000-11-23 18:11 Fançois Pons + + * rpmtools.pm: fixed deadlock in some case on version_compare. + +2000-11-20 18:47 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-11-20 18:46 Fançois Pons + + * parsehdlist.c: removed extra log on stdout (killer this one) + +2000-11-20 17:17 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-11-20 17:15 Fançois Pons + + * Makefile, parsehdlist.c: fixed big bug for execvl (thanks to + francis) + +2000-11-20 16:32 Fançois Pons + + * parsehdlist.c: added fflush after (avoid deadock with DrakX) + +2000-11-20 15:25 Fançois Pons + + * Makefile: *** empty log message *** + +2000-11-20 14:44 Fançois Pons + + * Makefile, rpmtools.spec: *** empty log message *** + +2000-11-20 14:12 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-11-20 13:59 Fançois Pons + + * parsehdlist.c: adding interactive mode for DrakX client/server + approach. + +2000-11-16 16:28 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2000-11-15 13:25 Pixel + + * rpmtools.spec: *** empty log message *** + +2000-10-19 15:28 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2000-10-19 12:26 Frederic Lepied + + * rpm-find-leaves.c, rpmtools.xs: use iterators. + * rpmtools.spec: 2.0-1mdk + +2000-10-19 12:25 Frederic Lepied + + * Makefile, Makefile.PL: added new lib for rpm. + +2000-09-15 10:55 Pixel + + * ChangeLog, build_archive, genhdlist_cz2, packdrake, + rpmtools.spec: use TMPDIR if available + +2000-09-04 16:41 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2000-09-03 17:28 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-09-03 17:18 Fançois Pons + + * rpmtools.pm: *** empty log message *** + +2000-09-03 17:03 Fançois Pons + + * genbasefiles, rpmtools.pm, rpmtools.spec: *** empty log message + *** + +2000-09-03 14:43 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2000-08-29 15:50 Fançois Pons + + * rpmtools.pm, rpmtools.spec: *** empty log message *** + +2000-08-29 13:51 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-08-29 12:35 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-08-28 15:00 Fançois Pons + + * packdrake: *** empty log message *** + +2000-08-28 10:24 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-08-28 08:58 Fançois Pons + + * Makefile, Makefile.PL, rpmtools.spec: *** empty log message *** + +2000-08-25 15:33 Fançois Pons + + * Makefile, rpmtools.pm: *** empty log message *** + +2000-08-25 14:49 Fançois Pons + + * Makefile, Makefile.PL, genbasefiles, rpmtools.pm, rpmtools.spec, + rpmtools.xs: *** empty log message *** + +2000-08-24 16:20 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-08-24 16:13 Fançois Pons + + * parsehdlist.c: *** empty log message *** + +2000-08-24 16:04 Fançois Pons + + * ChangeLog, Makefile, gendepslist2.cc, genhdlist_cz2, + rpm2header.c, rpmtools.spec: *** empty log message *** + +2000-08-11 17:18 Fançois Pons + + * packdrake: *** empty log message *** + +2000-08-05 18:03 Pixel + + * ChangeLog, gendepslist2.cc, rpmtools.spec: no_comment + +2000-07-27 18:23 Pixel + + * rpmtools.spec: no_comment + +2000-07-27 18:01 Pixel + + * ChangeLog, gendepslist2.cc: no_comment + +2000-07-12 10:17 Pixel + + * rpmtools.spec: no_comment + +2000-07-12 10:16 Pixel + + * rpmtools.spec: no_comment + +2000-06-13 19:02 Pixel + + * ChangeLog, gendepslist2.cc, rpmtools.spec: no_comment + +2000-06-08 09:14 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-05-25 15:59 Fançois Pons + + * genhdlist_cz2: *** empty log message *** + +2000-05-22 18:44 Fançois Pons + + * build_archive, gendepslist2.cc, genhdlist_cz2: *** empty log + message *** + +2000-05-02 13:11 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-05-02 13:02 Fançois Pons + + * extract_archive: *** empty log message *** + +2000-05-02 12:52 Pixel + + * rpmtools.spec: no_comment + +2000-04-28 02:56 Pixel + + * gendepslist2.cc: *** empty log message *** + +2000-04-20 18:48 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-04-20 18:45 Fançois Pons + + * build_archive, extract_archive, genfilelist, rpmtools.spec: *** + empty log message *** + +2000-04-19 12:42 Pixel + + * gendepslist2.cc: no_comment + +2000-04-19 12:38 Fançois Pons + + * rpmtools.spec: *** empty log message *** + +2000-04-17 12:35 Pixel + + * extract_archive, genhdlists, rpmtools.spec: no_comment + +2000-04-14 19:50 Pixel + + * rpmtools.spec: no_comment + +2000-04-14 10:02 Fançois Pons + + * genhdlists: *** empty log message *** + +2000-04-04 13:08 Fançois Pons + + * genfilelist: *** empty log message *** + +2000-04-04 11:14 Fançois Pons + + * ChangeLog, extract_archive: *** empty log message *** + +2000-03-31 16:40 Fançois Pons + + * genfilelist: *** empty log message *** + +2000-03-31 15:05 Fançois Pons + + * Makefile, rpmtools.spec: *** empty log message *** + +2000-03-31 14:41 Pixel + + * gendepslist2.cc, hdlist2groups.cc, rpmtools.spec: no_comment + +2000-03-31 14:40 Pixel + + * ChangeLog: *** empty log message *** + +2000-03-31 14:37 Fançois Pons + + * ChangeLog, genfilelist, rpmtools.spec: *** empty log message *** + +2000-03-27 22:59 Pixel + + * Makefile, hdlist2names.cc, rpmtools.spec: no_comment + +2000-03-26 17:24 Pixel + + * ChangeLog, build_archive, gendepslist2.cc, rpmtools.spec: + no_comment + +2000-03-25 12:58 Pixel + + * rpmtools.spec: no_comment + +2000-03-24 14:29 Pixel + + * gendepslist2.cc, genhdlist_cz2, rpmtools.spec: no_comment + +2000-03-23 12:24 Fançois Pons + + * genhdlist_cz2: *** empty log message *** + +2000-03-23 12:20 Pixel + + * Makefile, gendepslist2.cc, genhdlist_cz2, rpmtools.spec: + no_comment + +2000-03-10 15:44 Pixel + + * gendepslist2.cc: *** empty log message *** + +2000-03-10 15:38 Pixel + + * gendepslist2.cc: *** empty log message *** + +2000-03-10 15:34 Pixel + + * gendepslist2.cc: *** empty log message *** + +2000-03-10 14:39 Pixel + + * gendepslist2.cc: *** empty log message *** + +2000-03-10 14:34 Pixel + + * Makefile, gendepslist2.cc: no_comment + +2000-03-10 13:44 Pixel + + * gendepslist2.cc, rpmtools.spec: no_comment + +2000-03-10 12:36 Fançois Pons + + * ChangeLog, Makefile, genhdlists: *** empty log message *** + +2000-03-07 23:37 Pixel + + * build_archive, extract_archive, gendepslist2.cc, genhdlist_cz2, + hdlist2prereq.cc, rpmtools.spec: no_comment + +2000-03-07 23:36 Pixel + + * Makefile, rpmtools.spec: no_comment + +2000-03-07 23:32 Pixel + + * Makefile, gendepslist.cc, hdlist2files.cc, rpmtools.spec: + no_comment + +2000-02-23 17:49 Chmouel Boudjnah + + * ChangeLog, rpmtools.spec: "See_The_Changelog" + +2000-02-18 19:27 Chmouel Boudjnah + + * ., .cvsignore, ChangeLog, rpmtools.spec: "See_The_Changelog" + +2000-02-18 17:21 Frederic Lepied + + * gendepslist.cc, hdlist2files.cc: * new way to retrieve file + names in 3.0.4. + +2000-02-18 17:19 Frederic Lepied + + * rpm2header.c: * close files ! + * don't dup many times. + +2000-02-17 18:05 Chmouel Boudjnah + + * ChangeLog, Makefile, rpmtools.spec: "See_The_Changelog" + +2000-02-17 17:58 Chmouel Boudjnah + + * Makefile, gendepslist.cc, hdlist2files.cc, hdlist2names.cc, + rpm-find-leaves.c, rpm2header.c, rpmtools.spec: Initial revision + +2000-02-17 17:58 + + * soft/rpm/rpmtools/branches, soft/rpm/rpmtools/tags, .: New + repository initialized by cvs2svn. + diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..b33d015 --- /dev/null +++ b/MANIFEST @@ -0,0 +1,12 @@ +ChangeLog +dumpdistribconf +editdistrib +gendistrib +genhdlist-old +genhdlist2 +Makefile.PL +MANIFEST +NEWS +packdrake +packdrake.pm +t/01packdrake.t diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..a8a47fb --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,55 @@ +# $Id: Makefile.PL 251926 2009-01-20 15:24:15Z pixel $ + +use strict; +use ExtUtils::MakeMaker; + +my $rpmtools_version = "5.9"; + +# where to find the rpm utility + +sub MY::postamble { + < 'rpmtools', + VERSION => $rpmtools_version, + macro => { + RPMTOOLSVERSION => $rpmtools_version, + }, + depend => { + clean_subdirs => 'cleanc', + }, + PM => { + 'packdrake.pm' => '$(INST_LIBDIR)/packdrake.pm', + }, + EXE_FILES => [ qw(gendistrib genhdlist-old genhdlist2 packdrake dumpdistribconf) ], + C => [], + OBJECT => '', + CCFLAGS => '-Wall', + INC => '', + LIBS => [ '' ], + INSTALLDIRS => 'vendor', + MAN1PODS => { + dumpdistribconf => '$(INST_MAN1DIR)/dumpdistribconf.1', + gendistrib => '$(INST_MAN1DIR)/gendistrib.1', + 'genhdlist-old' => '$(INST_MAN1DIR)/genhdlist-old.1', + genhdlist2 => '$(INST_MAN1DIR)/genhdlist2.1', + packdrake => '$(INST_MAN1DIR)/packdrake.1', + }, + MAN3PODS => {}, + dist => { + COMPRESS => 'bzip2 --best', + SUFFIX => '.bz2', + }, +); diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..fa9b494 --- /dev/null +++ b/NEWS @@ -0,0 +1,84 @@ +Version ?.? - ? ? 2009, by ? +- add support for custom compression filter used for xml-info & synthesis. + +Version 5.9 - 20 January 2008, by Pascal "Pixel" Rigaux + +- drop parsehdlist, rpm2header: unused, partially duplicated with perl-URPM +- drop rpm2cpio.pl (doesn't handle lzma payload which is the default) + +Version 5.8 - 30 September 2008, by Pascal "Pixel" Rigaux + +- gendistrib: + o don't call genhdlist2 with --no-md5sum for no good reason + +Version 5.7 - 23 September 2008, by Pascal "Pixel" Rigaux + +- genhdlist2: + o with --versioned, create "versioned" metadata + o add xml header to xml files generated +- gendistrib: + o if "xml-info" is set in media.cfg, pass --xml-info to genhdlist2 +- parsehdlist, rpm2header + o fix support for rpm5 + o update deprecated code +- genhdlist-old + o genhdlist is now renamed as genhdlist-old + +Version 5.6 - 18 March 2008, by Pascal "Pixel" Rigaux + +- gendistrib: + o "askmedia" and "suppl" must not modify gendistrib behaviour (#39017) + +Version 5.5 - 5 March 2008, by Pascal "Pixel" Rigaux + +- genhdlist2: + o use utf8:: functions instead of Encode + (to be able to work with only perl base modules) +- parsehdlist, rpm2header: + o add support for rpm5 + +Version 5.4 - 26 February 2008, by Pascal "Pixel" Rigaux + +- parsehdlist, rpm2header: + o do not add/use FILENAME_TAG and FILESIZE_TAG to/in hdlist anymore + +Version 5.3.6 - 5 February 2007, by Pascal "Pixel" Rigaux + +- genhdlist2: + o fix writing utf8 in xml info files (#37482) + +Version 5.3.5 - 15 January 2007, by Pascal "Pixel" Rigaux + +- genhdlist2: + o rename --xml-media-info into --xml-info + (to be coherent with urpmi) + +Version 5.3.4 - 18 December 2007, by Pascal "Pixel" Rigaux + +- genhdlist2: + o add --no-hdlist option (to be used by urpmi for --probe-rpms) + +Version 5.3.3 - 17 December 2007, by Pascal "Pixel" Rigaux + +- genhdlist2: + o generate {info,changelog,files}.xml.lzma when they already exist, + or when --xml-media-info is used + o error message when parse_hdlist (partially) fail + o handle old-rpms.lst (to be generated by youri) + which will allow keeping rpms for some time without having in hdlist + (useful for installs which expect the pkgs to be in sync in hdlist during + the full install time) + it will also allow keeping deprecated packages for some time + +Version 5.3.2 - 22 June 2007, by Pascal "Pixel" Rigaux + +- genhdlist2: + o add --allow-empty-media + o fix MD5SUM generation + o allow using this script with perl-URPM 1.47 (ie mdv2007.0) +- gendistrib: + o call genhdlist2 instead of doing things here + o media/media_info/hdlist_xxx_yyy.cz is now a symlink to media/xxx/yyy/media_info/hdlist.cz + o synthesis.hdlist_xxx_yyy.cz and pubkey_xxx_yyy are also symlinks now +- parsehdlist: + o display pkgsize with --all (Christiaan Welvaart) diff --git a/dumpdistribconf b/dumpdistribconf new file mode 100755 index 0000000..d05bb27 --- /dev/null +++ b/dumpdistribconf @@ -0,0 +1,75 @@ +#!/usr/bin/perl + +(our $VERSION) = q$Id: dumpdistribconf 12157 2005-11-15 11:22:04Z rgarciasuarez $ =~ /(\d+\.\d+)/; + +use strict; +use Getopt::Long; +use MDV::Distribconf::Build; +use Pod::Usage; + +sub usage () { + pod2usage({ -verbose => 1 }); + exit 0; +} + +my ($out, $outputtype) = (\*STDOUT, 'm'); +GetOptions( + s => sub { $outputtype = 's' }, + m => sub { $outputtype = 'm' }, + d => sub { undef $out }, + 'v|version' => sub { warn "$0 version $VERSION\n"; exit 0 }, + 'h|help' => \&usage, +); + +@ARGV or usage; + +foreach (@ARGV) { + warn "Using root $_...\n"; + my $d = MDV::Distribconf::Build->new($_); + $d->load or do { + warn "Can't load configuration from $_\n"; + next; + }; + if ($outputtype eq 's') { + $d->write_hdlists($out) or warn "Can't write hdlists file\n"; + } else { + $d->write_mediacfg($out) or warn "Can't write media.cfg file\n"; + } +} + +__END__ + +=head1 NAME + +dumpdistribconf - dumps a media.cfg from a distribution tree + +=head1 SYNOPSIS + + dumpdistribconf [-s|-m] [-d] path [path...] + +=head1 DESCRIPTION + +This will dump a F (or an F file if B<-s> is +specified) from a Mandriva Linux distribution tree. By default +it's dumped to the standard output. + +=head1 OPTIONS + +=over 4 + +=item B<-s> + +Dump an F file. + +=item B<-m> + +Dump a F file (default) + +=item B<-d> + +Instead of writing to the standard output, write to a file placed in the +standard location (e.g. F<< /media/media_info/media.cfg >>). + +=back + +=cut diff --git a/editdistrib b/editdistrib new file mode 100755 index 0000000..a143810 --- /dev/null +++ b/editdistrib @@ -0,0 +1,256 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use MDV::Distribconf::Build; +use Term::ReadLine; +use Text::ParseWords; +use Getopt::Long; + +(our $VERSION) = q$Id: editdistrib 12165 2005-11-16 14:28:27Z rgarciasuarez $ =~ /(\d+\.\d+)/; + +my @distribs; + +# list of available commands +# name => coderef + +my $commands = { + + load => sub { + my ($param, @path) = @_; + if ($param->{current}{help}) { + print "unload path1 [path2 [...]]\n"; + print "Try to load distrib configuration from given path\n"; + return; + } + foreach (@path) { + my $dbuild = MDV::Distribconf::Build->new($_); + $dbuild->load() or do { + print STDERR "Can't load distrib from $_\n"; + next; + }; + push(@distribs, $dbuild); + } + }, + + unload => sub { + my ($param, @ids) = @_; + if ($param->{current}{help}) { + print "unload ID1 [ID2 [...]]\n"; + print "Unload tree\n"; + return; + } + my @new; + foreach my $id (0 .. $#distribs) { + grep { $id == $_ } @ids and next; + push(@new, $distribs[$id]); + } + @distribs = @new; + $param->{selected} = undef; + }, + + list => sub { + my ($param) = @_; + if ($param->{current}{help}) { + print "list current load distrib tree\n"; + return; + } + foreach (0 .. $#distribs) { + my $d = $distribs[$_]; + printf "%3d %s\n", $_, $d->getpath(undef, "root"); + } + }, + + show => sub { + my ($param) = shift(@_); + local @ARGV = @_; + GetOptions( + 'm=s' => \my @medias, + 'a' => \my $allmedia, + ); + + if ($param->{current}{help}) { + print "show [-m medianame [-m ...]] [-a] value\n"; + print "show a value for each distrib\n"; + print " -a list a value for all media\n"; + print " -m show the value only for given media\n"; + print "Default action is to give the global value\n"; + return; + } + + foreach (@{$param->{distrib}}) { + my $d = $distribs[$_]; + printf "%3d %s\n", $_, $d->getpath(undef, "root"); + my $m; + + if ($allmedia) { + $m = [ $d->listmedia ]; + } elsif (@medias) { + $m = \@medias; + } + if ($m) { + foreach my $med (@{$m}) { + foreach my $var (@ARGV) { + printf + " %10s [%10s]: %s\n", + $var, + $med ? $med : "(global)", + $d->getvalue($med, $var); + } + } + } else { + foreach my $var (@ARGV) { + printf + " %10s: %s\n", + $var, + $d->getvalue(undef, $var); + } + } + } + }, + + addmedia => sub { + my ($param, $m, $name) = @_; + foreach (@{$param->{distrib}}) { + $distribs[$_]->setvalue($m); + } + }, + + delmedia => sub { + my ($param, $m) = @_; + foreach (@{$param->{distrib}}) { + $distribs[$_]->delvalue($m); + } + }, + + sel => sub { + my $param = shift(@_); + local @ARGV = @_; + GetOptions( + e => \my $empty, + ); + if ($empty) { + $param->{selected} = {}; + } + + foreach (@ARGV) { + if ($_ < 0 || $_ > $#distribs) { + next; + } + $param->{selected}{$_} = 1; + } + }, + + set => sub { + my $param = shift(@_); + local @ARGV = @_; + GetOptions( + 'm=s' => \my $media, + 'a' => \my $allmedia, + ); + my ($var, $val) = @ARGV; + foreach my $d (@{$param->{distrib}}) { + if ($media || $allmedia) { + foreach my $m ($distribs[$d]->listmedia) { + if ($media && $m ne $media) { + next; + } + $distribs[$d]->setvalue($m, $var, $val); + } + } else { + $distribs[$d]->setvalue(undef, $var, $val); + } + } + }, + + del => sub { + my $param = shift(@_); + local @ARGV = @_; + GetOptions( + 'm=s' => \my $media, + 'a' => \my $allmedia, + ); + my ($var) = @ARGV; + foreach my $d (@{$param->{distrib}}) { + if ($media || $allmedia) { + foreach my $m ($distribs[$d]->listmedia) { + if ($media && $m ne $media) { + next; + } + $distribs[$d]->delvalue($m, $var); + } + } else { + $distribs[$d]->delvalue(undef, $var); + } + } + }, + + check => sub { + my $param = shift(@_); + local @ARGV = @_; + GetOptions( + ); + + foreach my $d (@{$param->{distrib}}) { + printf "%3d %s\n", $d, $distribs[$d]->getpath(undef, "root"); + $distribs[$d]->check(); + } + }, + + save => sub { + my $param = shift(@_); + local @ARGV = @_; + GetOptions( + ); + foreach my $d (@{$param->{distrib}}) { + $distribs[$d]->write_mediacfg(); + } + }, + + quit => sub { exit(0) }, + version => sub { print "version: $VERSION\n" }, + +}; + + +$commands->{load}->(undef, @ARGV); + +my $session_param; +my $term = new Term::ReadLine 'editdistrib'; +my $prompt = '(all) > '; +while ( defined ($_ = $term->readline($prompt)) ) { + local @ARGV = &shellwords($_); + my $command = shift(@ARGV); + $command ||= ""; # avoid undef + + if ($command eq 'help') { + print "Available commands:\n "; + print join(' ', sort keys %$commands) . "\n"; + next; + } + + $session_param->{current} = {}; + my $gl = new Getopt::Long::Parser config => [ qw(pass_through no_auto_abbrev) ]; + $gl->getoptions( + all => \$session_param->{current}{all}, + 'h|help' => \$session_param->{current}{help}, + ); + + + if ($session_param->{current}{all} || ! $session_param->{selected}) { + @{$session_param->{distrib}} = (0 .. $#distribs); + } else { + @{$session_param->{distrib}} = keys %{$session_param->{selected}}; + } + + if (defined($commands->{$command})) { + $commands->{$command}->($session_param, @ARGV); + } else { + print STDERR "Unknown command '$command'\n"; + } + + $prompt = sprintf("(%s) > ", + $session_param->{selected} ? join(' ', sort keys %{$session_param->{selected}}) : "all"); + +} diff --git a/gendistrib b/gendistrib new file mode 100755 index 0000000..a480f62 --- /dev/null +++ b/gendistrib @@ -0,0 +1,396 @@ +#!/usr/bin/perl + +(our $VERSION) = q(Id: gendistrib 20724 2006-11-30 13:13:27Z rafael ) =~ /(\d+)/; + +use strict; +use MDV::Distribconf::Build; +use Getopt::Long; + +sub usage () { + require Pod::Usage; + Pod::Usage::pod2usage({ '-verbose' => 1 }); + exit 0; +} + +my %urpmfiles; +my %old; + +GetOptions( + 'blind' => \my $blind, + 'clean' => \my $clean, + 'hdlists=s' => \$urpmfiles{hdlists}, + 'help|h' => \&usage, + 'mediacfg=s' => \$urpmfiles{mediacfg}, + 'nobadrpm' => \my $nobadrpm, + 'noemptymedia' => \my $noemptymedia, + 'nomd5sum' => \my $nomd5sum, + 'skipmissingdir' => \my $skipmissingdir, + 's' => \my $nooutput, + 'v|version' => sub { warn "$0 version $VERSION\n"; exit 0 }, + +# old stuff + 'chkdep' => \$old{chkdep}, + 'compss=s' => \$old{compss}, + 'depslist=s' => \$old{depslist}, + 'noclean' => \$old{noclean}, + 'provides=s' => \$old{provides}, + 'headersdir=s' => \$old{headersdir}, + 'nomediainfo' => \$old{nomediainfo}, +); + +foreach (qw(chkdep compss depslist noclean headersdir provides nomediainfo)) { + $old{$_} and warn "--$_ is obsolete (not used anymore)\n"; +} + +@ARGV == 1 or usage(); +my ($root) = @ARGV; + +my $distrib = MDV::Distribconf::Build->new($root); + +$distrib->loadtree or die "$root does not seem to be a distribution tree\n"; + +if (defined($urpmfiles{mediacfg})) { + $distrib->parse_mediacfg($urpmfiles{mediacfg}) or die "Can't read $urpmfiles{mediacfg}\n"; +} elsif (defined($urpmfiles{hdlists})) { + $distrib->parse_hdlists($urpmfiles{hdlists}) or die "Can't read $urpmfiles{hdlists}\n"; +} else { + $distrib->parse_mediacfg || $distrib->parse_hdlists or die "Can't read the distrib config\n"; +} + +my $destinfodir = $distrib->getfullpath(undef, "infodir"); +$urpmfiles{version} = $distrib->getfullpath(undef, "VERSION"), + +# Error which are fatale +my @fatal = qw(SAME_INDEX); +push @fatal, 'MISSING_MEDIADIR' if !$skipmissingdir; +my @IGNORE = qw(MISSING_INDEX); +my @fatalerrors; # fatales error show at the end +$distrib->check(sub { + my %info = @_; + grep { $_ eq $info{errcode} } @IGNORE and next; + if (grep { $_ eq $info{errcode} } @fatal) { + push(@fatalerrors, "$info{level}: $info{message}"); + } else { + printf STDERR "$info{level}: $info{message}\n" unless $nooutput; + } + } +); + +if (@fatalerrors) { + printf STDERR <listmedia) { + my $path = $distrib->getfullpath($m, 'path'); + -d $path or next; # this has been checked earlier + + push @hdlists, { + media => $m, + dir => $distrib->getpath($m, 'path'), + path => $path, + descr => $distrib->getvalue($m, 'name'), + hdlist2 => $distrib->getfullpath($m, 'hdlist'), + synthesis2 => $distrib->getfullpath($m, 'synthesis'), + pubkey2 => $distrib->getfullpath($m, 'pubkey'), + hdlist => "$path/media_info/hdlist.cz", + synthesis => "$path/media_info/synthesis.hdlist" . $distrib->getvalue($m, 'synthesis-suffix'), + pubkey => "$path/media_info/pubkey", + noneedrebuild => $blind || $clean ? 0 : $distrib->check_index_sync($m, 'formedia'), + }; +} + +if (!-d $destinfodir) { + mkdir $destinfodir, 0755 + or die qq(Can't create directory "$destinfodir": $!\n); +} + +my $infodir = $distrib->getfullpath(undef, 'infodir'); + +foreach my $d ($infodir, map { "$_->{path}/media_info" } @hdlists) { + if (! -d $d) { + mkdir $d, 0755 or die qq(Can't create directory "$d": $!\n); + } +} + +foreach my $e (@hdlists) { + if ($e->{dir} =~ /%{ARCH}/) { + die "sorry, %{ARCH} not supported anymore\n"; + } + @{$e->{files}} = glob("$root/$e->{dir}/*.rpm") or do { + print STDERR "unable to find rpm files in $e->{dir}\n" unless $nooutput; + next; + }; +} + +if ($noemptymedia) { + if (grep { @{$_->{files}} == 0 } @hdlists) { + die "Empty media were found, stopping\n"; + } +} + +my $synthesis_filter = $distrib->getvalue(undef, 'synthesis-filter'); +my $xml_info_filter = $distrib->getvalue(undef, 'xml-info-filter'); +foreach my $e (grep { !$_->{noneedrebuild} } @hdlists) { + print STDERR qq(building hdlist & synthesis for medium "$e->{descr}"\n) unless $nooutput; + my $file_deps = "$destinfodir/file-deps"; + my $options = join(' ', + '--allow-empty-media', + $nooutput ? '--quiet' : (), + $clean ? '--clean' : (), + $nobadrpm ? '--no-bad-rpm' : (), + $nomd5sum ? "--no-md5sum" : (), + $distrib->getvalue($e->{media}, 'xml-info') ? '--xml-info' : (), + $synthesis_filter ? "--synthesis-filter \'$synthesis_filter\'" : (), + $xml_info_filter ? "--xml-info-filter \'$xml_info_filter\'" : (), + -e $file_deps ? "--file-deps $file_deps" : (), + ); + my $cmd = "genhdlist2 $options $e->{path}"; + print "running $cmd\n" unless $nooutput; + system($cmd) == 0 or die "$cmd failed\n"; +} + +foreach my $e (@hdlists) { + hdlist_alternate_location($e->{hdlist2}, $e->{hdlist}); + hdlist_alternate_location($e->{synthesis2}, $e->{synthesis}); + $e->{pubkey2} =~ s/ /_/g; # workaround MDV::Distribconf issue + hdlist_alternate_location($e->{pubkey2}, $e->{pubkey}); +} + +if (grep { ! $_->{noneedrebuild} } @hdlists) { + + if (-f $destinfodir . '/media.cfg') { + if (! -f "$destinfodir/hdlists" || + (stat($distrib->getfullpath(undef, 'infodir') . '/media.cfg'))[9] > + (stat($destinfodir . '/hdlists'))[9]) { + print STDERR "Write hdlists file\n" unless $nooutput; + $distrib->write_hdlists($destinfodir . '/hdlists') + or print STDERR "Can't write $destinfodir/hdlists file\n"; + } + } +} +if (grep { !$_->{noneedrebuild} } @hdlists) { + unlink "$destinfodir/MD5SUM"; #- safety cleaning + unless ($nomd5sum) { + # this MD5SUM is mostly obsolete, but is still needed up to 2007.1 + # (and even on cooker for existing urpmi.cfg) + my $md5sum = `cd $destinfodir ; /usr/bin/md5sum hdlist_* synthesis*`; + open my $md5sumfh, '>', "$destinfodir/MD5SUM" or die "Can't create $destinfodir/MD5SUM: $!\n"; + print $md5sumfh $md5sum; + } + + print STDERR "Calculating size of medias\n" unless $nooutput; + foreach my $e (@hdlists) { + my $size = 0; + foreach (@{$e->{files} || []}) { + $size += (stat($_))[7]; + } + my $blk = 1; + my $showsize = $size; + my @unit = (' ', qw(k m g)); + while (@unit) { + my $u = shift(@unit); + if ($size / $blk < 1) { + last; + } + $showsize = sprintf('%d%s', $size / $blk, $u); + $blk *= 1024; + } + $distrib->setvalue($e->{media}, 'size', $showsize); + } + + print STDERR "Rewriting media.cfg file\n" unless $nooutput; + $distrib->write_mediacfg($urpmfiles{mediacfg}); + + print STDERR "Building version file\n" unless $nooutput; + $distrib->write_version($urpmfiles{version}); +} + +sub hdlist_alternate_location { + my ($alternate, $main) = @_; + + if (! -e $main) { + print STDERR "missing $main, not creating alternate location $alternate\n"; + } elsif (-l $alternate && inode($alternate) == inode($main)) { + # ok + } else { + if (-l $alternate) { + print STDERR "bad alternate location " . readlink($alternate) . ", replacing it\n"; + unlink $alternate; + } elsif (-e $alternate) { + print STDERR "replacing existing plain file $alternate with a symlink\n"; + unlink $alternate; + } + print STDERR qq(link alternate location $alternate\n) unless $nooutput; + relative_symlink($main, $alternate); + } +} + +sub inode { + my ($f) = @_; + (stat($f))[1]; +} + +sub relative_symlink { + my ($src, $dest) = @_; + + # cleanup + foreach ($src, $dest) { + s!//!/!g; + s!/\./!/!g; + } + + my @src = split('/', $src); + my @dest = split('/', $dest); + pop @dest; + + while (@src && @dest && $src[0] eq $dest[0]) { + shift @src; + shift @dest; + } + symlink join('/', ('..') x @dest, @src), $dest; +} + +__END__ + +=head1 NAME + +gendistrib - generates a mirror tree for a distribution + +=head1 SYNOPSIS + + gendistrib [options] directory + +=head1 OPTIONS + +=over 4 + +=item --blind + +Always rebuild indexes, without checking whether it's needed. + +=item --clean + +Force rebuild of indexes from scratch. + +=item --hdlists file + +Path of the F file (defaults to F). This is +deprecated; if gendistrib finds a F file, it will use it and ignore +the F file unless this option is given. + +=item --mediacfg file + +Use the specified F file (defaults to F). + +=item --nobadrpm + +Don't abort when encountering bad rpms. + +=item --noemptymedia + +Stop and abort if an empty media is found. + +=item --nomd5sum + +Don't generate MD5SUM files. + +=item --skipmissingdir + +If a media dir is missing, ignore it instead of aborting. + +=item -s + +Silent mode. + +=back + +=head1 DESCRIPTION + +F is a tool that helps to generate the structure of a Mandriva +RPM repository, compatible with Mandriva tools (F, F, +etc.) + +=head2 General Structure of a Repository + +A typical repository, under a root directory F, has the following +structure: + + ROOT/ - media/ + |- contrib/ + | `- media_info/ + |- main/ + | `- media_info/ + `- media_info/ + +In this example, we have two media, called I
and I. The +RPMs packages are placed in the F
and F subdirectories. +Repository metadata is contained in the top-level F directory. +Per-media metadata are contained in the F
and +F subdirectories. + +=head2 Configuration of the distribution tree + +Before using F, you must create a file F +to describe your repository. (An empty file will work, but this isn't +recommended.) The syntax of this file is reminiscent of F<.ini> files. + +A first section C<[media_info]> contains global information about the +repository: + + [media_info] + version=2006.0 + branch=Cooker + arch=i586 + +Then, supply one section per media. + + [main] + hdlist=hdlist_main.cz + name=Main + +Here, the C parameter specifies what will be the name of the +hdlist file in the top-level F directory. C is a human +readable label for the media. + +=head2 Operation + +F should be passed the F directory as parameter. It will +then generate the hdlist and synthesis files and all other files needed +for proper repository operation. + +=head1 SEE ALSO + +genhdlist2(1), and MDV::Distribconf(3) for description of the format of the +F file. + +=head1 COPYRIGHT + +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 MandrakeSoft SA + +Copyright (C) 2005, 2006 Mandriva SA + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +=cut diff --git a/genhdlist-old b/genhdlist-old new file mode 100644 index 0000000..ec1e21e --- /dev/null +++ b/genhdlist-old @@ -0,0 +1,193 @@ +#!/usr/bin/perl + +(our $VERSION) = q$Id: genhdlist-old 246205 2008-09-22 07:58:49Z pixel $ =~ /(\d+\.\d+)/; + +use strict; +use URPM; +use URPM::Build; +use File::Find (); +use File::Path; +use Getopt::Long; +use Pod::Usage; +use File::Temp qw(tempdir); + +my ($nooutput, $nobadrpm, $md5sum, $subdir, $suffix, $dest) = (0, 0, 0, "", "", ""); +my $tmpdir_tpl = (-d "$ENV{HOME}/tmp" ? "$ENV{HOME}/tmp" : $ENV{TMPDIR} || "/tmp") . "/.build_hdlistXXXXX"; + +sub usage () { + pod2usage({ -verbose => 1 }); +} + +GetOptions( + 'dest=s' => \$dest, + 'help|h' => sub { usage(); exit 0 }, + list => \my $list, + nobadrpm => \$nobadrpm, + noclean => \my $noclean, + md5sum => \$md5sum, + norecursive => \my $norecursive, + s => \$nooutput, + 'subdir=s' => \$subdir, + 'suffix=s' => \$suffix, + 'v|version' => sub { warn "$0 version $VERSION\n"; exit 0 }, +); + +$list and die "--list is not handled anymore by urpmi, use hdlist/synthesis instead\n"; + +my $urpm = new URPM; +if ($subdir && $subdir !~ m{/$}) { $subdir .= '/' } +my $hdlist_base = "hdlist$suffix.cz"; +my $hdlist = $subdir . $hdlist_base; +my $synthesis_base = "synthesis.$hdlist_base"; +my $synthesis = $subdir . $synthesis_base; +my @dir = @ARGV ? @ARGV : ("."); + +grep { m!^/! } @dir and die "Directories to parse should be relative\n"; + +$dest and do { chdir $dest or die "Can't chdir in directory $dest\n" }; + +if ($subdir && !-e $subdir) { + mkdir $subdir + or die "Can't mkdir $subdir: $!n"; +} +if ($subdir) { + -d $subdir && -w _ && -x _ + or die "$subdir isn't a writable directory, bailing out\n"; +} +my $tmpdir = tempdir($tmpdir_tpl, CLEANUP => !$noclean); + +my @rpms; + +foreach my $dir (@dir) { + print "parsing $dir\n" unless $nooutput; + @rpms = (); + File::Find::find( + { + wanted => sub { + next if $norecursive && $File::Find::dir ne $dir; + if (/^.*\.rpm$/ && -f) { + push(@rpms, $File::Find::name); + } + }, + follow => 1, + }, $dir, + ); + $urpm->parse_rpms_build_headers( + dir => $tmpdir, + rpms => \@rpms, + dontdie => $nobadrpm, + silent => $nooutput, + packing => 1, + ); +} + +# create hdlist file +# No rpms, exit ! +#@{$urpm->{depslist}} or die "Nothing read, no file to write\n"; + +$urpm->build_hdlist( + start => 0, + end => $#{$urpm->{depslist}}, + dir => $tmpdir, + hdlist => $hdlist, + ratio => 9, +); + +# create synthesis file +$urpm->build_synthesis( + start => 0, + end => $#{$urpm->{depslist}}, + synthesis => $synthesis, +); + +if ($md5sum) { + my $m = qx(cd '$subdir' && /usr/bin/md5sum '$hdlist_base' '$synthesis_base'); + open my $f, '>', "${subdir}MD5SUM" or die "Can't write MD5SUM: $!\n"; + print $f $m; + close $f; +} + +__END__ + +=head1 NAME + +genhdlist-old - generates an hdlist and a synthesis file + +=head1 SYNOPSIS + + genhdlist-old [options] dir [dir...] + +=head1 OPTIONS + +=over 4 + +=item --dest dir + +Build indexes from this directory (that is, chdir's to this directory +before operation). + +=item --md5sum + +Generates an MD5SUM file. + +=item --nobadrpm + +Do not abort on bad rpms. + +=item --noclean + +Keep cache files. + +=item --norecursive + +Do not recurse in subdirectories. + +=item -s + +Silent mode. + +=item --subdir directory + +Write indexes in this subdirectory. + +=item --suffix SUFFIX + +Put a suffix on list/hdlist/synthesis names (for example, C<_main>). + +=back + +=head1 DESCRIPTION + +F is used to generate an hdlist and an associated synthesis file +from a set of RPM packages found in the directories passed on the command-line. +By default it will put the hdlist and synthesis files in the current directory. + +If the option B<--list> is given, it will also generate a F file containing +the relative paths to all RPMs. Consequently, the paths to the directories +passed to F must be relative ones. + +=head1 SEE ALSO + +genhdlist2(1), gendistrib(1), parsehdlist(1) + +=head1 COPYRIGHT + +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 MandrakeSoft SA + +Copyright (C) 2005, 2006 Mandriva SA + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +=cut diff --git a/genhdlist2 b/genhdlist2 new file mode 100644 index 0000000..0a64296 --- /dev/null +++ b/genhdlist2 @@ -0,0 +1,647 @@ +#!/usr/bin/perl + +(our $VERSION) = q(Id: genhdlist2 20460 2006-11-23 13:19:11Z pixel ) =~ /(\d+\.\d+)/; + +use URPM; +use MDV::Packdrakeng; +use Getopt::Long; + +main(); + +sub usage () { + require Pod::Usage; + Pod::Usage::pod2usage({ '-verbose' => 1 }); +} + +sub main() { + my %options = ( + synthesis_filter => '.cz:gzip -9', + xml_info => 'auto', + xml_info_filter => '.lzma:lzma -5', + versioned => 'auto' + ); + + GetOptions( + 'clean' => \$options{no_incremental}, + 'no-bad-rpm' => \$options{no_bad_rpm}, + 'no-md5sum' => \$options{no_md5sum}, + 'no-clean-old-rpms' => \$options{no_clean_old_rpms}, + 'only-clean-old-rpms' => \$options{only_clean_old_rpms}, + 'nolock' => \$options{nolock}, + 'no-hdlist' => \$options{no_hdlist}, + 'allow-empty-media' => \$options{allow_empty_media}, + 'file-deps=s' => \$options{file_deps}, + 'synthesis-filter=s' => \$options{synthesis_filter}, + 'xml-info!' => \$options{xml_info}, + 'xml-info-filter=s' => \$options{xml_info_filter}, + 'versioned!' => \$options{versioned}, + 'media_info-dir=s' => \$options{media_info_dir}, + 'h|help' => sub { usage(); exit 0 }, + 'q|quiet' => sub { $options{verbose} = -1 }, + 'v|verbose' => sub { $options{verbose}++ }, + 'version' => sub { warn "$0 version $VERSION\n"; exit 0 }, + ); + + @ARGV == 1 or usage(); + my $rpms_dir = $ARGV[0]; + + $options{no_incremental} ||= $options{no_hdlist}; + + do_it($rpms_dir, %options); +} + +# global vars +my ($no_bad_rpm, $verbose); +my $tmp_header; + +sub do_it { + my ($rpms_dir, %options) = @_; + + $verbose = $options{verbose}; + $no_bad_rpm = $options{no_bad_rpm}; + + my @rpms = grep { /\.rpm$/ } all($rpms_dir); + @rpms || $options{allow_empty_media} or die "no *.rpm found in $rpms_dir (use --allow-empty-media?)\n"; + + my $media_info_dir = $options{media_info_dir} || "$rpms_dir/media_info"; + -e $media_info_dir || mkdir $media_info_dir or die "Can't mkdir $media_info_dir: $!n"; + -d $media_info_dir && -w _ && -x _ or die "$media_info_dir isn't a writable directory, bailing out\n"; + + my ($synthesis_suffix, $synthesis_filter) = split(":", $options{synthesis_filter}); + my ($xml_info_suffix, $xml_info_filter) = split(":", $options{xml_info_filter}); + + my $synthesis = "$media_info_dir/synthesis.hdlist$synthesis_suffix"; + my $lock_file = "$media_info_dir/UPDATING"; + $tmp_header = "$media_info_dir/.tmp-header"; + + my $lock = !$options{nolock} && global_lock($lock_file); + + $SIG{INT} = sub { + unlink "$media_info_dir/hdlist.cz.tmp", "$synthesis.tmp", $tmp_header; + unlink $lock_file if $lock; + exit 1; + }; + END { unlink $lock_file if $lock } + + + #- handle old-rpms.lst + my $old_rpms_file = "$media_info_dir/old-rpms.lst"; + my $old_rpms = read_old_rpms_lst($old_rpms_file, $options{nolock}); + if ($old_rpms) { + filter_out_old_rpms($rpms_dir, $old_rpms, \@rpms); + if (!$options{no_clean_old_rpms}) { + clean_old_rpms($rpms_dir, $old_rpms); + write_old_rpms_lst($old_rpms, $old_rpms_file); + } + } + $options{only_clean_old_rpms} and return; + + + my %rpms_todo = map { /(.*)\.rpm/ => 1 } @rpms; + + my $urpm = new URPM; + + read_file_deps($urpm, $options{file_deps}) if $options{file_deps}; + + if ($options{xml_info} eq 'auto') { + $options{xml_info} = -e "$media_info_dir/info.xml$xml_info_suffix"; + } + my @xml_media_info = $options{xml_info} ? ('info', 'files', 'changelog') : (); + + build($urpm, \%rpms_todo, $media_info_dir, $rpms_dir, \@xml_media_info, $options{no_incremental}, $options{no_hdlist}, $xml_info_suffix, $xml_info_filter); + build_synthesis($urpm, "$synthesis.tmp", $synthesis_filter); + + if (1) { + my @media_info_files = ($options{no_hdlist} ? () : 'hdlist.cz', + "synthesis.hdlist$synthesis_suffix", map { "$_.xml$xml_info_suffix" } @xml_media_info); + foreach my $name (@media_info_files) { + print "replacing $media_info_dir/$name with $name.tmp\n" if $verbose >= 0; + rename "$media_info_dir/$name.tmp", "$media_info_dir/$name" or die "rename $media_info_dir/$name failed: $!\n"; + } + my $existed = remove_versioned_media_info($media_info_dir); + if ($options{versioned} && ($options{versioned} ne 'auto' || $existed)) { + push @media_info_files, generate_versioned_media_info($media_info_dir, \@media_info_files); + } + generate_md5sum($media_info_dir, \@media_info_files) if !$options{no_md5sum}; + } +} + +sub lock_file { + my ($file) = @_; + #- avoid putting a require on Fcntl ':flock' (which is perl and not perl-base). + my ($LOCK_EX, $LOCK_NB) = (2, 4); + + print "locking $file\n" if $verbose > 0; + open(my $lock, '>', $file) or die "lock_file $file failed\n"; + flock $lock, $LOCK_EX|$LOCK_NB or return; + $lock; +} +sub global_lock { + my ($file) = @_; + my $lock = lock_file($file) or die "another genhdlist2 already running\n"; + $lock; +} + +sub read_file_deps { + my ($urpm, $file_deps) = @_; + + -r $file_deps or die "can't read $file_deps: $?\n"; + + foreach (cat_($file_deps)) { + chomp; + # mark that this "file provide" is required: + $urpm->{provides}{$_} = undef; + } +} + +sub build { + my ($urpm, $rpms_todo, $media_info_dir, $rpms_dir, $xml_media_info, $b_no_incremental, $b_no_hdlist, $xml_info_suffix, $xml_info_filter) = @_; + + my $hdlist = "$media_info_dir/hdlist.cz"; + + my $out_hdlist; + if (!$b_no_hdlist) { + $out_hdlist = MDV::Packdrakeng->new( + archive => "$hdlist.tmp", + compress => "gzip", + uncompress => "gzip -d", + comp_level => 9, + ) or die "Can't create archive"; + } + + my $out = { + hdlist => $out_hdlist, + map { $_ => open_xml_filter("$media_info_dir/$_.xml${xml_info_suffix}.tmp", $xml_info_filter) } @$xml_media_info + }; + + if (-e $hdlist && !$b_no_incremental) { + print "filtering $hdlist into hdlist.cz.tmp\n" if $verbose >= 0; + filter_existing_hdlist($urpm, $rpms_todo, $hdlist, $out); + } + + add_new_rpms_to_hdlist($urpm, $rpms_todo, $out, $rpms_dir); + + close_xml($out->{$_}) foreach @$xml_media_info; +} + +sub filter_existing_hdlist { + my ($urpm, $rpms_todo, $in_hdlist, $out) = @_; + + if ($urpm->parse_hdlist($in_hdlist, packing => 1, callback => sub { + my (undef, $pkg) = @_; + my $fullname = $pkg->fullname; + if (delete $rpms_todo->{$fullname}) { + print "keeping $fullname\n" if $verbose > 1; + add_pkg($out, $pkg); + 1; # do keep in memory + } else { + print "removing $fullname\n" if $verbose > 0; + 0; # don't keep in memory + } + })) { + # ok + } else { + my $nb = @{$urpm->{depslist}}; + print STDERR "parse_hdlist has failed, keeping $nb headers successfully parsed\n" if $verbose >= 0; + } +} + +sub add_new_rpms_to_hdlist { + my ($urpm, $rpms_todo, $out, $rpms_dir) = @_; + + my @rpms = keys %$rpms_todo or return; + if ($verbose >= 0) { + if (@rpms > 100 || $verbose == 0) { + print "adding ", int(@rpms), " new rpms not available in existing hdlist\n"; + } else { + print "adding ", join(' ', @rpms), "\n"; + } + } + + foreach (@rpms) { + print "adding $_\n" if $verbose > 1; + + my $rpm = "$rpms_dir/$_.rpm"; + my ($id, undef) = $urpm->parse_rpm($rpm); + if (!defined $id) { + if ($no_bad_rpm) { + print STDERR "bad rpm $rpm\n"; + next; + } else { + die "bad rpm $rpm\n"; + } + } + my $pkg = $urpm->{depslist}[$id]; + add_pkg($out, $pkg); + + $pkg->pack_header; # for synthesis + } +} + +sub open_xml_filter { + my ($file, $xml_info_filter) = @_; + + open(my $F, "| $xml_info_filter > $file") or die "can't open $file\n"; + binmode $F, ':utf8'; + print $F qq(\n); + print $F ""; + $F; +} + +sub close_xml { + my ($F) = @_; + print $F "\n"; +} + +sub ensure_utf8 { + if (utf8::is_utf8($_[0])) { + utf8::valid($_[0]) and return; + + utf8::encode($_[0]); #- disable utf8 flag + utf8::upgrade($_[0]); + } else { + utf8::decode($_[0]); #- try to set utf8 flag + utf8::valid($_[0]) and return; + warn "do not know what to with $_[0]\n"; + } +} + +sub encode_xml { + my ($s) = @_; + $s =~ s/&/&/g; + $s =~ s//>/g; + ensure_utf8($s); + $s; +} +sub encode_xml_attribute { + my ($s) = @_; + + $s = encode_xml($s); + + $s =~ /'/ or return qq('$s'); + $s =~ /"/ or return qq("$s"); + + # argh!! hum replacing " with '' :-D + $s =~ s/"/''/g; + print STDERR qq(encoding xml attribute: replacing " with '' for $s\n); + + qq("$s"); +} + +sub add_pkg { + my ($out, $pkg) = @_; + my $fullname = $pkg->fullname; + + if ($out->{hdlist}) { + add_pkg_header($out->{hdlist}, $pkg, $fullname); + } + + if ($out->{files}) { + my $F = $out->{files}; + print $F qq(\n); + print $F encode_xml($_), "\n" foreach $pkg->files; + print $F qq(); + } + + if ($out->{info}) { + my $F = $out->{info}; + print $F qq($_) foreach qw(sourcerpm url license); + print $F qq(>\n); + print $F encode_xml($pkg->description), "\n"; + print $F qq(); + } + + if ($out->{changelog} && $pkg->changelog_name) { + my $F = $out->{changelog}; + my @ti = $pkg->changelog_time; + my @na = $pkg->changelog_name; + my @te = $pkg->changelog_text; + + print $F qq(\n); + foreach (0 .. $#ti) { + print $F qq(\n); + print $F qq(), encode_xml($na[$_]), qq(\n); + print $F qq(), encode_xml($te[$_]), qq(\n); + print $F qq(); + } + print $F qq(); + } +} + +sub add_pkg_header { + my ($out, $pkg, $fullname) = @_; + { + open(my $fh, ">", $tmp_header); + $pkg->build_header(fileno $fh); + } + { + open(my $fh, "<", $tmp_header); + $out->add_virtual('f', $fullname, $fh); + } + unlink $tmp_header; +} + +sub build_synthesis { + my ($urpm, $synthesis, $synthesis_filter) = @_; + # for compatibility with perl-URPM < 1.48 (ie < 2007.1), + # creating empty synthesis by hand. This is only needed to run on old distros + if (@{$urpm->{depslist}} == 0) { + open(my $hsynth, "| $synthesis_filter > $synthesis"); + close $hsynth or die "Can't create empty synthesis $synthesis: $!\n"; + } else { + $urpm->build_synthesis( + start => 0, + end => $#{$urpm->{depslist}}, + synthesis => $synthesis, + filter => $synthesis_filter, + ) or die "build_synthesis failed (disk full?)\n"; + } +} + +sub remove_versioned_media_info { + my ($media_info_dir) = @_; + + my @l = grep { /^\d{8}-\d{6}-/ && -l "$media_info_dir/$_" } all($media_info_dir) or return; + + foreach (@l) { + print "removing previous versioned $_\n" if $verbose > 0; + unlink "$media_info_dir/$_"; + } + 1; +} + +sub generate_versioned_media_info { + my ($media_info_dir, $media_info_files) = @_; + + require POSIX; + my $version = POSIX::strftime("%Y%m%d-%H%M%S", gmtime); + + map { + print "creating versioned media_info $_: $version-$_\n" if $verbose > 0; + symlink $_, "$media_info_dir/$version-$_"; + "$version-$_"; + } @$media_info_files; +} + +sub generate_md5sum { + my ($media_info_dir, $media_info_files) = @_; + print "updating $media_info_dir/MD5SUM\n" if $verbose >= 0; + my $m = `cd '$media_info_dir' ; /usr/bin/md5sum @$media_info_files`; + unlink "$media_info_dir/MD5SUM"; # ensure no hard link is used + open(my $f, '>', "$media_info_dir/MD5SUM") or die "Can't write MD5SUM: $!\n"; + print $f $m; +} + + +################################################################################ +sub read_old_rpms_lst { + my ($file, $nolock) = @_; + + -e $file or return; + + my $lock = !$nolock && lock_file("$file.lock") + or $verbose >= 0 && print "lock failed, we simply won't write the modified file\n"; + + require Config::IniFiles; + my $lst = Config::IniFiles->new('-file' => $file) or die "invalid $file\n"; + { lst => $lst, lock => $lock }; +} + +sub write_old_rpms_lst { + my ($old_rpms, $file) = @_; + + if ($old_rpms->{lock}) { + sleep 10; + $old_rpms->{lst}->WriteConfig($file); # no need to use a temp file + rename since WriteConfig is doing so + + print "unlocking $file.lock\n" if $verbose > 0; + close(delete $old_rpms->{lock}); + unlink "$file.lock"; + } else { + # we don't have the lock, so don't write + } +} + +sub clean_old_rpms { + my ($rpms_dir, $old_rpms) = @_; + + my $lst = $old_rpms->{lst}; + foreach my $pkg ($lst->Parameters('Remove')) { + my $keep; + if (-e "$rpms_dir/$pkg") { + my $date = $lst->val('Remove', $pkg); + if ($date >= time()) { + $keep = 1; + print "[OLD-RPMS] keeping $pkg (it is scheduled for " . $lst->GetParameterComment('Remove', $pkg) . "# )\n" if $verbose > 0; + } else { + print "[OLD-RPMS] removing rpm file $pkg (was scheduled for " . $lst->GetParameterComment('Remove', $pkg) . "# )\n" if $verbose >= 0; + unlink "$rpms_dir/$pkg"; + } + } else { + print "[OLD-RPMS] $pkg already removed\n" if $verbose >= 0; + } + $keep or $old_rpms->{lst}->delval('Remove', $pkg); + } +} + +# 'Remove' + +sub clean_old_rpms { + my ($rpms_dir, $old_rpms) = @_; + + _apply_date_old_rpms($rpms_dir, $old_rpms, 'Remove', 'OLD-RPMS', sub { + my ($pkg, $date) = @_; + print "[OLD-RPMS] removing rpm file $pkg (was scheduled for $date)\n" if $verbose >= 0; + unlink "$rpms_dir/$pkg"; + }); +} + +sub _apply_date_old_rpms { + my ($rpms_dir, $old_rpms, $section, $section_tag, $do_it) = @_; + + my $lst = $old_rpms->{lst}; + foreach my $pkg ($lst->Parameters($section)) { + my $keep; + if (-e "$rpms_dir/$pkg") { + my $date = $lst->val($section, $pkg); + if ($date >= time()) { + $keep = 1; + print "[$section_tag] keeping $pkg (it is scheduled for " . $lst->GetParameterComment($section, $pkg) . "# )\n" if $verbose > 0; + } else { + $do_it->($pkg, $verbose >= 0 && $lst->GetParameterComment($section, $pkg)); + } + } else { + print "[$section_tag] $pkg already removed\n" if $verbose >= 0; + } + $keep or $old_rpms->{lst}->delval($section, $pkg); + } +} + +sub filter_out_old_rpms { + my ($rpms_dir, $old_rpms, $rpms_list) = @_; + + _apply_date_old_rpms($rpms_dir, $old_rpms, 'Keep-in-hdlist', 'KEEP-IN-HDLIST', sub { + my ($pkg, $date) = @_; + print "[KEEP-IN-HDLIST] removing $pkg from hdlist (was scheduled for $date)\n" if $verbose >= 0; + }); + + my %old = map { $_ => 1 } $old_rpms->{lst}->Parameters('Remove'); + delete $old{$_} foreach $old_rpms->{lst}->Parameters('Keep-in-hdlist'); + + @$rpms_list = grep { !$old{$_} } @$rpms_list; +} +################################################################################ + + +sub cat_ { my @l = map { my $F; open($F, '<', $_) ? <$F> : () } @_; wantarray() ? @l : join '', @l } + +sub all { + my $d = shift; + + local *F; + opendir F, $d or return; + my @l = grep { $_ ne '.' && $_ ne '..' } readdir F; + closedir F; + + @l; +} + +__END__ + +=head1 NAME + +genhdlist2 - generates an hdlist and a synthesis file + +=head1 SYNOPSIS + + genhdlist2 [options] dir + +=head1 OPTIONS + +=over 4 + +=item B<--clean> + +Do not use existing hdlist.cz, build hdlist from scratch. + +=item B<--file-deps> + +Use the given file to know which file dependencies are used by other media. +Here is an example of use: + + package foo in medium contrib requires /bin/bar + package bar in medium main has file /bin/bar + + % echo /bin/bar > media/media_info/file-deps + % genhdlist2 --file-deps media/media_info/file-deps media/main/release + + without file-deps, media/main/release/media_info/synthesis.hdlist.cz would not provide /bin/bar. + +This option is not needed for file-deps inside a same medium. + +=item B<--no-md5sum> + +Do not generate MD5SUM file. + +=item B<--no-bad-rpm> + +Do not abort on bad rpms. + +=item B<--no-clean-old-rpms> + +Take into account old-rpms.lst, but don't remove rpms from repository + +=item B<--only-clean-old-rpms> + +F will only clean old rpms from repository, it will not update +hdlist/synthesis. + +=item B<--nolock> + +Don't lock the media (can be useful when locks fail, eg NFS). Since the lock +is used to verify no other genhdlist2 process is running on the same media, it +is a dangerous option. + +=item B<--allow-empty-media> + +By default if no *.rpm files are found, F will exit on error. +To allow building empty media, use this option. + +=item B<--media_info-dir> I + +Write hdlist/synthesis in this directory instead of /media_info +(mostly useful for debugging) + +=item B<--synthesis-filter SUFFIX:FILTER> + +Use SUFFIX for filename suffix and filter through FILTER for compression. +By default genhdlist2 will use '.cz:gzip -9'. + +=item B<--xml-info> + +Force to generate xml info. By default genhdlist2 will only regenerate xml info files already there in media_info/ + +=item B<--xml-info-filter SUFFIX:FILTER> + +Use SUFFIX for filename suffix and filter through FILTER for compression. +By default genhdlist2 will use '.lzma:lzma -5'. + +=item B<--versioned> + +Force to generate versioned media info. + +=item B<-v> + +Be verbose. Use one more B<-v> to get even more verbose. + +=item B<--quiet> + +Quiet mode. + +=back + +=head1 DESCRIPTION + +F is used to generate an hdlist and an associated synthesis file +from a set of RPM packages found in the directory passed on the command-line. +It will put the hdlist and synthesis files in media_info/ sub-directory. + +Without B<--clean>, F is incremental, ie it will use existing +media_info/hdlist.cz: it will first remove package headers for packages that +are no more in the directory. It will then add new packages. This makes an +important assumption: name-version-release-arch is enough to uniquely +indentify a package. So if foo-1-1 is in hdlist, genhdlist2 will keep it and +not bother verifying if it really is the same package. + +Contrary to F, F doesn't have to be work on all media +at once. For this, it assumes no inter media file dependencies are used. If +you still have inter media file dependencies, you can use option +B<--file-deps>. + +=head1 SEE ALSO + +gendistrib(1), parsehdlist(1) + +=head1 COPYRIGHT + +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 MandrakeSoft SA + +Copyright (C) 2005, 2006, 2007 Mandriva SA + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +=cut diff --git a/packdrake b/packdrake new file mode 100755 index 0000000..caab623 --- /dev/null +++ b/packdrake @@ -0,0 +1,189 @@ +#!/usr/bin/perl + +use strict; +use packdrake; + +#- general information. +my $default_size = 400000; +my $default_ratio = 6; + +sub usage () { + eval { + require Pod::Usage; + Pod::Usage->import(); + pod2usage({ -verbose => 1 }); + }; + exit 0; +} + +my ($file, $mode, $dir, $size, $method, $compress, $uncompress, $ratio, $quiet); +my @nextargv = (\$file); +my @list; + +#- some quite useful error message. +my $error_mode = "packdrake: choose only --build, --extract, --list or --cat\n"; +foreach (@ARGV) { + /^--help$/ and usage(); + /^--version$/ and do { print "$0 version $packdrake::VERSION\n"; exit 0 }; + /^--build$/ and do { $mode and die $error_mode; $mode = "build"; @nextargv = (\$file); next }; + /^--extract$/ and do { $mode and die $error_mode; $mode = "extract"; @nextargv = (\$file, \$dir); next }; + /^--list$/ and do { $mode and die $error_mode; $mode = "list"; @nextargv = (\$file); next }; + /^--cat$/ and do { $mode and die $error_mode; $mode = "cat"; @nextargv = (\$file); next }; + /^--dir$/ and do { push @nextargv, \$dir; next }; + /^--size$/ and do { push @nextargv, \$size; next }; + /^--method$/ and do { push @nextargv, \$method; next }; + /^--compress$/ and do { push @nextargv, \$compress; next }; + /^--uncompress$/ and do { push @nextargv, \$uncompress; next }; + /^--quiet$/ and $quiet = 1, next; + /^-(.*)$/ and do { foreach (split //, $1) { + /[1-9]/ and do { $ratio = $_; next }; + /b/ and do { $mode and die $error_mode; $mode = "build"; @nextargv = (\$file); next }; + /x/ and do { $mode and die $error_mode; $mode = "extract"; @nextargv = (\$file, \$dir); next }; + /l/ and do { $mode and die $error_mode; $mode = "list"; @nextargv = (\$file); next }; + /c/ and do { $mode and die $error_mode; $mode = "cat"; @nextargv = (\$file); next }; + /d/ and do { push @nextargv, \$dir; next }; + /s/ and do { push @nextargv, \$size; next }; + /m/ and do { push @nextargv, \$method; next }; + die qq(packdrake: unknown option "-$1", check usage with --help\n) } next }; + $mode =~ /extract|list|cat/ + or @nextargv + or die qq(packdrake: unknown option "$_", check usage with --help\n); + my $ref = shift @nextargv; + $ref ? ($$ref = $_) : push @list, $_; + $mode ||= "list"; +} + +#- examine and lauch. +$file or die "packdrake: no archive filename given, check usage with --help\n"; +$size ||= $default_size; +$ratio ||= $default_ratio; + +unless ($method) { + $file =~ /\.cz$/ and $method = "gzip"; + $file =~ /\.cz2$/ and $method = "bzip2"; +} + +$compress ||= "$method -$ratio"; +$uncompress ||= "$method -d"; + +$mode =~ /extract/ && !$dir && !@list and ($mode, @list) = ('list', $file); +for ($mode) { + /build/ and do { packdrake::build_archive(\*STDIN, $dir, $file, $size, $compress, $uncompress); last }; + /extract/ and do { + my $packer = new packdrake($file, quiet => $quiet); + $packer->extract_archive($dir, @list); + last; + }; + /list/ and do { packdrake::list_archive($file, @list); last }; + /cat/ and do { packdrake::cat_archive($file, @list); last }; + die "packdrake: internal error, unable to select right mode?\n"; +} + +__END__ + +=head1 NAME + +packdrake - manipulates archives + +=head1 SYNOPSIS + + packdrake [options] [--build|-b] file + packdrake [options] [--extract|-x] file + packdrake [options] [--list|-l] file + packdrake [options] [--cat|-c] file + +=head1 OPTIONS + +=over 2 + +=item --build file + +Build mode; build archive file with filenames given on standard input. +Sub-options are: + +=over 4 + +=item -1 .. -9 + +Select appropriate compression ratio. + +=item --dir srcdir + +set source directory where to search files, C<.> by default. + +=item --size + +Set maximum chunk size, 400000 by default. + +=item --method + +Select standard compression command method. +Default is deduced from the archive filename (gzip or bzip2). + +=item --compress cmd + +Select compression command (e.g. C). + +=back + +=item --extract file dir file1...fileN + +Extracts archive file to specified directory. +Specific files to extract may be given on the command line. + +=over 4 + +=item --uncompress cmd + +Select uncompression command. + +=back + +=item --list file + +Lists contents of archive. + +=item --cat file + +Dumps archive to standard output. + +=item General options + +=over 4 + +=item --quiet + +Silent mode. + +=back + +=back + +=head1 DESCRIPTION + +Packdrake is a simple indexed archive builder and extractor using +standard compression methods. + +=head1 SEE ALSO + +L + +=head1 COPYRIGHT + +Copyright (C) 2000-2005 Mandrakesoft. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +=cut diff --git a/packdrake.pm b/packdrake.pm new file mode 100644 index 0000000..365200a --- /dev/null +++ b/packdrake.pm @@ -0,0 +1,182 @@ +##- Nanar +##- +##- This program is free software; you can redistribute it and/or modify +##- it under the terms of the GNU General Public License as published by +##- the Free Software Foundation; either version 2, or (at your option) +##- any later version. +##- +##- This program is distributed in the hope that it will be useful, +##- but WITHOUT ANY WARRANTY; without even the implied warranty of +##- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +##- GNU General Public License for more details. +##- +##- You should have received a copy of the GNU General Public License +##- along with this program; if not, write to the Free Software +##- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +##- $Id: packdrake.pm 12160 2005-11-15 12:42:54Z rgarciasuarez $ + +package packdrake; + +use strict; +use warnings; +use MDV::Packdrakeng; +our @ISA = qw(MDV::Packdrakeng); +our $VERSION = $MDV::Packdrakeng::VERSION; + +sub new { + my ($class, $file, %options) = @_; + my $pack = MDV::Packdrakeng->open( + %options, + archive => $file + ) or do { print STDERR "Can't open $file: $!\n"; return undef }; + #- rebless + bless($pack, $class); +} + +sub extract_archive { + my ($pack, $dir, @files) = @_; + @files or return; + $pack->extract($dir, @files); +} + +sub extract_all_archive { + my ($pack, $dir) = @_; + my ($d, $f, $l) = $pack->getcontent(); + $pack->extract($dir, @$d, @$f, @$l); +} + +sub list_archive { + foreach my $archive (@_) { + my $pack = MDV::Packdrakeng->open(archive => $archive) or do { + print STDERR "Can't open $archive: $!\n"; + next; + }; + $pack->list(); + } +} + +sub build_archive { + my ($listh, $dir, $archive, $size, $compress, $uncompress) = @_; + my ($comp_level) = $compress =~ m/ -(\d)(?:\s|$)/; + $compress =~ s/ -\d(\s|$)/$1/; + my $pack = MDV::Packdrakeng->new( + archive => $archive, + compress => $compress, + uncompress => $uncompress, + block_size => $size, + comp_level => $comp_level, + ) or return; + while (my $line = <$listh>) { + chomp($line); + $pack->add($dir, $line) or return; + } + 1; +} + +sub cat_archive { + foreach my $archive (@_) { + my $pack = MDV::Packdrakeng->open(archive => $archive) or do { + print STDERR "Can't open $archive: $!\n"; + next; + }; + (undef, my $files, undef) = $pack->getcontent(); + foreach (@$files) { + $pack->extract_virtual(\*STDOUT, $_); + } + } +} + +1; + +__END__ + +=head1 NAME + +packdrake - Simple Archive Extractor/Builder + +This module is a compatibility wrapper around the new MDV::Packdrakeng module. + +=head1 SYNOPSIS + + require packdrake; + + packdrake::cat_archive("/export/media/media_info/hdlist.cz", + "/export/media/media_info/hdlist2.cz"); + packdrake::list_archive("/tmp/modules.cz2"); + + my $packer = new packdrake("/tmp/modules.cz2"); + $packer->extract_archive("/tmp", "file1.o", "file2.o"); + + my $packer = packdrake::build_archive + (\*STDIN, "/lib/modules", "/tmp/modules.cz2", + 400000, "bzip2", "bzip2 -d"); + my $packer = packdrake::build_archive + (\*STDIN, "/export/media/media_info/hdlist.cz", + 400000, "gzip -9", "gzip -d"); + +=head1 DESCRIPTION + +C is a very simple archive extractor and builder used by Mandrakesoft. + +=head1 FUNCTIONS + +=over + +=item B + +Open the packdrake archive $file and return a packdrake object. +Return undef on failure. + +=item B<< packdrake->extract_archive($dir, @files) >> + +Extract files list into the specified directory. + +=item B<< packdrake->extract_all_archive($dir) >> + +Extract all files into the specified directory. + +=item B + +List files packed into achives given. + +=item B + +Build a new archive: +- $input is a file handle to find file list to pack +- $dir is the directory based where file are located +- $archive is the archive filename to create +- $blocksize is the size of compressed block +- $compress is the program to use to compress data +- $uncompress is the program to use to uncompress data + +=item B + +Dump data to STDOUT of files given as parameters, or all files if no files are +specified + +=back + +=head1 SEE ALSO + +L. + +=head1 COPYRIGHT + +Copyright (C) 2000-2004 Mandrakesoft + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +=cut diff --git a/patches/faster-gendistrib.patch b/patches/faster-gendistrib.patch new file mode 100644 index 0000000..5e3ea93 --- /dev/null +++ b/patches/faster-gendistrib.patch @@ -0,0 +1,112 @@ +Olivier Thauvin +This patch is a tried to make gendistrib faster, but I suspect +it to be unsafe and have wrong effect on generate files. +Until review, keeping it in mind. +Index: gendistrib +=================================================================== +--- gendistrib (révision 57544) ++++ gendistrib (copie de travail) +@@ -127,8 +127,7 @@ + Fix this erreur in media.cfg and retry: + + EOF +- print STDERR "$_\n" foreach(@fatalerrors); +- print STDERR "\n"; ++ print "$_\n" foreach(@fatalerrors); + exit(1); + } + +@@ -230,35 +229,36 @@ + }; + } + +-if (grep { ! $_->{noneedrebuild} } @hdlists) { + foreach my $e (@hdlists) { +- print STDERR "parsing rpm files in directory $e->{dir}\n" unless $nooutput; +- # NOYET open(my $hnsynth, "|gzip --best > $e->{synthesis}.yaml"); +- my @headers = $urpm->parse_rpms_build_headers( +- dir => $headers_dir, +- rpms => $e->{files}, +- dontdie => $dontdie, +- silent => $nooutput, +-# NOTYET callback => sub { ++ if (!$blind) { ++ printf(STDERR "hdlist need to be rebuild for media $e->{descr}: %s\n", ++ $e->{noneedrebuild} ? "No" : "Yes") unless $nooutput; ++ } ++ ++# NOTYET open(my $hnsynth, "|gzip --best > $e->{synthesis}.yaml"); ++ my $callback => sub { + # NOTYET my ($urpmc, $id, %options) = @_; + # NOTYET print $hnsynth $urpmc->{depslist}[$id]->queryformat($yamlout); + # NOTYET $urpmc->{depslist}[$id]->pack_header; +-# NOTYET }, ++ }; ++ if (!$e->{noneedrebuild} && !$blind) { ++ print STDERR "parsing rpm files in directory $e->{dir}\n" unless $nooutput; ++ @{$e->{headers}} = $urpm->parse_rpms_build_headers( ++ dir => $headers_dir, ++ rpms => $e->{files}, ++ dontdie => $dontdie, ++ silent => $nooutput, ++# callback => $callback, + ); +- # NOTYET close($hnsynth); +- # TODO if @headers is empty ? +- $e->{headers} = \@headers; + +- if (!$blind) { +- print STDERR "Checking if hdlist need to be rebuild for media $e->{descr}\n" unless $nooutput; +- if($e->{noneedrebuild}) { +- print "No\n" unless $nooutput; +- } else { +- print "Yes\n" unless $nooutput; +- } ++ } else { ++ $urpm->parse_hdlist( ++ $e->{hdlist}, ++ #callback => $callback, ++ ); + } ++ # NOTYET close($hnsynth); + } +-} + + if ($noemptymedia) { + foreach my $e (@hdlists) { +@@ -273,19 +273,30 @@ + #- temporary file where to build hdlists + my $temp_hdlist = mktemp("$tempdir/hdlistXXXXX"); + ++my $callback = sub {}; ++ + if (grep { ! $_->{noneedrebuild} } @hdlists) { + foreach my $e (@hdlists) { +- if (@{$e->{headers} || []}) { # We have rpms in this media +- +- print STDERR qq(parsing headers for "$e->{descr}"\n) unless $nooutput; +- my ($start, $end) = $urpm->parse_headers(dir => $headers_dir, ++ my ($start, $end); ++ if ($e->{noneedrebuild} && !$blind) { ++ $urpm->parse_hdlist( ++ $e->{hdlist}, ++ #callback => $callback, ++ ); ++ } else { ++ ($start, $end) = $urpm->parse_headers( ++ dir => $headers_dir, + headers => $e->{headers}, + dontdie => $dontdie, +- silent => $nooutput); ++ silent => $nooutput, ++ #callback => $callback, ++ ); ++ } + + print STDERR "computing deps\n" unless $nooutput; + $urpm->compute_deps; + ++ if (@{$e->{headers} || []}) { # We have rpms in this media + # No media change, nothing to write + if (!$e->{noneedrebuild}) { + diff --git a/t/01packdrake.t b/t/01packdrake.t new file mode 100755 index 0000000..58d4fd1 --- /dev/null +++ b/t/01packdrake.t @@ -0,0 +1,66 @@ +#!/usr/bin/perl + +# $Id: 01packdrake.t 223440 2007-06-10 22:09:58Z nanardon $ + +use strict; +use Test::More tests => 7; +use Digest::MD5; + +use_ok('packdrake'); + +-d "test" || mkdir "test" or die "Can't create directory test"; + +my $coin = q{ + ___________ +< Coin coin > + ----------- + \ ,~~. + \ __( o ) + `--'==( ___/) + ( ( . / + \ '-' / + ~'`~'`~'`~'`~ +}; + +sub clean_test_files { + -d "test" or return; + system("rm -fr $_") foreach (glob("test/*")); +} + +clean_test_files(); + +mkdir "test/dir" or die "Can't create 'test/dir'"; +open(my $fh, "> test/file") or die "Can't create 'test/file'"; +print $fh $coin; +close $fh; + +symlink("file", "test/link") or die "Can't create symlink 'test/link': $!\n"; + +open($fh, "> test/list") or die "can't open 'test/list': $!\n"; +print($fh join("\n", qw(dir file link)) ."\n"); +close($fh); + +open(my $listh, "< test/list") or die "can't read 'test/list': $!\n"; +ok(packdrake::build_archive( + $listh, + "test", + "packtest.cz", + 400_000, + "gzip -9", + "gzip -d", +), "Creating a packdrake archive"); +close($listh); + +clean_test_files(); + +my $pack = packdrake->new("packtest.cz"); +ok($pack->extract_archive("test", qw(dir file link)), "Extracting files from archive"); + +ok(open($fh, "test/file"), "Opening extract file"); +sysread($fh, my $data, 1_000); +ok($data eq $coin, "data successfully restored"); +ok(-d "test/dir", "dir successfully restored"); +ok(readlink("test/link") eq "file", "symlink successfully restored"); + +clean_test_files(); + -- cgit v1.2.1