java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml | 20 ++++ java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java | 4 java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java | 31 ++++-- java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java | 2 java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java | 19 --- java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java | 2 java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java | 24 +++++ java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java | 2 java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java | 14 ++ java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java | 34 +++++++ java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java | 48 ---------- java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp | 37 +++---- 12 files changed, 131 insertions(+), 106 deletions(-)
New commits: commit 004a652398b123b548218a28d28cc158f69afcbb Author: Justin Sherrill jsherril@redhat.com Date: Fri Mar 27 10:37:06 2009 -0400
490987 - fixed issue where errata files werent being refreshed, by removing the need for errata files
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml index f0d00b9..fb24cdc 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml @@ -1125,5 +1125,25 @@ GROUP BY C.id, C.name </query> </mode>
+<mode name="channel_errata_packages" class="com.redhat.rhn.frontend.dto.PackageDto"> + <query params="eid, cid"> + SELECT P.id, P.md5sum, + PN.name || '-' || PE.version + || '-' || PE.release || (CASE WHEN PE.epoch IS NULL THEN '' ELSE ':' || PE.epoch END) + || '-' || PA.label name + from rhnPackage P inner join + rhnChannelPackage CP on P.id = CP.package_id inner join + rhnErrataPackage EP on EP.package_id = CP.package_id inner join + rhnPackageName PN on P.name_id = PN.id inner join + rhnPackageEvr PE on P.evr_id = PE.id inner join + rhnPackageArch PA on P.package_arch_id = PA.id + where CP.channel_id = :cid + and EP.errata_id = :eid + ORDER by name + </query> +</mode> + + + </datasource_modes>
diff --git a/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java b/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java index 03f1ba9..bf087c4 100644 --- a/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java +++ b/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java @@ -16,7 +16,6 @@ package com.redhat.rhn.domain.errata.impl;
import com.redhat.rhn.domain.channel.Channel; import com.redhat.rhn.domain.errata.AbstractErrata; -import com.redhat.rhn.manager.errata.ErrataManager; import com.redhat.rhn.domain.errata.Cve;
import org.apache.log4j.Logger; @@ -32,7 +31,7 @@ public class PublishedErrata extends AbstractErrata {
private static Logger log = Logger.getLogger(PublishedErrata.class);
- private Set channels; + private Set channels = new HashSet(); private Set<Cve> cves = new HashSet<Cve>();
/** @@ -58,7 +57,6 @@ public class PublishedErrata extends AbstractErrata { this.channels = new HashSet(); } channels.add(channelIn); - ErrataManager.refreshErrataFiles(channelIn, this); }
/** diff --git a/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java index fc6c6b6..3253673 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java +++ b/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java @@ -14,20 +14,23 @@ */ package com.redhat.rhn.frontend.action.errata;
-import com.redhat.rhn.common.db.datasource.DataResult; +import com.redhat.rhn.domain.channel.Channel; import com.redhat.rhn.domain.errata.Errata; import com.redhat.rhn.domain.user.User; -import com.redhat.rhn.frontend.dto.ErrataPackageFile; +import com.redhat.rhn.frontend.dto.ChannelOverview; import com.redhat.rhn.frontend.struts.RequestContext; import com.redhat.rhn.frontend.struts.RhnAction; import com.redhat.rhn.frontend.struts.StrutsDelegate; -import com.redhat.rhn.manager.errata.ErrataManager; +import com.redhat.rhn.manager.channel.ChannelManager; +import com.redhat.rhn.manager.user.UserManager;
import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping;
-import java.util.Iterator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -48,17 +51,23 @@ public class ErrataPackagesSetupAction extends RhnAction {
User user = requestContext.getLoggedInUser(); Errata errata = requestContext.lookupErratum(); - DataResult files = ErrataManager.packages(errata.getId(), user);
- Iterator test = files.iterator(); - while (test.hasNext()) { //remove from filename everything we won't display - ErrataPackageFile next = (ErrataPackageFile)test.next(); - String filename = next.getFilename(); - next.setFilename(filename.substring(filename.lastIndexOf("/") + 1)); + List<ChannelOverview> chans = new ArrayList<ChannelOverview>(); + + for (Channel chan : errata.getChannels()) { + if (UserManager.verifyChannelSubscribable(user, chan)) { + ChannelOverview co = new ChannelOverview(); + co.setName(chan.getName()); + co.setId(chan.getId()); + co.setPackages(ChannelManager.listErrataPackages(chan, errata)); + chans.add(co); + } }
+ Collections.sort(chans); + request.setAttribute("errata", errata); - request.setAttribute("files", files); + request.setAttribute("channels", chans);
return strutsDelegate.forwardParams(mapping.findForward("default"), request.getParameterMap()); diff --git a/java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java b/java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java index 504e535..642cded 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java +++ b/java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java @@ -94,8 +94,6 @@ public class PackagePushAction extends RhnSetAction { } //publish them and the errata to the channel errata = ErrataFactory.publishToChannel(errata, c, user, filePackages); - //not sure what this is here for, but i'm scrared to remove it - ErrataManager.refreshErrataFiles(c, errata);
RhnSet targetChannels = RhnSetDecl.CHANNELS_FOR_ERRATA.get(user); targetChannels.removeElement(cid); diff --git a/java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java b/java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java index 4511656..e1de4bd 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java +++ b/java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java @@ -17,8 +17,6 @@ package com.redhat.rhn.frontend.action.errata; import com.redhat.rhn.common.db.datasource.DataResult; import com.redhat.rhn.domain.channel.Channel; import com.redhat.rhn.domain.errata.Errata; -import com.redhat.rhn.domain.errata.ErrataFactory; -import com.redhat.rhn.domain.errata.ErrataFile; import com.redhat.rhn.domain.rhnpackage.Package; import com.redhat.rhn.domain.rhnset.RhnSet; import com.redhat.rhn.domain.rhnset.RhnSetElement; @@ -92,23 +90,6 @@ public class RemovePackagesAction extends RhnSetAction { //removed from the errata. packagesRemoved++; } - - //We have to do this round about way of removing errata files - // otherwise we are modifying the set that we are working on - // I really *hate* errata files - List<ErrataFile> efsToRemove = new ArrayList<ErrataFile>(); - for (ErrataFile ef : errata.getFiles()) { - if (ef.getPackages().contains(pkg)) { - efsToRemove.add(ef); - } - } - for (ErrataFile ef : efsToRemove) { - errata.removeFile(ef.getId()); - ef.getPackages().remove(pkg); - if (ef.getPackages().isEmpty()) { - ErrataFactory.removeFile(ef); - } - } } //Save the errata ErrataManager.storeErrata(errata); diff --git a/java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java b/java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java index 6849b79..1d861b4 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java +++ b/java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java @@ -40,7 +40,7 @@ public class ErrataPackagesSetupActionTest extends RhnBaseTestCase { sah.executeAction();
assertNotNull(sah.getRequest().getAttribute("errata")); - assertNotNull(sah.getRequest().getAttribute("files")); + assertNotNull(sah.getRequest().getAttribute("channels"));
} } diff --git a/java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java b/java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java index 793185f..d0ce40b 100644 --- a/java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java +++ b/java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java @@ -16,6 +16,9 @@ package com.redhat.rhn.frontend.dto;
import org.apache.commons.lang.builder.ToStringBuilder;
+import java.util.ArrayList; +import java.util.List; + /** * ChannelOverview * @version $Rev$ @@ -31,6 +34,7 @@ public class ChannelOverview extends BaseDto implements Comparable { private String url; private Long relevantPackages; private Long originalId; + private List<PackageDto> packages = new ArrayList<PackageDto>();
/** @@ -225,4 +229,24 @@ public class ChannelOverview extends BaseDto implements Comparable { return hasSubscription; }
+ + + /** + * @return Returns the packages. + */ + public List<PackageDto> getPackages() { + return packages; + } + + + + /** + * @param packagesIn The packages to set. + */ + public void setPackages(List<PackageDto> packagesIn) { + this.packages = packagesIn; + } + + + } diff --git a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java index f270ffc..9221b59 100644 --- a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java +++ b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java @@ -21,7 +21,6 @@ import com.redhat.rhn.domain.errata.Errata; import com.redhat.rhn.domain.errata.ErrataFactory; import com.redhat.rhn.domain.errata.impl.PublishedClonedErrata; import com.redhat.rhn.frontend.action.channel.manage.PublishErrataHelper; -import com.redhat.rhn.manager.errata.ErrataManager; import com.redhat.rhn.manager.errata.cache.ErrataCacheManager;
import org.apache.log4j.Logger; @@ -63,7 +62,6 @@ public class CloneErrataAction Errata published = PublishErrataHelper.cloneErrataFast(errata, msg.getUser().getOrg()); published.setChannels(channelSet); - ErrataManager.refreshErrataFiles(currChan, published);
} ErrataCacheManager.insertCacheForChannelErrata(cids, errata); diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java index c4e2039..d573a1a 100644 --- a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java +++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java @@ -2404,6 +2404,20 @@ public class ChannelManager extends BaseManager { ErrataCacheManager.deleteCacheEntriesForChannelErrata(chan.getId(), ids); }
+ /** + * List packages that are contained in an errata and in a channel + * @param chan The channel + * @param errata the Errata + * @return A list of PackageDto that are in the channel and errata + */ + public static List<PackageDto> listErrataPackages(Channel chan, Errata errata) { + Map params = new HashMap(); + params.put("cid", chan.getId()); + params.put("eid", errata.getId());
+ SelectMode mode = ModeFactory.getMode( + "Channel_queries", "channel_errata_packages"); + return (List<PackageDto>) mode.execute(params); + }
} diff --git a/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java b/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java index 44aea87..4f52632 100644 --- a/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java +++ b/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java @@ -30,6 +30,8 @@ import com.redhat.rhn.domain.errata.ErrataFactory; import com.redhat.rhn.domain.errata.test.ErrataFactoryTest; import com.redhat.rhn.domain.org.Org; import com.redhat.rhn.domain.org.OrgFactory; +import com.redhat.rhn.domain.rhnpackage.Package; +import com.redhat.rhn.domain.rhnpackage.test.PackageTest; import com.redhat.rhn.domain.rhnset.RhnSet; import com.redhat.rhn.domain.role.RoleFactory; import com.redhat.rhn.domain.server.Server; @@ -40,6 +42,7 @@ import com.redhat.rhn.domain.user.User; import com.redhat.rhn.frontend.dto.ChannelOverview; import com.redhat.rhn.frontend.dto.ErrataOverview; import com.redhat.rhn.frontend.dto.EssentialChannelDto; +import com.redhat.rhn.frontend.dto.PackageDto; import com.redhat.rhn.frontend.dto.PackageOverview; import com.redhat.rhn.frontend.dto.SystemsPerChannelDto; import com.redhat.rhn.frontend.xmlrpc.NoSuchChannelException; @@ -713,4 +716,35 @@ public class ChannelManagerTest extends BaseTestCaseWithUser { c = ChannelManager.lookupByLabel(user.getOrg(), c.getLabel()); assertFalse(c.getErratas().contains(eids)); } + + public void testListErrataPackages() throws Exception { + + Channel c = ChannelFactoryTest.createBaseChannel(user); + Errata e = ErrataFactoryTest.createTestErrata(user.getOrg().getId()); + + Package bothP = PackageTest.createTestPackage(); + Package channelP = PackageTest.createTestPackage(); + Package errataP = PackageTest.createTestPackage(); + + + c.addPackage(bothP); + e.addPackage(bothP); + + c.addPackage(channelP); + e.addPackage(errataP); + + c.addErrata(e); + + c = (Channel) TestUtils.saveAndReload(c); + e = (Errata) TestUtils.saveAndReload(e); + + bothP = (Package) TestUtils.saveAndReload(bothP); + + + List<PackageDto> list = ChannelManager.listErrataPackages(c, e); + assertEquals(list.size(), 1); + assertEquals(list.get(0).getId(), (bothP.getId())); + + + } } diff --git a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java index 2a48b22..6a0070c 100644 --- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java +++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java @@ -31,8 +31,6 @@ import com.redhat.rhn.domain.errata.Errata; import com.redhat.rhn.domain.errata.ErrataFactory; import com.redhat.rhn.domain.errata.ErrataFile; import com.redhat.rhn.domain.errata.ErrataFileType; -import com.redhat.rhn.domain.errata.impl.PublishedErrataFile; -import com.redhat.rhn.domain.rhnpackage.Package; import com.redhat.rhn.domain.rhnset.RhnSet; import com.redhat.rhn.domain.rhnset.RhnSetFactory; import com.redhat.rhn.domain.role.RoleFactory; @@ -56,7 +54,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -913,51 +910,6 @@ public class ErrataManager extends BaseManager { public static List lookupByOriginal(User user, Errata original) { return ErrataFactory.lookupByOriginal(user.getOrg(), original); } - - /** - * Refresh the ErrataFiles associated with this Errata and the passed in Channel. - * @param channelIn to refresh errata files. - * @param errata of Errata you want to refresh. - */ - public static void refreshErrataFiles(Channel channelIn, Errata errata) { - if (log.isDebugEnabled()) { - log.debug("files? " + (errata.getFiles() != null) + " packages: " + - (channelIn.getPackages() != null)); - } - if (errata.getFiles() != null && channelIn.getPackages() != null) { - log.debug("This errata has files and the channel has packages."); - Set addedPackages = new HashSet(); - Iterator i = errata.getFiles().iterator(); - while (i.hasNext()) { - log.debug("loop 2."); - PublishedErrataFile ef = (PublishedErrataFile) i.next(); - if (log.isDebugEnabled()) { - log.debug("Working with ef: " + ef.getFileName() + - " id: " + ef.getId() + " cs: " + ef.getChecksum()); - } - if (ef.getPackages() != null) { - Iterator j = ef.getPackages().iterator(); - while (j.hasNext()) { - Package p = (Package) j.next(); - if (log.isDebugEnabled()) { - log.debug("Package: " + p.getPackageName().getName() + - " arch: " + p.getPackageArch().getLabel()); - log.debug("added packages: " + addedPackages); - } - if (channelIn.getPackages().contains(p) && - !addedPackages.contains(p)) { - if (log.isDebugEnabled()) { - log.debug("ChannelHasPackage, adding to ef"); - } - ef.addChannel(channelIn); - addedPackages.add(p); - } - } - } - } - } - - }
/** * Lookup packages that are associated with errata in the RhnSet "errata_list" diff --git a/java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp b/java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp index 69d9864..69b42b3 100644 --- a/java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp +++ b/java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp @@ -14,31 +14,28 @@
<h2><bean:message key="packagelist.jsp.header.packages"/></h2>
- <c:if test="${empty files}"> - <div class="page-summary"> - <bean:message key="details.jsp.none"/> - </div> - </c:if>
- <c:forEach items="${files}" var="current"> + + <c:forEach items="${channels}" var="current"> <div class="page-summary"> + <b><c:out value="${current.name}"/> </b> + <br/>
- <c:if test="${previousChannel != current.channelName}"> - <br/><b>${current.channelName}:</b> <br/> - </c:if> - - <tt>${current.md5sum}</tt> - - <c:if test="${not empty current.packageId}"> - <a href="/rhn/software/packages/Details.do?pid=${current.packageId}">${current.filename}</a> - </c:if> - <c:if test="${empty current.packageId}"> - ${current.filename} - </c:if> - <br/> + <c:if test="${empty current.packages}"> + <div class="page-summary"> + <bean:message key="details.jsp.none"/> + </div> + </c:if>
+ <c:forEach items="${current.packages}" var="pack"> + <tt>${pack.md5sum}</tt> + <a href="/rhn/software/packages/Details.do?pid=${pack.id}"> + <c:out value="${pack.name}"/> + </a> + <br/> + </c:forEach> + <br/> </div> - <c:set var="previousChannel" value="${current.channelName}" /> </c:forEach> </body> </html>