Alexey:
This is your patch reworked slightly. See what you think.
On Jun 16, 2008, at 4:36 AM, Jeff Johnson wrote:
> 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: 16-Jun-2008
> 10:36:53
> Branch: HEAD Handle: 2008061608365201
>
> Modified files:
> rpm CHANGES
> rpm/build files.c
>
> Log:
> - fix: RPMTAG_SIZE is incorrect with %exclude and %ghost
> directives
> (Alexey Tourbin<at@altlinux.ru>).
>
> Summary:
> Revision Changes Path
> 1.2416 +2 -0 rpm/CHANGES
> 1.321 +30 -32 rpm/build/files.c
>
> ______________________________________________________________________
> ______
>
> patch -p0 <<'@@ .'
> Index: rpm/CHANGES
>
> ======================================================================
> ======
> $ cvs diff -u -r1.2415 -r1.2416 CHANGES
> --- rpm/CHANGES 15 Jun 2008 09:21:08 -0000 1.2415
> +++ rpm/CHANGES 16 Jun 2008 08:36:52 -0000 1.2416
> @@ -1,5 +1,7 @@
>
> 5.1.0 -> 5.2a0:
> + - jbj: fix: RPMTAG_SIZE is incorrect with %exclude and %
> ghost directives
> + (Alexey Tourbin<at@altlinux.ru>).
> - jbj: fix: Install-Size: spewage in Kb, not bytes. everone
> gotta be different.
> - jbj: permit *.deb syntax as arbitrary tags.
> - jbj: add *.deb format dependency tag header extensions.
> @@ .
> patch -p0 <<'@@ .'
> Index: rpm/build/files.c
>
> ======================================================================
> ======
> $ cvs diff -u -r1.320 -r1.321 files.c
> --- rpm/build/files.c 2 Apr 2008 20:52:52 -0000 1.320
> +++ rpm/build/files.c 16 Jun 2008 08:36:53 -0000 1.321
> @@ -1601,15 +1601,6 @@
> /*@=moduncon =noeffectuncon @*/
> sxfn = _free(sxfn);
>
> - ui32 = fl->totalFileSize;
> - he->tag = RPMTAG_SIZE;
> - he->t = RPM_UINT32_TYPE;
> - he->p.ui32p = &ui32;
> - he->c = 1;
> - he->append = 1;
> - xx = headerPut(h, he, 0);
> - he->append = 0;
> -
> if (_rpmbuildFlags & 4) {
> (void) rpmlibNeedsFeature(h, "PayloadFilesHavePrefix", "4.0-1");
> (void) rpmlibNeedsFeature(h, "CompressedFileNames", "3.0.4-1");
> @@ -1713,7 +1704,37 @@
> if (isSrc)
> fi->fmapflags[i] |= IOSM_FOLLOW_SYMLINKS;
>
> + if (S_ISREG(flp->fl_mode)) {
> + int bingo = 1;
> + /* Hard links need be tallied only once. */
> + if (flp->fl_nlink > 1) {
> + FileListRec jlp = flp + 1;
> + int j = i + 1;
> + for (; (unsigned)j < fi->fc; j++, jlp++) {
> + if (!S_ISREG(jlp->fl_mode))
> + continue;
> + if (flp->fl_nlink != jlp->fl_nlink)
> + continue;
> + if (flp->fl_ino != jlp->fl_ino)
> + continue;
> + if (flp->fl_dev != jlp->fl_dev)
> + continue;
> + bingo = 0; /* don't tally hardlink yet. */
> + break;
> + }
> + }
> + if (bingo)
> + fl->totalFileSize += flp->fl_size;
> + }
> }
> +
> + ui32 = fl->totalFileSize;
> + he->tag = RPMTAG_SIZE;
> + he->t = RPM_UINT32_TYPE;
> + he->p.ui32p = &ui32;
> + he->c = 1;
> + xx = headerPut(h, he, 0);
> +
> /*@-compdef@*/
> if (fip)
> *fip = fi;
> @@ -1946,27 +1967,6 @@
> flp->flags = fl->currentFlags;
> flp->specdFlags = fl->currentSpecdFlags;
> flp->verifyFlags = fl->currentVerifyFlags;
> -
> - /* Hard links need be counted only once. */
> - if (S_ISREG(flp->fl_mode) && flp->fl_nlink > 1) {
> - FileListRec ilp;
> - for (i = 0; i < fl->fileListRecsUsed; i++) {
> - ilp = fl->fileList + i;
> - if (!S_ISREG(ilp->fl_mode))
> - continue;
> - if (flp->fl_nlink != ilp->fl_nlink)
> - continue;
> - if (flp->fl_ino != ilp->fl_ino)
> - continue;
> - if (flp->fl_dev != ilp->fl_dev)
> - continue;
> - break;
> - }
> - } else
> - i = fl->fileListRecsUsed;
> -
> - if (!(flp->flags & RPMFILE_EXCLUDE) && S_ISREG(flp->fl_mode) &&
> i >= fl->fileListRecsUsed)
> - fl->totalFileSize += flp->fl_size;
> }
>
> fl->fileListRecsUsed++;
> @@ -2758,8 +2758,6 @@
> #endif
> flp->langs = xstrdup("");
>
> - fl.totalFileSize += flp->fl_size;
> -
> if (! (flp->uname && flp->gname)) {
> rpmlog(RPMLOG_ERR, _("Bad owner/group: %s\n"), diskURL);
> rc = fl.processingFailed = 1;
> @@ .
> ______________________________________________________________________
> RPM Package Manager http://rpm5.org
> CVS Sources Repository rpm-cvs@rpm5.org
Received on Mon Jun 16 10:39:22 2008