[prev in list] [next in list] [prev in thread] [next in thread]
List: rpm-cvs
Subject: [CVS] RPM: rpm/ CHANGES rpm/tools/ rpmdigest.c
From: "Jeff Johnson" <jbj () rpm5 ! org>
Date: 2008-06-23 23:52:42
Message-ID: 20080623235242.C1357348470 () rpm5 ! org
[Download RAW message or body]
RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 24-Jun-2008 01:52:42
Branch: HEAD Handle: 2008062323524200
Modified files:
rpm CHANGES
rpm/tools rpmdigest.c
Log:
- rpmdigest: pull in mtreeCwalk() for 0install dir args tree spewage.
Summary:
Revision Changes Path
1.2436 +1 -0 rpm/CHANGES
2.6 +119 -23 rpm/tools/rpmdigest.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.2435 -r1.2436 CHANGES
--- rpm/CHANGES 23 Jun 2008 20:52:50 -0000 1.2435
+++ rpm/CHANGES 23 Jun 2008 23:52:42 -0000 1.2436
@@ -1,5 +1,6 @@
5.1.0 -> 5.2a0:
+ - jbj: rpmdigest: pull in mtreeCwalk() for 0install dir args tree spewage.
- jbj: rpmdigest: achieve 0install manifest spewage for file args.
- jbj: rpmdigest: refactor to prepare for 0install manifest spewage.
- jbj: rpmrepo: put a --stats stopwatch on the mmap digest cost as well.
@@ .
patch -p0 <<'@@ .'
Index: rpm/tools/rpmdigest.c
============================================================================
$ cvs diff -u -r2.5 -r2.6 rpmdigest.c
--- rpm/tools/rpmdigest.c 23 Jun 2008 20:52:51 -0000 2.5
+++ rpm/tools/rpmdigest.c 23 Jun 2008 23:52:42 -0000 2.6
@@ -19,7 +19,12 @@
};
struct rpmdc_s {
- enum dcFlags_e flags;
+ int ftsoptions; /*!< Global Fts(3) traversal options. */
+ FTS * t; /*!< Global Fts(3) traversal data. */
+ FTSENT * p; /*!< Current node Fts(3) traversal data. */
+ struct stat sb; /*!< Current node stat(2) data. */
+
+ enum dcFlags_e flags; /*!< rpmdc control bits. */
uint32_t algo; /*!< default digest algorithm. */
uint32_t dalgo; /*!< digest algorithm. */
/*@observer@*/ /*@null@*/
@@ -28,7 +33,6 @@
size_t digestlen;
const char * fn;
FD_t fd;
- struct stat sb;
int (*parse) (rpmdc dc);
const char * (*print) (rpmdc dc, int rc);
const char * ofn; /*!< output file name */
@@ -42,6 +46,7 @@
unsigned char buf[BUFSIZ];
ssize_t nb;
int ix;
+
size_t ncomputed; /*!< no. of digests computed. */
size_t nchecked; /*!< no. of digests checked. */
size_t nmatched; /*!< no. of digests matched. */
@@ -211,6 +216,7 @@
size_t nb = 0;
char _mtime[32];
char _size[32];
+ const struct stat * st = &dc->sb;
const char * _bn;
/* Don't bother formatting if noone cares. */
@@ -218,10 +224,10 @@
return NULL;
snprintf(_mtime, sizeof(_mtime), "%llu",
- (unsigned long long) dc->sb.st_mtime);
+ (unsigned long long) st->st_mtime);
_mtime[sizeof(_mtime)-1] = '\0';
snprintf(_size, sizeof(_size), "%llu",
- (unsigned long long)dc->sb.st_size);
+ (unsigned long long) st->st_size);
_size[sizeof(_size)-1] = '\0';
if ((_bn = strrchr(dc->fn, '/')) != NULL)
_bn++;
@@ -252,16 +258,29 @@
}
#endif
} else {
- *te++ = 'F';
- *te++ = ' ';
- te = stpcpy(te, dc->digest);
- *te++ = ' ';
- te = stpcpy(te, _mtime);
- *te++ = ' ';
- te = stpcpy(te, _size);
- *te++ = ' ';
- te = stpcpy(te, _bn);
- *te++ = '\n';
+ if (S_ISDIR(st->st_mode)) {
+ *te++ = 'D';
+ *te++ = ' ';
+ te = stpcpy(te, _mtime);
+ *te++ = ' ';
+ *te++ = '/';
+ te = stpcpy(te, _bn);
+ *te++ = '\n';
+ } else if (S_ISREG(st->st_mode) || S_ISLNK(st->st_mode)) {
+ if (S_ISLNK(st->st_mode))
+ *te++ = 'S';
+ else
+ *te++ = (st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)) ? 'X' : 'F';
+ *te++ = ' ';
+ te = stpcpy(te, dc->digest);
+ *te++ = ' ';
+ te = stpcpy(te, _mtime);
+ *te++ = ' ';
+ te = stpcpy(te, _size);
+ *te++ = ' ';
+ te = stpcpy(te, _bn);
+ *te++ = '\n';
+ }
}
*te = '\0';
@@ -402,6 +421,89 @@
return rc;
}
+static int
+rpmdcVisitF(rpmdc dc)
+ /*@modifies dc @*/
+{
+ int rc = 0;
+ int xx;
+
+ if ((xx = rpmdcInitFile(dc)) != 0)
+ rc = xx;
+ else {
+ if ((xx = rpmdcCalcFile(dc)) != 0)
+ rc = xx;
+ if ((xx = rpmdcFiniFile(dc)) != 0)
+ rc = xx;
+ }
+ return rc;
+}
+
+#ifdef NOTYET
+static int
+rpmdcCWalk(rpmdc dc)
+{
+ char *const * paths = dc->paths;
+ int ftsoptions = dc->ftsoptions;
+ int rval = 0;
+
+ dc->t = Fts_open(paths, ftsoptions, dsort);
+ if (dc->t == NULL) {
+ fprintf(stderr, "Fts_open: %s", strerror(errno));
+ return -1;
+ }
+
+ while ((dc->p = Fts_read(dc->t)) != NULL) {
+#ifdef NOTYET
+ int indent = 0;
+ if (MF_ISSET(INDENT))
+ indent = dc->p->fts_level * 4;
+ if (rpmdcCheckExcludes(dc->p->fts_name, dc->p->fts_path)) {
+ (void) Fts_set(dc->t, dc->p, FTS_SKIP);
+ continue;
+ }
+#endif
+ switch(dc->p->fts_info) {
+ case FTS_D:
+#ifdef NOTYET
+ if (!MF_ISSET(DIRSONLY))
+ (void) printf("\n");
+ if (!MF_ISSET(NOCOMMENT))
+ (void) printf("# %s\n", dc->p->fts_path);
+ (void) rpmdcVisitD(dc);
+ rpmdcVisitF(dc);
+ /*@switchbreak@*/ break;
+#endif
+ case FTS_DP:
+#ifdef NOTYET
+ if (!MF_ISSET(NOCOMMENT) && (dc->p->fts_level > 0))
+ (void) printf("%*s# %s\n", indent, "", dc->p->fts_path);
+ (void) printf("%*s..\n", indent, "");
+ if (!MF_ISSET(DIRSONLY))
+ (void) printf("\n");
+ /*@switchbreak@*/ break;
+#endif
+ case FTS_DNR:
+ case FTS_ERR:
+ case FTS_NS:
+ (void) fprintf(stderr, "%s: %s: %s\n", __progname,
+ dc->p->fts_path, strerror(dc->p->fts_errno));
+ /*@switchbreak@*/ break;
+ default:
+#ifdef NOTYET
+ if (!MF_ISSET(DIRSONLY))
+#endif
+ rpmdcVisitF(dc);
+ /*@switchbreak@*/ break;
+ }
+ }
+ (void) Fts_close(dc->t);
+ dc->p = NULL;
+ dc->t = NULL;
+ return rval;
+}
+#endif
+
static int rpmdcLoadManifests(rpmdc dc)
/*@globals h_errno, fileSystem, internalState @*/
/*@modifies dc, h_errno, fileSystem, internalState @*/
@@ -557,19 +659,12 @@
xx = rpmdcLoadManifests(dc);
av = dc->paths;
}
- dc->ix = 0;
+ dc->ix = 0;
if (av != NULL)
while ((dc->fn = *av++) != NULL) {
- /* XXX TODO: instantiate verify digests for all identical paths. */
- if ((xx = rpmdcInitFile(dc)) != 0) {
+ if ((xx = rpmdcVisitF(dc)) != 0)
rc = xx;
- } else {
- if ((xx = rpmdcCalcFile(dc)) != 0)
- rc = xx;
- if ((xx = rpmdcFiniFile(dc)) != 0)
- rc = xx;
- }
dc->ix++;
}
@@ -579,6 +674,7 @@
__progname, dc->nfailed, dc->ncomputed);
if (dc->ofd) {
+ /* Print the output spewage digest for 0install format manifests. */
if (F_ISSET(dc, 0INSTALL)) {
static int asAscii = 1;
char *t;
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic