RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES build.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Sat 22 Sep 2007 - 19:40:54 CEST
Message-Id: <20070922174054.E00E834845E@rpm5.org>
  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:   22-Sep-2007 19:40:54
  Branch: HEAD                             Handle: 2007092218405400

  Modified files:
    rpm                     CHANGES build.c

  Log:
    - don't punish monkeys who insist on "My Widdle .spec" naming.
    - permit -ta spec file extraction from zip/lzo/lzma compressed balls.
    - add %{?__tar_wildcards} to pass Fedora automated regression tests.
    - use %{__tar} with -ta builds to assist morons who cannot set PATH.

  Summary:
    Revision    Changes     Path
    1.1637      +4  -0      rpm/CHANGES
    2.108       +20 -19     rpm/build.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1636 -r1.1637 CHANGES
  --- rpm/CHANGES	22 Sep 2007 16:06:05 -0000	1.1636
  +++ rpm/CHANGES	22 Sep 2007 17:40:54 -0000	1.1637
  @@ -1,4 +1,8 @@
   4.5 -> 5.0:
  +    - jbj: don't punish monkeys who insist on "My Widdle .spec" naming.
  +    - jbj: permit -ta spec file extraction from zip/lzo/lzma compressed balls.
  +    - jbj: add %{?__tar_wildcards} to pass Fedora automated regression tests.
  +    - jbj: use %{__tar} with -ta builds to assist morons who cannot set PATH.
       - jbj: add %{mkstemp: ... } macro primitive.
       - rse: fix po/POTFILES.in and tools/Makefile.am to reflect recent changes (fixes "make dist", too)
       - rpm.org: cleanup main() definitions in tests and tools
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build.c
  ============================================================================
  $ cvs diff -u -r2.107 -r2.108 build.c
  --- rpm/build.c	22 Sep 2007 16:06:05 -0000	2.107
  +++ rpm/build.c	22 Sep 2007 17:40:54 -0000	2.108
  @@ -126,48 +126,49 @@
   	const char * specDir;
   	char * tmpSpecFile;
   	char * cmd, * s;
  -	rpmCompressedMagic res = COMPRESSED_OTHER;
  -	/*@observer@*/ static const char *zcmds[] =
  -		{ "cat", "gunzip", "bunzip2", "cat" };
  +	int xx;
   
   	specDir = rpmGetPath("%{_specdir}", NULL);
   
   	tmpSpecFile = (char *) rpmGetPath(_specfn, NULL);
   
  -	(void) isCompressed(arg, &res);
  +	cmd = rpmExpand("%{uncompress:", arg, "} | %{__tar} -xOvf - %{?__tar_wildcards} ", "Specfile", " 2>&1 > '", tmpSpecFile, "'", NULL);
   
  -	cmd = alloca(strlen(arg) + 50 + strlen(tmpSpecFile));
  -	sprintf(cmd, "%s < %s | tar xOvf - Specfile 2>&1 > %s",
  -			zcmds[res & 0x3], arg, tmpSpecFile);
  -	if (!(fp = popen(cmd, "r"))) {
  +	if ((fp = popen(cmd, "r")) == NULL) {
   	    rpmError(RPMERR_POPEN, _("Failed to open tar pipe: %m\n"));
  -	    specDir = _free(specDir);
  +	    cmd = _free(cmd);
   	    tmpSpecFile = _free(tmpSpecFile);
  +	    specDir = _free(specDir);
   	    return 1;
   	}
  -	if ((!fgets(buf, sizeof(buf) - 1, fp)) || !strchr(buf, '/')) {
  +	s = fgets(buf, sizeof(buf) - 1, fp);
  +	if (!s || !*s || strstr(s, ": Not found in archive")) {
   	    /* Try again */
   	    (void) pclose(fp);
  +	    cmd = _free(cmd);
   
  -	    sprintf(cmd, "%s < %s | tar xOvf - \\*.spec 2>&1 > %s",
  -		    zcmds[res & 0x3], arg, tmpSpecFile);
  +	    cmd = rpmExpand("%{uncompress:", arg, "} | %{__tar} -xOvf - %{?__tar_wildcards} ", "\\*.spec", " 2>&1 > '", tmpSpecFile, "'", NULL);
   	    if (!(fp = popen(cmd, "r"))) {
   		rpmError(RPMERR_POPEN, _("Failed to open tar pipe: %m\n"));
  -		specDir = _free(specDir);
  +		cmd = _free(cmd);
   		tmpSpecFile = _free(tmpSpecFile);
  +		specDir = _free(specDir);
   		return 1;
   	    }
  -	    if (!fgets(buf, sizeof(buf) - 1, fp)) {
  +	    s = fgets(buf, sizeof(buf) - 1, fp);
  +	    if (!s || !*s || strstr(s, ": Not found in archive")) {
   		/* Give up */
   		rpmError(RPMERR_READ, _("Failed to read spec file from %s\n"),
   			arg);
  -		(void) unlink(tmpSpecFile);
  -		specDir = _free(specDir);
  +		xx = unlink(tmpSpecFile);
  +		cmd = _free(cmd);
   		tmpSpecFile = _free(tmpSpecFile);
  +		specDir = _free(specDir);
   	    	return 1;
   	    }
   	}
   	(void) pclose(fp);
  +	cmd = _free(cmd);
   
   	cmd = s = buf;
   	while (*cmd != '\0') {
  @@ -183,13 +184,13 @@
   
   	specURL = s = alloca(strlen(specDir) + strlen(cmd) + 5);
   	sprintf(s, "%s/%s", specDir, cmd);
  -	res = rename(tmpSpecFile, s);
  +	xx = Rename(tmpSpecFile, s);
   	specDir = _free(specDir);
   	
  -	if (res) {
  +	if (xx) {
   	    rpmError(RPMERR_RENAME, _("Failed to rename %s to %s: %m\n"),
   			tmpSpecFile, s);
  -	    (void) unlink(tmpSpecFile);
  +	    xx = Unlink(tmpSpecFile);
   	    tmpSpecFile = _free(tmpSpecFile);
   	    return 1;
   	}
  @@ .
Received on Sat Sep 22 19:40:54 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.