- never add identical NEVRA to transaction more than once (#467822)
This commit is contained in:
		
							parent
							
								
									57f2a13d99
								
							
						
					
					
						commit
						13dcfbee0a
					
				
							
								
								
									
										83
									
								
								rpm-4.6.0-rc1-skip-equal-nevr.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								rpm-4.6.0-rc1-skip-equal-nevr.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,83 @@ | |||||||
|  | diff --git a/lib/depends.c b/lib/depends.c
 | ||||||
|  | index 58aff31..810e909 100644
 | ||||||
|  | --- a/lib/depends.c
 | ||||||
|  | +++ b/lib/depends.c
 | ||||||
|  | @@ -118,7 +118,7 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
 | ||||||
|  |      struct rpmtd_s td; | ||||||
|  |      const char * arch = NULL; | ||||||
|  |      const char * os = NULL; | ||||||
|  | -    rpmds oldChk, newChk;
 | ||||||
|  | +    rpmds oldChk = NULL, newChk = NULL, sameChk = NULL;
 | ||||||
|  |      rpmds obsoletes; | ||||||
|  |      rpmalKey pkgKey;	/* addedPackages key */ | ||||||
|  |      int xx; | ||||||
|  | @@ -151,10 +151,13 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
 | ||||||
|  |      } | ||||||
|  |   | ||||||
|  |      oldChk = rpmdsThis(h, RPMTAG_REQUIRENAME, (RPMSENSE_LESS)); | ||||||
|  | -    newChk = rpmdsThis(h, RPMTAG_REQUIRENAME, (RPMSENSE_EQUAL|RPMSENSE_GREATER));
 | ||||||
|  | +    newChk = rpmdsThis(h, RPMTAG_REQUIRENAME, (RPMSENSE_GREATER));
 | ||||||
|  | +    sameChk = rpmdsThis(h, RPMTAG_REQUIRENAME, (RPMSENSE_EQUAL));
 | ||||||
|  |      /* XXX can't use rpmtsiNext() filter or oc will have wrong value. */ | ||||||
|  |      for (pi = rpmtsiInit(ts), oc = 0; (p = rpmtsiNext(pi, 0)) != NULL; oc++) { | ||||||
|  |  	rpmds this; | ||||||
|  | +	const char *pkgNEVR, *addNEVR;
 | ||||||
|  | +	int skip = 0;
 | ||||||
|  |   | ||||||
|  |  	/* XXX Only added packages need be checked for dupes. */ | ||||||
|  |  	if (rpmteType(p) == TR_REMOVED) | ||||||
|  | @@ -181,13 +184,20 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
 | ||||||
|  |  	    continue;	/* XXX can't happen */ | ||||||
|  |   | ||||||
|  |  	/*  | ||||||
|  | +	 * Always skip identical NEVR. 
 | ||||||
|  |   	 * On upgrade, if newer NEVR was previously added,  | ||||||
|  |   	 * then skip adding older.  | ||||||
|  |   	 */ | ||||||
|  | -	rc = rpmdsCompare(newChk, this);
 | ||||||
|  | -	if (upgrade && rc != 0) {
 | ||||||
|  | -	    const char * pkgNEVR = rpmdsDNEVR(this);
 | ||||||
|  | -	    const char * addNEVR = rpmdsDNEVR(oldChk);
 | ||||||
|  | +	if (rpmdsCompare(sameChk, this)) {
 | ||||||
|  | +	    skip = 1;
 | ||||||
|  | +	    addNEVR = rpmdsDNEVR(sameChk);
 | ||||||
|  | +	} else if (upgrade && rpmdsCompare(newChk, this)) {
 | ||||||
|  | +	    skip = 1;
 | ||||||
|  | +	    addNEVR = rpmdsDNEVR(newChk);
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	if (skip) {
 | ||||||
|  | +	    pkgNEVR = rpmdsDNEVR(this);
 | ||||||
|  |  	    if (rpmIsVerbose()) | ||||||
|  |  		rpmlog(RPMLOG_WARNING, | ||||||
|  |  		    _("package %s was already added, skipping %s\n"), | ||||||
|  | @@ -203,8 +213,8 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
 | ||||||
|  |   	 */ | ||||||
|  |  	rc = rpmdsCompare(oldChk, this); | ||||||
|  |  	if (upgrade && rc != 0) { | ||||||
|  | -	    const char * pkgNEVR = rpmdsDNEVR(this);
 | ||||||
|  | -	    const char * addNEVR = rpmdsDNEVR(newChk);
 | ||||||
|  | +	    pkgNEVR = rpmdsDNEVR(this);
 | ||||||
|  | +	    addNEVR = rpmdsDNEVR(newChk);
 | ||||||
|  |  	    if (rpmIsVerbose()) | ||||||
|  |  		rpmlog(RPMLOG_WARNING, | ||||||
|  |  		    _("package %s was already added, replacing with %s\n"), | ||||||
|  | @@ -216,8 +226,6 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
 | ||||||
|  |  	} | ||||||
|  |      } | ||||||
|  |      pi = rpmtsiFree(pi); | ||||||
|  | -    oldChk = rpmdsFree(oldChk);
 | ||||||
|  | -    newChk = rpmdsFree(newChk);
 | ||||||
|  |   | ||||||
|  |      /* If newer NEVR was already added, exit now. */ | ||||||
|  |      if (ec) | ||||||
|  | @@ -353,6 +361,9 @@ addheader:
 | ||||||
|  |      ec = 0; | ||||||
|  |   | ||||||
|  |  exit: | ||||||
|  | +    oldChk = rpmdsFree(oldChk);
 | ||||||
|  | +    newChk = rpmdsFree(newChk);
 | ||||||
|  | +    sameChk = rpmdsFree(sameChk);
 | ||||||
|  |      pi = rpmtsiFree(pi); | ||||||
|  |      return ec; | ||||||
|  |  } | ||||||
							
								
								
									
										7
									
								
								rpm.spec
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								rpm.spec
									
									
									
									
									
								
							| @ -18,7 +18,7 @@ | |||||||
| Summary: The RPM package management system | Summary: The RPM package management system | ||||||
| Name: rpm | Name: rpm | ||||||
| Version: %{rpmver} | Version: %{rpmver} | ||||||
| Release: 0.%{snapver}.2 | Release: 0.%{snapver}.3 | ||||||
| Group: System Environment/Base | Group: System Environment/Base | ||||||
| Url: http://www.rpm.org/ | Url: http://www.rpm.org/ | ||||||
| Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2 | Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2 | ||||||
| @ -34,6 +34,7 @@ Patch100: rpm-4.6.x-no-pkgconfig-reqs.patch | |||||||
| 
 | 
 | ||||||
| # Patches already in upstream | # Patches already in upstream | ||||||
| Patch200: rpm-4.6.0-rc1-permit-tab.patch | Patch200: rpm-4.6.0-rc1-permit-tab.patch | ||||||
|  | Patch201: rpm-4.6.0-rc1-skip-equal-nevr.patch | ||||||
| 
 | 
 | ||||||
| # These are not yet upstream | # These are not yet upstream | ||||||
| Patch300: rpm-4.5.90-posttrans.patch | Patch300: rpm-4.5.90-posttrans.patch | ||||||
| @ -166,6 +167,7 @@ that will manipulate RPM packages and databases. | |||||||
| %patch100 -p1 -b .pkgconfig-deps | %patch100 -p1 -b .pkgconfig-deps | ||||||
| 
 | 
 | ||||||
| %patch200 -p1 -b .permit-tab | %patch200 -p1 -b .permit-tab | ||||||
|  | %patch201 -p1 -b .skip-equal-nevr | ||||||
| 
 | 
 | ||||||
| # needs a bit of upstream love first... | # needs a bit of upstream love first... | ||||||
| #%patch300 -p1 -b .posttrans | #%patch300 -p1 -b .posttrans | ||||||
| @ -357,6 +359,9 @@ exit 0 | |||||||
| %doc doc/librpm/html/* | %doc doc/librpm/html/* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Wed Oct 22 2008 Panu Matilainen <pmatilai@redhat.com> | ||||||
|  | - never add identical NEVRA to transaction more than once (#467822) | ||||||
|  | 
 | ||||||
| * Sun Oct 19 2008 Panu Matilainen <pmatilai@redhat.com> | * Sun Oct 19 2008 Panu Matilainen <pmatilai@redhat.com> | ||||||
| - permit tab as macro argument separator (#467567) | - permit tab as macro argument separator (#467567) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user