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:   22-Sep-2008 21:58:06
  Branch: HEAD                             Handle: 2008092219580501

  Modified files:
    rpm                     CHANGES
    rpm/lib                 psm.c

  Log:
    - jbj: fire triggers on directory paths.

  Summary:
    Revision    Changes     Path
    1.2563      +1  -0      rpm/CHANGES
    2.316       +46 -0      rpm/lib/psm.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2562 -r1.2563 CHANGES
  --- rpm/CHANGES       22 Sep 2008 18:10:24 -0000      1.2562
  +++ rpm/CHANGES       22 Sep 2008 19:58:05 -0000      1.2563
  @@ -1,5 +1,6 @@
   
   5.1.0 -> 5.2a0:
  +    - jbj: fire triggers on directory paths.
       - jbj: use rpmds iterator and getters for trigger->N parse side effects.
       - jbj: hdrfmt: triggerconds header extension display was incorrect.
       - jbj: expose rpmdsType() in rpmds ABI.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/psm.c
  ============================================================================
  $ cvs diff -u -r2.315 -r2.316 psm.c
  --- rpm/lib/psm.c     22 Sep 2008 18:10:24 -0000      2.315
  +++ rpm/lib/psm.c     22 Sep 2008 19:58:06 -0000      2.316
  @@ -1163,8 +1163,46 @@
   assert(fi->h != NULL);
   
       psm->countCorrection = 0;
  +
       ds = rpmdsNew(fi->h, tagno, scareMem);
  +    if ((ds = rpmdsInit(ds)) != NULL)
  +    while ((i = rpmdsNext(ds)) >= 0) {
  +     unsigned prev, instance;
  +     unsigned nvals;
  +     ARGint_t vals;
  +
  +     depName = _free(depName);
  +     depName = xstrdup(rpmdsN(ds));
  +
  +     mi = rpmtsInitIterator(ts, RPMTAG_TRIGGERNAME, depName, 0);
  +if (_jbj)
  +fprintf(stderr, "=== runTriggers(%p) sense 0x%x N %s depName %s mi %p\n", 
psm, psm->sense, N, depName, mi);
  +     nvals = argiCount(instances);
  +     vals = argiData(instances);
  +     if (nvals > 0)
  +         (void) rpmdbPruneIterator(mi, (int *)vals, nvals, 1);
  +
  +     prev = 0;
  +     while((triggeredH = rpmdbNextIterator(mi)) != NULL) {
  +         instance = rpmdbGetIteratorOffset(mi);
  +         if (prev == instance)
  +             continue;
  +         rc |= handleOneTrigger(psm, fi->h, triggeredH, numPackage);
  +         prev = instance;
  +         (void) argiAdd(&instances, -1, instance);
  +         (void) argiSort(instances, NULL);
  +     }
   
  +     mi = rpmdbFreeIterator(mi);
  +    }
  +    instances = argiFree(instances);
  +    depName = _free(depName);
  +    ds = rpmdsFree(ds);
  +
  +    /* If not limited to NEVRA triggers, try dirnames index. */
  +  if (tagno != RPMTAG_NAME) {
  +    tagno = RPMTAG_DIRNAMES;
  +    ds = rpmdsNew(fi->h, tagno, scareMem);
       if ((ds = rpmdsInit(ds)) != NULL)
       while ((i = rpmdsNext(ds)) >= 0) {
        unsigned prev, instance;
  @@ -1199,6 +1237,8 @@
       instances = argiFree(instances);
       depName = _free(depName);
       ds = rpmdsFree(ds);
  +  }
  +
       psm->countCorrection = countCorrection;
   
       return rc;
  @@ -1260,6 +1300,12 @@
        if (!(Flags & psm->sense))
                continue;
        
  +     /* If not limited to NEVRA triggers, use dirnames index for paths. */
  +     if (tagno != RPMTAG_NAME) {
  +         if (Name[0] == '/') 
  +             tagno = RPMTAG_BASENAMES;
  +     }
  +
        mi = rpmtsInitIterator(ts, tagno, Name, 0);
   if (_jbj)
   fprintf(stderr, "=== runImmedTriggers(%p) indices[%d] %d sense 0x%x N %s mi 
%p\n", psm, i, Ihe->p.ui32p[i], psm->sense, Name, mi);
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to