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

  Server: rpm5.org                         Name:   Bernhard Rosenkraenzer
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   12-Oct-2007 20:15:11
  Branch: HEAD                             Handle: 2007101219151001

  Modified files:
    rpm                     CHANGES
    rpm/build               files.c

  Log:
    Support multiple %files files
    
    Submitted by: bero

  Summary:
    Revision    Changes     Path
    1.1674      +1  -0      rpm/CHANGES
    1.266       +41 -33     rpm/build/files.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1673 -r1.1674 CHANGES
  --- rpm/CHANGES       12 Oct 2007 17:58:07 -0000      1.1673
  +++ rpm/CHANGES       12 Oct 2007 18:15:10 -0000      1.1674
  @@ -1,4 +1,5 @@
   4.5 -> 5.0:
  +    - bero: Support multiple %files files per package (%files -f f1,f2,...)
       - bero: Detect Ark Linux as RPMCANONVENDOR
       - rpm.org: have selinux disabled imply RPMTRANS_FLAG_NOCONTEXTS.
       - jbj: plug --rebuilddb memory leaks. headerGetExtension() est arrive!
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/files.c
  ============================================================================
  $ cvs diff -u -r1.265 -r1.266 files.c
  --- rpm/build/files.c 11 Oct 2007 19:44:21 -0000      1.265
  +++ rpm/build/files.c 12 Oct 2007 18:15:11 -0000      1.266
  @@ -2142,40 +2142,48 @@
       pkg->cpioList = NULL;
   
       if (pkg->fileFile) {
  -     const char *ffn;
  -     FILE * f;
  -     FD_t fd;
  -
  -     /* XXX W2DO? urlPath might be useful here. */
  -     if (*pkg->fileFile == '/') {
  -         ffn = rpmGetPath(pkg->fileFile, NULL);
  -     } else {
  -         /* XXX FIXME: add %{buildsubdir} */
  -         ffn = rpmGetPath("%{_builddir}/",
  -             (spec->buildSubdir ? spec->buildSubdir : "") ,
  -             "/", pkg->fileFile, NULL);
  -     }
  -     fd = Fopen(ffn, "r.fpio");
  -
  -     if (fd == NULL || Ferror(fd)) {
  -         rpmlog(RPMLOG_ERR,
  -             _("Could not open %%files file %s: %s\n"),
  -             ffn, Fstrerror(fd));
  -         return RPMRC_FAIL;
  -     }
  -     ffn = _free(ffn);
  -
  -     /[EMAIL PROTECTED]@*/ f = fdGetFp(fd); /[EMAIL PROTECTED]@*/
  -     if (f != NULL)
  -     while (fgets(buf, sizeof(buf), f)) {
  -         handleComments(buf);
  -         if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
  -             rpmlog(RPMLOG_ERR, _("line: %s\n"), buf);
  -             return RPMRC_FAIL;
  +     char *saveptr;
  +     char *filesFiles=strdup(pkg->fileFile);
  +     char *token=strtok_r(filesFiles, ",", &saveptr);
  +     do {
  +         const char *ffn;
  +         FILE * f;
  +         FD_t fd;
  +
  +         /* XXX W2DO? urlPath might be useful here. */
  +         if (*token == '/') {
  +             ffn = rpmGetPath(token, NULL);
  +         } else {
  +             /* XXX FIXME: add %{buildsubdir} */
  +             ffn = rpmGetPath("%{_builddir}/",
  +                 (spec->buildSubdir ? spec->buildSubdir : "") ,
  +                 "/", token, NULL);
            }
  -         appendStringBuf(pkg->fileList, buf);
  -     }
  -     (void) Fclose(fd);
  +
  +         fd = Fopen(ffn, "r.fpio");
  +
  +         if (fd == NULL || Ferror(fd)) {
  +             rpmlog(RPMLOG_ERR,
  +                 _("Could not open %%files file %s: %s\n"),
  +                 ffn, Fstrerror(fd));
  +             return RPMRC_FAIL;
  +         }
  +         ffn = _free(ffn);
  +
  +         /[EMAIL PROTECTED]@*/ f = fdGetFp(fd); /[EMAIL PROTECTED]@*/
  +         if (f != NULL) {
  +             while (fgets(buf, sizeof(buf), f)) {
  +                 handleComments(buf);
  +                 if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
  +                     rpmlog(RPMLOG_ERR, _("line: %s\n"), buf);
  +                     return RPMRC_FAIL;
  +                 }
  +                 appendStringBuf(token, buf);
  +             }
  +         }
  +         (void) Fclose(fd);
  +     } while(token=strtok_r(NULL, ",", &saveptr));
  +     free(filesFiles);
       }
       
       /* Init the file list structure */
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to