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

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  j...@rpm5.org
  Module: rpm                              Date:   09-Dec-2009 04:55:35
  Branch: HEAD                             Handle: 2009120903553302

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmts.c

  Log:
    - rpmts: take checkpoints beroe and after --rebuilddb.

  Summary:
    Revision    Changes     Path
    1.3188      +1  -0      rpm/CHANGES
    2.178       +16 -7      rpm/lib/rpmts.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3187 -r1.3188 CHANGES
  --- rpm/CHANGES       8 Dec 2009 21:20:34 -0000       1.3187
  +++ rpm/CHANGES       9 Dec 2009 03:55:33 -0000       1.3188
  @@ -1,5 +1,6 @@
   
   5.2b1 -> 5.3a1
  +    - jbj: rpmts: take checkpoints beroe and after --rebuilddb.
       - jbj: rpmdb: do in-place rebuilddb, opt-in for now.
       - jbj: rpmdb: lazily create non-existent secondary indices.
       - jbj: rpmdb: consolidate primary key swabbing to network order.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmts.c
  ============================================================================
  $ cvs diff -u -r2.177 -r2.178 rpmts.c
  --- rpm/lib/rpmts.c   7 Dec 2009 17:53:47 -0000       2.177
  +++ rpm/lib/rpmts.c   9 Dec 2009 03:55:35 -0000       2.178
  @@ -116,10 +116,8 @@
       ts->dbmode = dbmode;
       rc = rpmdbOpen(ts->rootDir, &ts->rdb, ts->dbmode, 0644);
       if (rc) {
  -     const char * dn;
  -     dn = rpmGetPath(ts->rootDir, "%{_dbpath}", NULL);
  -     rpmlog(RPMLOG_ERR,
  -                     _("cannot open Packages database in %s\n"), dn);
  +     const char * dn = rpmGetPath(ts->rootDir, "%{_dbpath}", NULL);
  +     rpmlog(RPMLOG_ERR, _("cannot open Packages database in %s\n"), dn);
        dn = _free(dn);
       }
       return rc;
  @@ -128,11 +126,22 @@
   int rpmtsRebuildDB(rpmts ts)
   {
       void * lock = rpmtsAcquireLock(ts);
  -    int rc = rpmtsOpenDB(ts, ts->dbmode);
  +    int rc;
  +
  +    rc = rpmtsOpenDB(ts, O_RDWR);
  +    if (rc) goto exit;
   
  -    if (rc == 0)
  -     rc = rpmdbRebuild(ts->rootDir,
  +    rc = rpmtxnCheckpoint(rpmtsGetRdb(ts));
  +    if (rc) goto exit;
  +
  +    rc = rpmdbRebuild(ts->rootDir,
                (!(rpmtsVSFlags(ts) & RPMVSF_NOHDRCHK) ? ts : NULL));
  +    if (rc) goto exit;
  +
  +    rc = rpmtxnCheckpoint(rpmtsGetRdb(ts));
  +    if (rc) goto exit;
  +
  +exit:
       lock = rpmtsFreeLock(lock);
       return rc;
   }
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to