RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   24-Mar-2008 21:00:18
  Branch: HEAD                             Handle: 2008032420001800

  Modified files:
    rpm/rpmio               rpmrepo.c

  Log:
    - jbj: rpmrepo: selectable compressed, including uncompressed, repo
    markup spew.

  Summary:
    Revision    Changes     Path
    1.15        +70 -20     rpm/rpmio/rpmrepo.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmrepo.c
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 rpmrepo.c
  --- rpm/rpmio/rpmrepo.c       24 Mar 2008 18:45:18 -0000      1.14
  +++ rpm/rpmio/rpmrepo.c       24 Mar 2008 20:00:18 -0000      1.15
  @@ -67,8 +67,6 @@
       const char * finaldir;
   /[EMAIL PROTECTED]@*/
       const char * olddir;
  -    const char * markup;
  -    const char * suffix;
   
       time_t mdtimestamp;
   
  @@ -80,8 +78,6 @@
       int changeloglimit;
       int uniquemdfilenames;
   
  -    int ftsoptions;
  -
   /[EMAIL PROTECTED]@*/
       const char * checksum;
   
  @@ -93,7 +89,12 @@
   /[EMAIL PROTECTED]@*/
       const char * package_dir;
   
  +    int ftsoptions;
       uint32_t algo;
  +    int compression;
  +    const char * markup;
  +    const char * suffix;
  +    const char * wmode;
   
       struct rpmrfile_s primary;
       struct rpmrfile_s filelists;
  @@ -240,7 +241,6 @@
       .finaldir        = "repodata",
       .olddir  = ".olddata",
       .markup  = "xml",
  -    .suffix  = "gz",
       .algo    = PGPHASHALGO_SHA1,
       .primary = {
        .type   = "primary",
  @@ -363,7 +363,7 @@
       const char ** dirp, ** filep;
       for (dirp = dirs; *dirp != NULL; dirp++) {
        for (filep = files; *filep != NULL; filep++) {
  -         fn = rpmGetPath(repo->outputdir, "/", *dirp, "/", *filep, ".", 
repo->markup, ".", repo->suffix, NULL);
  +         fn = rpmGetPath(repo->outputdir, "/", *dirp, "/", *filep, ".", 
repo->markup, (repo->suffix ? "." : NULL), repo->suffix, NULL);
            if (rpmioExists(fn, st)) {
                if (Access(fn, W_OK))
                    repo_error(1, _("Path must be writable: %s"), fn);
  @@ -574,12 +574,13 @@
       const char * spew = rfile->init;
       size_t nspew = strlen(spew);
       const char * fn =
  -        rpmGetPath(repo->outputdir, "/", repo->tempdir, "/", rfile->type, 
".", repo->markup, ".", repo->suffix, NULL);
  +        rpmGetPath(repo->outputdir, "/", repo->tempdir, "/", rfile->type, 
".", repo->markup, (repo->suffix ? "." : NULL), repo->suffix, NULL);
       /* XXX todo: fill in repo->pkgcount */
       size_t nb;
   
  -    rfile->fd = Fopen(fn, "w.gzdio");
  -    fdInitDigest(rfile->fd, repo->algo, 0);
  +    rfile->fd = Fopen(fn, repo->wmode);
  +    if (repo->algo > 0)
  +     fdInitDigest(rfile->fd, repo->algo, 0);
       /* XXX todo: fill in repo->pkgcount */
       nb = Fwrite(spew, 1, nspew, rfile->fd);
   if (_repo_debug)
  @@ -791,7 +792,10 @@
       if (!repo->quiet)
        repo_error(0, _("Saving %s.xml metadata"), rfile->type);
       nb = Fwrite(spew, 1, nspew, rfile->fd);
  -    fdFiniDigest(rfile->fd, repo->algo, &rfile->digest, NULL, asAscii);
  +    if (repo->algo > 0)
  +     fdFiniDigest(rfile->fd, repo->algo, &rfile->digest, NULL, asAscii);
  +    else
  +     rfile->digest = xstrdup("");
       xx = Fclose(rfile->fd);
       rfile->fd = NULL;
       return 0;
  @@ -905,6 +909,7 @@
       const char * tagname = NULL;
   
       switch (algo) {
  +    case PGPHASHALGO_NONE:   tagname = "none";       break;
       case PGPHASHALGO_MD5:    tagname = "md5";        break;
       /* XXX todo: should be "sha1" */
       case PGPHASHALGO_SHA1:   tagname = "sha";        break;
  @@ -942,7 +947,7 @@
       <checksum type=\"", spewalgo, "\">", rfile->digest, "</checksum>\n\
       <timestamp>", spewtime, "</timestamp>\n\
       <open-checksum type=\"",spewalgo,"\">", rfile->digest, 
"</open-checksum>\n\
  -    <location href=\"", repo->finaldir, "/", rfile->type, ".", repo->markup, 
".", repo->suffix, "\"/>\n\
  +    <location href=\"", repo->finaldir, "/", rfile->type, ".", repo->markup, 
(repo->suffix ? "." : ""), (repo->suffix ? repo->suffix : ""), "\"/>\n\
     </data>\n", NULL);
   }
   
  @@ -956,25 +961,25 @@
       const char * repopath =
                rpmGetPath(repo->outputdir, "/", repo->tempdir, NULL);
       const char * repofilepath =
  -             rpmGetPath(repopath, "/", repo->repomd.type, ".", repo->markup, 
".", repo->suffix, NULL);
  +             rpmGetPath(repopath, "/", repo->repomd.type, ".", repo->markup, 
(repo->suffix ? "." : NULL), repo->suffix, NULL);
       FD_t fd;
   
   if (_repo_debug)
   fprintf(stderr, "==> repoDoRepoMetadata(%p)\n", repo);
   
  -    fn = rpmGetPath(repo->outputdir, "/", repo->tempdir, "/", 
repo->other.type, ".", repo->markup, ".", repo->suffix, NULL);
  +    fn = rpmGetPath(repo->outputdir, "/", repo->tempdir, "/", 
repo->other.type, ".", repo->markup, (repo->suffix ? "." : NULL), repo->suffix, 
NULL);
       repo->other.ctime = rpmioCtime(fn);
       fn = _free(fn);
   
  -    fn = rpmGetPath(repo->outputdir, "/", repo->tempdir, "/", 
repo->filelists.type, ".", repo->markup, ".", repo->suffix, NULL);
  +    fn = rpmGetPath(repo->outputdir, "/", repo->tempdir, "/", 
repo->filelists.type, ".", repo->markup, (repo->suffix ? "." : NULL), 
repo->suffix, NULL);
       repo->filelists.ctime = rpmioCtime(fn);
       fn = _free(fn);
   
  -    fn = rpmGetPath(repo->outputdir, "/", repo->tempdir, "/", 
repo->primary.type, ".", repo->markup, ".", repo->suffix, NULL);
  +    fn = rpmGetPath(repo->outputdir, "/", repo->tempdir, "/", 
repo->primary.type, ".", repo->markup, (repo->suffix ? "." : NULL), 
repo->suffix, NULL);
       repo->primary.ctime = rpmioCtime(fn);
       fn = _free(fn);
   
  -    fd = Fopen(repofilepath, "w.gzdio");
  +    fd = Fopen(repofilepath, repo->wmode);
   assert(fd != NULL);
       spew = init_repomd;
       nspew = strlen(spew);
  @@ -1012,13 +1017,13 @@
           repons = reporoot.newNs('http://linux.duke.edu/metadata/repo', None)
           reporoot.setNs(repons)
           repopath = rpmGetPath(repo->outputdir, "/", repo->tempdir, NULL);
  -        repofilepath = rpmGetPath(repopath, "/", repo->repomd.file, NULL);
  +        repofilepath = rpmGetPath(repopath, "/", repo->repomd.type, ".", 
repo->markup, (repo->suffix ? "." : NULL), repo->suffix, NULL);
   
           sumtype = repo->sumtype
           workfiles = [(repo->other.file, 'other',),
                        (repo->filelists.file, 'filelists'),
                        (repo->primary.file, 'primary')]
  -        repoid='garbageid'
  +        repoid = "garbageid";
   
           if (repo->database) {
               if (!repo->quiet) repo_error(0, _("Generating sqlite DBs"));
  @@ -1191,7 +1196,7 @@
       const char ** filep;
   
       for (filep = files; *filep != NULL; filep++) {
  -     oldfile = rpmGetPath(output_old_dir, "/", *filep, ".", repo->markup, 
".", repo->suffix, NULL);
  +     oldfile = rpmGetPath(output_old_dir, "/", *filep, ".", repo->markup, 
(repo->suffix ? "." : NULL), repo->suffix, NULL);
        if (rpmioExists(oldfile, st)) {
            if (Unlink(oldfile))
                repo_error(1, _("Could not remove old metadata file: %s: %s"),
  @@ -1315,6 +1320,24 @@
       }
   }
   
  +/[EMAIL PROTECTED]@*/
  +static int compression = -1;
  +
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +static struct poptOption repoCompressionPoptTable[] = {
  + { "uncompressed", '\0', POPT_ARG_VAL,               &compression, 0,
  +     N_("don't compress"), NULL },
  + { "gzip", 'Z', POPT_ARG_VAL,                        &compression, 1,
  +     N_("use gzip compression"), NULL },
  + { "bzip2", '\0', POPT_ARG_VAL,                      &compression, 2,
  +     N_("use bzip2 compression"), NULL },
  +#ifdef       NOTYET
  + { "lzma", '\0', POPT_ARG_VAL,                       &compression, 3,
  +     N_("use lzma compression"), NULL },
  +#endif
  +    POPT_TABLEEND
  +};
  +
   /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
   static struct poptOption optionsTable[] = {
   /[EMAIL PROTECTED]@*/ /* FIX: cast? */
  @@ -1388,6 +1411,9 @@
        N_("print the version"), NULL },
   #endif
   
  + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, repoCompressionPoptTable, 0,
  +     N_("Available compressions:"), NULL },
  +
    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmioDigestPoptTable, 0,
        N_("Available digests:"), NULL },
   
  @@ -1429,7 +1455,31 @@
           break;
       }
   
  -    repo->algo = (rpmioDigestHashAlgo ? rpmioDigestHashAlgo : 
PGPHASHALGO_SHA1);
  +    repo->algo = (rpmioDigestHashAlgo >= 0 ? (rpmioDigestHashAlgo & 0xff)  : 
PGPHASHALGO_SHA1);
  +
  +    repo->compression = (compression >= 0 ? compression : 1);
  +    switch (repo->compression) {
  +    case 0:
  +     repo->suffix = NULL;
  +     repo->wmode = "w.ufdio";
  +     break;
  +    default:
  +     /[EMAIL PROTECTED]@*/
  +    case 1:
  +     repo->suffix = "gz";
  +     repo->wmode = "w9.gzdio";
  +     break;
  +    case 2:
  +     repo->suffix = "bz2";
  +     repo->wmode = "w9.bzdio";
  +     break;
  +#ifdef       NOTYET
  +    case 3:
  +     repo->suffix = "lzma";
  +     repo->wmode = "w.lzdio";
  +     break;
  +#endif
  +    }
   
       xx = argvAppend(&repo->directories, poptGetArgs(optCon));
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to