java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
| 53 +++
java/code/src/com/redhat/rhn/domain/channel/Channel.java
| 17 +
java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
| 58 +--
java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java
| 10
java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataAction.java
| 97 ++++++
java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataPackagesAction.java
| 148 ++++++++++
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
| 25 +
java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
| 8
java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java
| 33 ++
java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java
| 37 --
java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
| 91 ++++++
java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
| 62 ++++
java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
| 16 +
java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
| 7
java/code/webapp/WEB-INF/nav/manage_channel.xml
| 4
java/code/webapp/WEB-INF/pages/channel/manage/erratapackagesync.jsp
| 80 +++++
java/code/webapp/WEB-INF/pages/channel/manage/erratasync.jsp
| 110 +++++++
java/code/webapp/WEB-INF/struts-config.xml
| 21 +
scripts/channel-to-update-level/create-channel-update
| 4
web/html/nav/manage_channel.xml
| 4
web/modules/pxt/PXT/Request.pm
| 4
21 files changed, 820 insertions(+), 69 deletions(-)
New commits:
commit 120c37f03e2fde78cb07e4f532b9eaffb9179ce2
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Tue Jun 2 14:35:58 2009 -0400
435043 - adding errata sync page for syncing out of date errata (that have been
updated by red hat)
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
index 78a3e84..6ad0a82 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
@@ -1185,4 +1185,57 @@ SELECT E.id, E.advisory, E.synopsis
</query>
</mode>
+
+
+<mode name="list_errata_needing_sync"
class="com.redhat.rhn.frontend.dto.ErrataOverview">
+ <query params="cid, ocid">
+ select distinct E.id, E.advisory_name, E.advisory, E.advisory_type, E.synopsis as
advisory_synopsis, E.update_date
+ from rhnChannelErrata CE inner join
+ rhnErrataPackage EP on CE.errata_id = EP.errata_id inner join
+ rhnErrataCloned EC on EC.original_id = CE.errata_id inner join
+ rhnChannelErrata CE2 on CE2.errata_id = EC.id inner join
+ rhnErrata E on E.id = EC.id
+ where CE.channel_id = :ocid --original
+ and CE2.channel_id = :cid --clone
+ and Ep.package_id in (select CP.package_id
+ from rhnChannelPackage CP
+ where
+ CP.channel_id = :ocid --original
+ and CP.package_id not in (select CP2.package_id
+ from rhnChannelPackage CP2
+ where CP2.channel_id = :cid)) --clone
+ </query>
+</mode>
+
+<mode name="list_packages_needing_sync_from_set"
class="com.redhat.rhn.frontend.dto.PackageOverview">
+ <query params="set_label, ocid, cid">
+ select P.id id, PN.name || '-' || PE.version
+ || '-' || PE.release || (CASE WHEN PE.epoch IS NULL THEN '' ELSE
':' || PE.epoch END)
+ || '-' || PA.label nvrea,
+ P.summary
+ from rhnPackage P inner join
+ rhnPackageArch PA on P.package_arch_id = PA.id inner join
+ rhnPackageEVR PE on P.evr_id = PE.id inner join
+ rhnPackageName PN on PN.id = P.name_id inner join
+ rhnErrataPackage EP on EP.package_id = P.id inner join
+ rhnErrataCloned EC on EC.original_id = EP.errata_id inner join
+ rhnChannelPackage CP on CP.package_id = P.id
+ where CP.channel_id = :ocid
+ and EC.id in ( select element
+ from rhnSet S
+ where S.label = :set_label)
+ and P.id not in ( select CP2.package_id
+ from rhnChannelPackage CP2
+ where CP2.channel_id = :cid)
+ </query>
+</mode>
+
+<mode name="list_channel_errata_ids">
+ <query params="cid">
+ select CE.errata_id as id
+ from rhnChannelErrata CE
+ where CE.channel_id = :cid
+ </query>
+</mode>
+
</datasource_modes>
diff --git a/java/code/src/com/redhat/rhn/domain/channel/Channel.java
b/java/code/src/com/redhat/rhn/domain/channel/Channel.java
index 07ab885..cef2312 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/Channel.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/Channel.java
@@ -387,6 +387,7 @@ public class Channel extends BaseDomainHelper implements Comparable {
/**
* Adds a single package to the channel
* @param packageIn The package to add
+ * @deprecated
*/
public void addPackage(Package packageIn) {
if (!getChannelArch().isCompatible(packageIn.getPackageArch())) {
@@ -397,6 +398,22 @@ public class Channel extends BaseDomainHelper implements Comparable
{
}
/**
+ * Adds a single package to the channel
+ * @param packageIn The package to add
+ * @param user the user doign the add
+ */
+ public void addPackage(Package packageIn, User user) {
+ if (!getChannelArch().isCompatible(packageIn.getPackageArch())) {
+ throw new IncompatibleArchException(packageIn.getPackageArch(),
+ getChannelArch());
+ }
+ List<Long> list = new ArrayList<Long>();
+ list.add(packageIn.getId());
+ ChannelManager.addPackages(this, list, user);
+ }
+
+
+ /**
* Removes a single package from the channel
* @param user the user doing the remove
* @param packageIn The package to remove
diff --git a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
index 0d6733a..d87966a 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
@@ -204,7 +204,7 @@ public class ErrataFactory extends HibernateFactory {
published = ErrataFactory.createPublishedErrata();
}
- copyDetails(published, unpublished);
+ copyDetails(published, unpublished, false);
//Save the published Errata
save(published);
@@ -353,7 +353,7 @@ public class ErrataFactory extends HibernateFactory {
UnpublishedClonedErrata clone = new UnpublishedClonedErrata();
- copyDetails(clone, e);
+ copyDetails(clone, e, true);
clone.setAdvisoryName(clonedAdvisoryName);
clone.setAdvisory(clonedAdvisory);
@@ -368,11 +368,19 @@ public class ErrataFactory extends HibernateFactory {
* Helper method to copy the details for.
* @param copy The object to copy into.
* @param original The object to copy from.
+ * @param clone set to true if this is a cloned errata, and thus
+ * things like org or advisory name shouldn't be set
*/
- private static void copyDetails(Errata copy, Errata original) {
+ private static void copyDetails(Errata copy, Errata original, boolean clone) {
//Set the easy things first ;)
- copy.setAdvisory(original.getAdvisory());
+
+ if (!clone) {
+ copy.setAdvisory(original.getAdvisory());
+ copy.setAdvisoryName(original.getAdvisoryName());
+ copy.setOrg(original.getOrg());
+ }
+
copy.setAdvisoryType(original.getAdvisoryType());
copy.setProduct(original.getProduct());
copy.setDescription(original.getDescription());
@@ -383,11 +391,10 @@ public class ErrataFactory extends HibernateFactory {
copy.setUpdateDate(original.getUpdateDate());
copy.setNotes(original.getNotes());
copy.setRefersTo(original.getRefersTo());
- copy.setAdvisoryName(original.getAdvisoryName());
copy.setAdvisoryRel(original.getAdvisoryRel());
copy.setLocallyModified(original.getLocallyModified());
copy.setLastModified(original.getLastModified());
- copy.setOrg(original.getOrg());
+
/*
* Copy the packages
@@ -415,39 +422,16 @@ public class ErrataFactory extends HibernateFactory {
Iterator bugsItr = IteratorUtils.getIterator(original.getBugs());
while (bugsItr.hasNext()) {
Bug bugIn = (Bug) bugsItr.next();
- Bug clone;
+ Bug cloneB;
if (copy.isPublished()) { //we want published bugs
- clone = ErrataManager.createNewPublishedBug(bugIn.getId(),
+ cloneB = ErrataManager.createNewPublishedBug(bugIn.getId(),
bugIn.getSummary());
}
else { //we want unpublished bugs
- clone = ErrataManager.createNewUnpublishedBug(bugIn.getId(),
+ cloneB = ErrataManager.createNewUnpublishedBug(bugIn.getId(),
bugIn.getSummary());
}
- copy.addBug(clone);
- }
-
- /*
- * Copy the files using the same idea as the above bug copying
- */
- Iterator filesItr = IteratorUtils.getIterator(original.getFiles());
- while (filesItr.hasNext()) {
- ErrataFile fileIn = (ErrataFile) filesItr.next();
- ErrataFile clone;
- Set packages = new HashSet(fileIn.getPackages());
- if (copy.isPublished()) {
- clone = ErrataManager.createNewPublishedErrataFile(fileIn.getFileType(),
- fileIn.getChecksum(),
- fileIn.getFileName(),
- packages);
- }
- else {
- clone =
ErrataManager.createNewUnpublishedErrataFile(fileIn.getFileType(),
-
fileIn.getChecksum(),
-
fileIn.getFileName(),
- packages);
- }
- copy.addFile(clone);
+ copy.addBug(cloneB);
}
}
@@ -1048,7 +1032,13 @@ public class ErrataFactory extends HibernateFactory {
}
-
+ /**
+ * Sync all the errata details from one errata to another
+ * @param cloned the cloned errata that needs syncing
+ */
+ public static void syncErrataDetails(PublishedClonedErrata cloned) {
+ copyDetails(cloned, cloned.getOriginal(), true);
+ }
}
diff --git a/java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java
b/java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java
index 13e2fda..42988a6 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/test/ErrataFactoryTest.java
@@ -270,7 +270,9 @@ public class ErrataFactoryTest extends BaseTestCaseWithUser {
private static void fillOutErrata(Errata e, Long orgId) throws Exception {
String name = "JAVA Test " + TestUtils.randomString();
- e.setOrg(OrgFactory.lookupById(orgId));
+ if (orgId != null) {
+ e.setOrg(OrgFactory.lookupById(orgId));
+ }
e.setAdvisory(name);
e.setAdvisoryType(ErrataFactory.ERRATA_TYPE_BUG);
e.setProduct("Red Hat Linux");
@@ -334,11 +336,7 @@ public class ErrataFactoryTest extends BaseTestCaseWithUser {
assertEquals(published.getLocallyModified(), clone.getLocallyModified());
assertEquals(clonedAdvisoryName, clone.getAdvisoryName());
assertEquals(clonedAdvisory, clone.getAdvisory());
-
- assertEquals(1, clone.getFiles().size());
- ErrataFile ef = (ErrataFile)clone.getFiles().iterator().next();
- assertEquals(1, ef.getPackages().size());
-
+
/* Create a 2nd clone and make sure that the cloning function
* does not create a clone whose name collides with the already
* existing clone
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataAction.java
b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataAction.java
new file mode 100644
index 0000000..88410bd
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataAction.java
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2009 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.action.channel.manage;
+
+import com.redhat.rhn.domain.channel.Channel;
+import com.redhat.rhn.domain.channel.InvalidChannelRoleException;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.helper.ListRhnSetHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
+import com.redhat.rhn.manager.channel.ChannelManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * SyncErrataAction
+ * @version $Rev$
+ */
+public class SyncErrataAction extends RhnAction implements Listable {
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+
+ RequestContext rc = new RequestContext(request);
+ User user = rc.getLoggedInUser();
+
+ Channel chan = ChannelManager.lookupByIdAndUser(
+ rc.getRequiredParam(RequestContext.CID), user);
+
+ try {
+ ChannelManager.verifyChannelAdmin(user, chan.getId());
+ }
+ catch (InvalidChannelRoleException e) {
+ addMessage(request, e.getMessage());
+ return mapping.findForward("default");
+ }
+
+ ListRhnSetHelper helper = new ListRhnSetHelper(this, request,
+ RhnSetDecl.ERRATA_TO_SYNC.createCustom(chan.getId()));
+
+ helper.execute();
+ if (helper.isDispatched()) {
+ Map params = new HashMap();
+ params.put(RequestContext.CID, chan.getId());
+ return
getStrutsDelegate().forwardParams(mapping.findForward("submit"),
+ params);
+ }
+
+ request.setAttribute("channel_name", chan.getName());
+ request.setAttribute(RequestContext.CID, chan.getId());
+ return mapping.findForward("default");
+ }
+
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public List getResult(RequestContext context) {
+ User user = context.getLoggedInUser();
+ Channel chan = ChannelManager.lookupByIdAndUser(
+ context.getRequiredParam(RequestContext.CID), user);
+
+ return ChannelManager.listErrataNeedingResync(chan, user);
+ }
+
+
+}
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataPackagesAction.java
b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataPackagesAction.java
new file mode 100644
index 0000000..88b4234
--- /dev/null
+++
b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncErrataPackagesAction.java
@@ -0,0 +1,148 @@
+/**
+ * Copyright (c) 2009 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.action.channel.manage;
+
+import com.redhat.rhn.domain.channel.Channel;
+import com.redhat.rhn.domain.channel.InvalidChannelRoleException;
+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.domain.user.User;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.helper.ListRhnSetHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
+import com.redhat.rhn.manager.channel.ChannelEditor;
+import com.redhat.rhn.manager.channel.ChannelManager;
+import com.redhat.rhn.manager.errata.ErrataManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+import org.apache.log4j.Logger;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * SyncErrataAction
+ * @version $Rev$
+ */
+public class SyncErrataPackagesAction extends RhnAction implements Listable {
+
+
+ private Logger log = Logger.getLogger(SyncErrataPackagesAction.class);
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+
+ RequestContext rc = new RequestContext(request);
+ User user = rc.getLoggedInUser();
+
+ Channel chan = ChannelManager.lookupByIdAndUser(
+ rc.getRequiredParam(RequestContext.CID), user);
+
+ try {
+ ChannelManager.verifyChannelAdmin(user, chan.getId());
+ }
+ catch (InvalidChannelRoleException e) {
+ addMessage(request, e.getMessage());
+ return mapping.findForward("default");
+ }
+
+ RhnSetDecl pkgDecl =
RhnSetDecl.ERRATA_PACKAGES_TO_SYNC.createCustom(chan.getId());
+
+ ListRhnSetHelper helper = new ListRhnSetHelper(this, request,
+ pkgDecl);
+
+ helper.setPreSelectAll(true);
+ helper.execute();
+
+ if (helper.isDispatched()) {
+
+ Set eSet = RhnSetDecl.ERRATA_TO_SYNC.createCustom(
+ chan.getId()).get(user).getElementValues();
+ Set pSet = pkgDecl.get(user).getElementValues();
+ syncErrata(eSet, pSet, chan, user);
+
+
+ ActionMessages msg = new ActionMessages();
+ String[] msgParams = {eSet.size() + "", pSet.size() + "",
chan.getName()};
+ msg.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("channel.jsp.errata.sync.complete",
+ msgParams));
+ getStrutsDelegate().saveMessages(rc.getRequest(), msg);
+
+
+ Map params = new HashMap();
+ params.put(RequestContext.CID, chan.getId());
+ return
getStrutsDelegate().forwardParams(mapping.findForward("submit"),
+ params);
+ }
+
+ request.setAttribute("channel_name", chan.getName());
+ request.setAttribute(RequestContext.CID, chan.getId());
+ return mapping.findForward("default");
+ }
+
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public List getResult(RequestContext context) {
+ User user = context.getLoggedInUser();
+ Channel chan = ChannelManager.lookupByIdAndUser(
+ context.getRequiredParam(RequestContext.CID), user);
+ String label = RhnSetDecl.ERRATA_TO_SYNC.createCustom(
+ chan.getId()).getLabel();
+
+ return ChannelManager.listErrataPackagesForResync(chan, user, label);
+ }
+
+
+ private void syncErrata(Collection<Long> eids, Collection<Long> pids,
+ Channel chan, User user) {
+
+ ChannelEditor.getInstance().addPackages(user, chan, pids);
+ for (Long eid : eids) {
+ Errata e = ErrataManager.lookupErrata(eid, user);
+ if (e.isPublished() && e.isCloned()) {
+ ErrataFactory.syncErrataDetails((PublishedClonedErrata) e);
+ }
+ else {
+ log.fatal("Tried to sync errata with id " + eid +
+ " But it was not published or was not cloned");
+ }
+ }
+
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 2470475..a5a3751 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -21302,6 +21302,31 @@ given channel.</source>
<trans-unit id="actions.jsp.pickedup">
<source>Picked Up</source>
</trans-unit>
+ <trans-unit id="header.jsp.errata.sync">
+ <source>Sync Errata</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.message">
+ <source>The following errata were cloned from errata that have since been
updated.
+ This page will allow you to syncronize your cloned errata to that of its
original.</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.note">
+ <source>Packages that were omitted as part of the origianl cloning process will
be included here.</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.listempty">
+ <source>No out of date errata were found.</source>
+ </trans-unit>
+ <trans-unit id="header.jsp.errata.sync.packagepush">
+ <source>Packages to Push</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.packages.message">
+ <source>The following packages will be pushed to this channel as part of the
errata sync process. Please review this list and unselect any unwanted
packages.</source>
+ </trans-unit>
+ <trans-unit id="channel.jsp.errata.sync.complete">
+ <source>Sucessfully syncronized {0} errata and pushed {1} packages to channel
{2}.</source>
+ </trans-unit>
+
+
+
</body>
</file>
</xliff>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
index 93f3b37..0722a3c 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
@@ -1006,6 +1006,13 @@
http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd&q...
</context-group>
</trans-unit>
+ <trans-unit id="Sync">
+ <source>Sync</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/rhn/channels/manage/errata/SyncErrata.do</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="Organizations">
<source>Organizations</source>
<context-group name="ctx">
@@ -1013,6 +1020,7 @@
http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd&q...
</context-group>
</trans-unit>
+
<trans-unit id="Trusts">
<source>Trusts</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java
b/java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java
index d6a8e8f..ed7d337 100644
--- a/java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java
+++ b/java/code/src/com/redhat/rhn/frontend/taglibs/list/helper/ListSetHelper.java
@@ -15,6 +15,7 @@
package com.redhat.rhn.frontend.taglibs.list.helper;
+import com.redhat.rhn.frontend.dto.BaseDto;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnHelper;
import com.redhat.rhn.frontend.struts.Selectable;
@@ -24,6 +25,7 @@ import com.redhat.rhn.frontend.taglibs.list.TagHelper;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -86,6 +88,7 @@ abstract class ListSetHelper extends ListHelper {
private boolean dispatched = false;
private boolean ignoreEmptySelection = false;
private boolean willClearSet = true;
+ private boolean preSelectAll = false;
private Set initSet = Collections.EMPTY_SET;
/**
@@ -138,8 +141,8 @@ abstract class ListSetHelper extends ListHelper {
if (!context.isSubmitted() && alphaBarPressed == null &&
willClearSet) {
clear();
add(getPreSelected());
- }
-
+ }
+
if (request.getParameter(RequestContext.DISPATCH) != null) {
// if its one of the Dispatch actions handle it..
update();
@@ -161,6 +164,16 @@ abstract class ListSetHelper extends ListHelper {
List dataSet = getDataSet();
+
+ if (!context.isSubmitted() && alphaBarPressed == null &&
preSelectAll) {
+ Set selSet = new HashSet();
+ for (BaseDto bdto : (List<BaseDto>) dataSet) {
+ selSet.add(bdto.getId());
+ }
+ add(selSet);
+ }
+
+
// if its a list action update the set and the selections
if (ListTagHelper.getListAction(getListName(), request) != null) {
execute(dataSet);
@@ -290,4 +303,20 @@ abstract class ListSetHelper extends ListHelper {
this.willClearSet = willClearSetIn;
}
+
+ /**
+ * @return Returns the preSelectAll.
+ */
+ public boolean isPreSelectAll() {
+ return preSelectAll;
+ }
+
+
+ /**
+ * @param preSelectAllIn The preSelectAll to set.
+ */
+ public void setPreSelectAll(boolean preSelectAllIn) {
+ this.preSelectAll = preSelectAllIn;
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java
b/java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java
index 5b00f26..651ee8a 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelEditor.java
@@ -16,16 +16,15 @@ package com.redhat.rhn.manager.channel;
import com.redhat.rhn.common.db.datasource.CallableMode;
import com.redhat.rhn.common.db.datasource.ModeFactory;
-import com.redhat.rhn.common.hibernate.LookupException;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.channel.ChannelFactory;
-import com.redhat.rhn.domain.rhnpackage.Package;
import com.redhat.rhn.domain.user.User;
-import com.redhat.rhn.manager.rhnpackage.PackageManager;
import com.redhat.rhn.manager.user.UserManager;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -57,7 +56,7 @@ public class ChannelEditor {
* @param channel The channel to add the packages to
* @param packageIds A list containing the ids of packages to add.
*/
- public void addPackages(User user, Channel channel, List packageIds) {
+ public void addPackages(User user, Channel channel, Collection packageIds) {
changePackages(user, channel, packageIds, true);
}
@@ -67,7 +66,7 @@ public class ChannelEditor {
* @param channel The channel to remove the packages from
* @param packageIds A list containing the ids of packages to remove.
*/
- public void removePackages(User user, Channel channel, List packageIds) {
+ public void removePackages(User user, Channel channel, Collection packageIds) {
changePackages(user, channel, packageIds, false);
}
@@ -76,7 +75,8 @@ public class ChannelEditor {
* @param add If true, we are adding the list of packages to the channel. Otherwise,
* remove the list of packages from the channel.
*/
- private void changePackages(User user, Channel channel, List packageIds, boolean add)
{
+ private void changePackages(User user, Channel channel,
+ Collection packageIds, boolean add) {
//Make sure the person adding packages is a channel admin
if (!UserManager.verifyChannelAdmin(user, channel)) {
StringBuffer msg = new StringBuffer("User: ");
@@ -112,27 +112,18 @@ public class ChannelEditor {
}
}
+ List<Long> existingPids = ChannelFactory.getPackageIds(channel.getId());
+
//Loop through packages and add to channel.
for (Iterator itr = packageIds.iterator(); itr.hasNext();) {
Long pid = convertObjectToLong(itr.next());
- Package pkg = PackageManager.lookupByIdAndUser(pid, user);
- if (pkg != null) {
- if (add) {
- channel.addPackage(pkg);
- }
- else {
- channel.removePackage(pkg, user);
- }
+ List list = new ArrayList();
+ list.add(pid);
+ if (add && !existingPids.contains(pid)) {
+ ChannelManager.addPackages(channel, list, user);
}
- else {
- //throw a lookup exception
- LocalizationService ls = LocalizationService.getInstance();
- String msg = "The package: " + pid + " could not be
found.";
- LookupException e = new LookupException(msg);
-
e.setLocalizedTitle(ls.getMessage("lookup.jsp.title.package"));
-
e.setLocalizedReason1(ls.getMessage("lookup.jsp.reason1.package"));
-
e.setLocalizedReason2(ls.getMessage("lookup.jsp.reason2.package"));
- throw e;
+ else if (!add) {
+ ChannelManager.removePackages(channel, list, user);
}
}
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 f84a434..41433a2 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
@@ -32,6 +32,7 @@ import com.redhat.rhn.domain.channel.ChannelFactory;
import com.redhat.rhn.domain.channel.ChannelFamily;
import com.redhat.rhn.domain.channel.ChannelFamilyFactory;
import com.redhat.rhn.domain.channel.ChannelVersion;
+import com.redhat.rhn.domain.channel.ClonedChannel;
import com.redhat.rhn.domain.channel.DistChannelMap;
import com.redhat.rhn.domain.channel.InvalidChannelRoleException;
import com.redhat.rhn.domain.channel.ProductName;
@@ -2506,6 +2507,42 @@ public class ChannelManager extends BaseManager {
}
/**
+ * Remove packages from a channel very quickly
+ * @param chan the channel
+ * @param packageIds list of package ids
+ * @param user the user doing the removing
+ */
+ public static void addPackages(Channel chan, List<Long> packageIds, User user)
{
+
+ if (!UserManager.verifyChannelAdmin(user, chan)) {
+ StringBuffer msg = new StringBuffer("User: ");
+ msg.append(user.getLogin());
+ msg.append(" does not have channel admin access to channel: ");
+ msg.append(chan.getLabel());
+
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(msg.toString());
+
pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.channel"));
+
pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.channel"));
+ throw pex;
+ }
+
+ Map params = new HashMap();
+ params.put("cid", chan.getId());
+
+ WriteMode m = ModeFactory.getWriteMode("Channel_queries",
"add_channel_package");
+ for (Long pid : packageIds) {
+ params.put("pid", pid);
+ m.executeUpdate(params);
+ }
+
+
+ HibernateFactory.getSession().refresh(chan);
+
+ }
+
+
+ /**
* Remove a set of erratas from a channel
* and remove associated packages
* @param chan The channel to remove from
@@ -2553,4 +2590,58 @@ public class ChannelManager extends BaseManager {
return (List<PackageDto>) mode.execute(params);
}
+ /**
+ * List errata that is within a channel that needs to be resynced
+ * This is determined by the packages in the channel
+ *
+ * @param c the channel
+ * @param user the user
+ * @return list of errataOverview objects that need to be resynced
+ */
+ public static List listErrataNeedingResync(Channel c, User user) {
+ if (!user.hasRole(RoleFactory.CHANNEL_ADMIN)) {
+ throw new PermissionException(RoleFactory.CHANNEL_ADMIN);
+ }
+
+ if (c.isCloned()) {
+ Map params = new HashMap();
+ params.put("cid", c.getId());
+ ClonedChannel cc = (ClonedChannel) c;
+ params.put("ocid", cc.getOriginal().getId());
+ SelectMode m = ModeFactory.getMode("Errata_queries",
+ "list_errata_needing_sync");
+ return m.execute(params);
+ }
+ else {
+ return Collections.EMPTY_LIST;
+ }
+ }
+
+ /**
+ * List errata packages that need to be resynced
+ * @param c the channel to look for packages in
+ * @param user the user doing it
+ * @param setLabel the set of errata to base the package off of
+ * @return the list of PackageOverview objects
+ */
+ public static List listErrataPackagesForResync(Channel c, User user, String setLabel)
{
+ if (!user.hasRole(RoleFactory.CHANNEL_ADMIN)) {
+ throw new PermissionException(RoleFactory.CHANNEL_ADMIN);
+ }
+
+ if (c.isCloned()) {
+ Map params = new HashMap();
+ params.put("cid", c.getId());
+ params.put("set_label", setLabel);
+ ClonedChannel cc = (ClonedChannel) c;
+ params.put("ocid", cc.getOriginal().getId());
+ SelectMode m = ModeFactory.getMode("Errata_queries",
+ "list_packages_needing_sync_from_set");
+ return m.execute(params);
+ }
+ else {
+ return Collections.EMPTY_LIST;
+ }
+ }
+
}
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 4f52632..7818c97 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
@@ -39,6 +39,7 @@ import com.redhat.rhn.domain.server.ServerFactory;
import com.redhat.rhn.domain.server.VirtualInstance;
import com.redhat.rhn.domain.server.test.ServerFactoryTest;
import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.action.user.AdminUserEditAction;
import com.redhat.rhn.frontend.dto.ChannelOverview;
import com.redhat.rhn.frontend.dto.ErrataOverview;
import com.redhat.rhn.frontend.dto.EssentialChannelDto;
@@ -49,6 +50,7 @@ import com.redhat.rhn.frontend.xmlrpc.NoSuchChannelException;
import com.redhat.rhn.manager.channel.ChannelEntitlementCounter;
import com.redhat.rhn.manager.channel.ChannelManager;
import com.redhat.rhn.manager.entitlement.EntitlementManager;
+import com.redhat.rhn.manager.errata.ErrataManager;
import com.redhat.rhn.manager.rhnpackage.test.PackageManagerTest;
import com.redhat.rhn.manager.rhnset.RhnSetDecl;
import com.redhat.rhn.manager.rhnset.RhnSetManager;
@@ -747,4 +749,64 @@ public class ChannelManagerTest extends BaseTestCaseWithUser {
}
+
+ public void testListErrataNeedingResync() throws Exception {
+
+ user.addRole(RoleFactory.CHANNEL_ADMIN);
+
+ Channel ochan = ChannelFactoryTest.createTestChannel();
+ Channel cchan = ChannelFactoryTest.createTestClonedChannel(ochan, user);
+
+ Errata oe = ErrataFactoryTest.createTestErrata(null);
+ ochan.addErrata(oe);
+
+ List list = new ArrayList();
+ list.add(cchan.getId());
+
+ Errata ce = ErrataManager.createClone(user, oe);
+ ce = ErrataManager.publish(ce, list, user);
+
+ Package testPackage = PackageTest.createTestPackage();
+ oe.addPackage(testPackage);
+ ochan.addPackage(testPackage);
+
+ List<ErrataOverview> result =
ChannelManager.listErrataNeedingResync(cchan, user);
+ assertTrue(result.size() == 1);
+ assertEquals(result.get(0).getId(), ce.getId());
+
+ }
+
+ public void testListErrataPackagesForResync() throws Exception {
+
+ user.addRole(RoleFactory.CHANNEL_ADMIN);
+
+ Channel ochan = ChannelFactoryTest.createTestChannel();
+ Channel cchan = ChannelFactoryTest.createTestClonedChannel(ochan, user);
+
+ Errata oe = ErrataFactoryTest.createTestErrata(null);
+ ochan.addErrata(oe);
+
+ List list = new ArrayList();
+ list.add(cchan.getId());
+
+ Errata ce = ErrataManager.createClone(user, oe);
+ ce = ErrataManager.publish(ce, list, user);
+
+ Package testPackage = PackageTest.createTestPackage();
+ oe.addPackage(testPackage);
+ ochan.addPackage(testPackage);
+
+ RhnSet set = RhnSetDecl.ERRATA_TO_SYNC.get(user);
+ set.clear();
+ set.add(ce.getId());
+ RhnSetManager.store(set);
+
+ List<PackageOverview> result =
ChannelManager.listErrataPackagesForResync(cchan, user, set.getLabel());
+ assertTrue(result.size() == 1);
+
+ assertEquals(result.get(0).getId(), testPackage.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 2535b63..2f757e0 100644
--- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
+++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
@@ -31,6 +31,7 @@ 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.PublishedClonedErrata;
import
com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.rhnset.RhnSet;
import com.redhat.rhn.domain.role.RoleFactory;
@@ -1237,4 +1238,19 @@ public class ErrataManager extends BaseManager {
return flag;
}
+
+ /**
+ * resync an errata, including all it's details
+ * doesn't actually push any packages to a channel
+ * @param cloned the cloned errata needing resyncing
+ * @param user the user doign the syncing
+ */
+ public static void reSyncErrata(PublishedClonedErrata cloned, User user) {
+ if (!user.hasRole(RoleFactory.CHANNEL_ADMIN)) {
+ throw new PermissionException(RoleFactory.CHANNEL_ADMIN);
+ }
+ ErrataFactory.syncErrataDetails(cloned);
+ }
+
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
b/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
index d1cd5fb..a151135 100644
--- a/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
+++ b/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
@@ -81,6 +81,13 @@ public class RhnSetDecl {
public static final RhnSetDecl ERRATA_TO_DELETE_BULK =
make("errata_to_delete_bulk",
SetCleanup.UNOWNED_ERRATA);
+ // set of errata by errata_id; needs new cleanup
+ public static final RhnSetDecl ERRATA_TO_SYNC = make("errata_to_sync",
+ SetCleanup.UNOWNED_ERRATA);
+
+ public static final RhnSetDecl ERRATA_PACKAGES_TO_SYNC =
make("errata_packages_to_sync",
+ SetCleanup.UNOWNED_PACKAGES);
+
// set of file list: needs new cleanup
public static final RhnSetDecl FILE_LISTS = make("file_lists",
SetCleanup.UNOWNED_FILE_LIST);
diff --git a/java/code/webapp/WEB-INF/nav/manage_channel.xml
b/java/code/webapp/WEB-INF/nav/manage_channel.xml
index ae6cc40..acdb4cd 100644
--- a/java/code/webapp/WEB-INF/nav/manage_channel.xml
+++ b/java/code/webapp/WEB-INF/nav/manage_channel.xml
@@ -29,6 +29,10 @@
<rhn-tab-url>/network/software/channels/manage/errata/clone.pxt?pxt:trap=rhn:empty_set&set_label=errata_clone_actions</rhn-tab-url>
<rhn-tab-url>/network/software/channels/manage/errata/clone_confirm.pxt</rhn-tab-url>
</rhn-tab>
+ <rhn-tab name="Sync"
acl="channel_is_clone();user_role(channel_admin);">
+ <rhn-tab-url>/rhn/channels/manage/errata/SyncErrata.do</rhn-tab-url>
+
<rhn-tab-url>/rhn/channels/manage/errata/ConfirmSyncPackages.do</rhn-tab-url>
+ </rhn-tab>
</rhn-tab>
<rhn-tab name="Packages" acl="channel_exists()"
node-id="remove_channel_packages">
<rhn-tab-url>/rhn/channels/manage/ChannelPackageMenu.do</rhn-tab-url>
diff --git a/java/code/webapp/WEB-INF/pages/channel/manage/erratapackagesync.jsp
b/java/code/webapp/WEB-INF/pages/channel/manage/erratapackagesync.jsp
new file mode 100644
index 0000000..6a82188
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/channel/manage/erratapackagesync.jsp
@@ -0,0 +1,80 @@
+<%@ taglib
uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib
uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
+<%@ taglib
uri="http://jakarta.apache.org/struts/tags-html"
prefix="html" %>
+<%@ taglib
uri="http://jakarta.apache.org/struts/tags-bean"
prefix="bean" %>
+<%@ taglib
uri="http://rhn.redhat.com/tags/list" prefix="rl"
%>
+
+<html:xhtml/>
+<html>
+<head>
+ <meta name="page-decorator" content="none" />
+</head>
+<body>
+
+<html:messages id="message" message="true">
+ <rhn:messages><c:out escapeXml="false"
value="${message}" /></rhn:messages>
+</html:messages>
+
+<html:messages id="message" message="true">
+ <rhn:messages><c:out escapeXml="false"
value="${message}" /></rhn:messages>
+</html:messages>
+
+ <%@ include
file="/WEB-INF/pages/common/fragments/channel/manage/manage_channel_header.jspf"
%>
+<BR>
+
+<h2><img src="/img/rhn-icon-packages.gif"> <bean:message
key="header.jsp.errata.sync.packagepush"/></h2>
+
+ <bean:message key="channel.jsp.errata.sync.packages.message"/>
+
+<rl:listset name="packageSet" legend="system-group">
+
+<input type="hidden" name="cid" value="${cid}" />
+
+ <rl:list
+ decorator="SelectableDecorator"
+ emptykey="package.jsp.emptylist"
+ alphabarcolumn="nvrea"
+ filter="com.redhat.rhn.frontend.taglibs.list.filters.PackageFilter" >
+
+
+ <rl:decorator name="PageSizeDecorator"/>
+
+ <rl:selectablecolumn value="${current.id}"
+ selected="${current.selected}"
+ disabled="${not current.selectable}"
+ styleclass="first-column"/>
+
+
+
+ <rl:column sortable="true"
+ bound="false"
+ headerkey="download.jsp.package"
+ sortattr="nvrea"
+ defaultsort="asc"
+ >
+
+ <a
href="/rhn/software/packages/Details.do?pid=${current.id}">${current.nvrea}</a>
+ </rl:column>
+
+
+ <rl:column sortable="false"
+ bound="false"
+ headerkey="packagesearch.jsp.summary"
+ styleclass="last-column"
+ >
+ ${current.summary}
+ </rl:column>
+ </rl:list>
+
+ <div align="right">
+ <hr />
+ <input type="submit" name="dispatch"
+ value="<bean:message key="confirm"/>" />
+ </div>
+ <rhn:submitted/>
+
+
+</rl:listset>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/java/code/webapp/WEB-INF/pages/channel/manage/erratasync.jsp
b/java/code/webapp/WEB-INF/pages/channel/manage/erratasync.jsp
new file mode 100644
index 0000000..089d675
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/channel/manage/erratasync.jsp
@@ -0,0 +1,110 @@
+<%@ taglib
uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib
uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
+<%@ taglib
uri="http://jakarta.apache.org/struts/tags-html"
prefix="html" %>
+<%@ taglib
uri="http://jakarta.apache.org/struts/tags-bean"
prefix="bean" %>
+<%@ taglib
uri="http://rhn.redhat.com/tags/list" prefix="rl"
%>
+
+<html:xhtml/>
+<html>
+<head>
+ <meta name="page-decorator" content="none" />
+</head>
+<body>
+
+<html:messages id="message" message="true">
+ <rhn:messages><c:out escapeXml="false"
value="${message}" /></rhn:messages>
+</html:messages>
+
+
+
+ <%@ include
file="/WEB-INF/pages/common/fragments/channel/manage/manage_channel_header.jspf"
%>
+ <h2>
+ <img src="/img/rhn-icon-errata.gif" alt="erratum" />
<bean:message key="header.jsp.errata.sync"/>
+ </h2>
+
+ <bean:message key="channel.jsp.errata.sync.message"/>
+
+ <rl:listset name="errata_list_set">
+ <input type="hidden" name="cid" value="${cid}">
+
+ <rl:list
+ decorator="SelectableDecorator"
+ emptykey="channel.jsp.errata.sync.listempty"
+ alphabarcolumn="advisorySynopsis" >
+
+ <rl:decorator name="ElaborationDecorator"/>
+ <rl:decorator name="PageSizeDecorator"/>
+
+ <rl:selectablecolumn value="${current.selectionKey}"
+ selected="${current.selected}"
+ styleclass="first-column"/>
+
+
+
+
+
+ <rl:column sortable="true"
+ bound="false"
+ headerkey="erratalist.jsp.type"
+ headerclass="thin-column"
+ sortattr="advisoryType">
+ <c:if test="${current.advisoryType == 'Product
Enhancement Advisory'}">
+ <img src="/img/wrh-product.gif" alt="Product Enhancement
Advisory" title="Product Enhancement Advisory" />
+ </c:if>
+ <c:if test="${current.advisoryType == 'Security
Advisory'}">
+ <img src="/img/wrh-product.gif" alt="Product Enhancement
Advisory" title="Product Enhancement Advisory" />
+ </c:if>
+ <c:if test="${current.advisoryType == 'Bug Fix
Advisory'}">
+ <img src="/img/wrh-bug.gif" alt="Bug Fix Advisory"
title="Bug Fix Advisory" />
+ </c:if>
+
+ </rl:column>
+
+
+ <rl:column sortable="true"
+ bound="false"
+ headerkey="erratalist.jsp.advisory"
+ sortattr="advisory"
+ >
+
+ <a
href="/rhn/errata/manage/Edit.do?eid=${current.id}">${current.advisoryName}</a>
+ </rl:column>
+
+
+ <rl:column sortable="false"
+ bound="false"
+ filterattr="advisorySynopsis"
+ headerkey="erratalist.jsp.synopsis"
+ >
+ ${current.advisorySynopsis}
+ </rl:column>
+
+
+ <rl:column sortable="true"
+ bound="false"
+ headerkey="erratalist.jsp.updated"
+ styleclass="last-column"
+ sortattr="updateDateObj"
+ defaultsort="desc"
+ >
+ ${current.updateDate}
+ </rl:column>
+
+
+ </rl:list>
+
+
+ <rhn:tooltip key="channel.jsp.errata.sync.note"/>
+
+ <p align="right">
+ <input type="submit" name="dispatch"
value="<bean:message key="header.jsp.errata.sync"/>">
+ </p>
+ <rhn:submitted/>
+
+
+</rl:listset>
+
+
+</body>
+</html>
+
\ No newline at end of file
diff --git a/java/code/webapp/WEB-INF/struts-config.xml
b/java/code/webapp/WEB-INF/struts-config.xml
index 31c416e..1b8023b 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -6169,6 +6169,27 @@
<forward name="default"
path="/channels/manage/errata/Add.do" />
</action>
+
+ <action path="/channels/manage/errata/SyncErrata"
+ scope="request"
+ input="/WEB-INF/pages/channel/manage/erratasync.jsp"
+ type="com.redhat.rhn.frontend.action.channel.manage.SyncErrataAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <forward name="default"
path="/WEB-INF/pages/channel/manage/erratasync.jsp" />
+ <forward name="submit"
path="/channels/manage/errata/ConfirmSyncPackages.do"
redirect="true"/>
+ </action>
+
+ <action path="/channels/manage/errata/ConfirmSyncPackages"
+ scope="request"
+ input="/WEB-INF/pages/channel/manage/erratapackagesync.jsp"
+
type="com.redhat.rhn.frontend.action.channel.manage.SyncErrataPackagesAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <forward name="default"
path="/WEB-INF/pages/channel/manage/erratapackagesync.jsp" />
+ <forward name="submit"
path="/channels/manage/errata/SyncErrata.do" redirect="true"/>
+ </action>
+
+
+
<action path="/channels/manage/errata/Errata"
scope="request"
type="com.redhat.rhn.frontend.action.channel.manage.ErrataIndexAction"
diff --git a/web/html/nav/manage_channel.xml b/web/html/nav/manage_channel.xml
index 97d2a8f..cb764a4 100644
--- a/web/html/nav/manage_channel.xml
+++ b/web/html/nav/manage_channel.xml
@@ -26,6 +26,10 @@
<rhn-tab-url>/network/software/channels/manage/errata/clone.pxt</rhn-tab-url>
<rhn-tab-url>/network/software/channels/manage/errata/clone_confirm.pxt</rhn-tab-url>
</rhn-tab>
+ <rhn-tab name="Sync"
acl="channel_is_clone();user_role(channel_admin);"
node-id="sync_errata">
+ <rhn-tab-url>/rhn/channels/manage/errata/SyncErrata.do</rhn-tab-url>
+
<rhn-tab-url>/rhn/channels/manage/errata/ConfirmSyncPackages.do</rhn-tab-url>
+ </rhn-tab>
</rhn-tab>
<rhn-tab name="Packages" acl="channel_exists()">
<rhn-tab-url>/rhn/channels/manage/ChannelPackageMenu.do</rhn-tab-url>
commit f3f25b5bd528e2c0bb290b2423e1dedc92f9971b
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Tue Jun 2 14:25:22 2009 -0400
small fix to channel-to-update so it doesnt ignore bundle size
diff --git a/scripts/channel-to-update-level/create-channel-update
b/scripts/channel-to-update-level/create-channel-update
index a3a0d98..606f620 100755
--- a/scripts/channel-to-update-level/create-channel-update
+++ b/scripts/channel-to-update-level/create-channel-update
@@ -49,14 +49,14 @@ def main():
gather(hasOpt("C", "clear"))
exit(0)
- global server, user, password, filename, ssl
+ global server, user, password, filename, ssl, bundleSize
server = getOpt("s", "server", msg = "--server not
provided")
user = getOpt("l", "user", "--user not provided")
password = getOpt("p", "password")
if password == None:
password = getpass.getpass()
if (getOpt("b", "bundle") is not None):
- bundleSize == int(getOpt("b", "bundle"))
+ bundleSize = int(getOpt("b", "bundle"))
#did you provide a data file? If not we need all the information
if not hasOpt("D", "data"):
commit b89fcdb834dbe8b68967788152561a3ccf720c7f
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Fri May 29 15:45:24 2009 -0400
501784 - fixed issue with timed out logins that required cookie deletion to log in
again
issue resolved around the fact that we are no longer setting the domain in the java
stack, but still was in the perl coupled with the fact the expire time on the perl side
was using the config value session_cookie_lifetime which was not set, resulting in a
cookie that would only expire when the browser was closed
diff --git a/web/modules/pxt/PXT/Request.pm b/web/modules/pxt/PXT/Request.pm
index dd66184..3855b09 100644
--- a/web/modules/pxt/PXT/Request.pm
+++ b/web/modules/pxt/PXT/Request.pm
@@ -456,8 +456,8 @@ sub cookie_jar {
my $session_cookie = new Apache2::Cookie $self->{apr},
-name => $self->session_cookie_name,
-value => $self->session->key,
- #-domain => PXT::Config->get("base_domain"),
- # Don't set the cookie's domain, as it will cause issues since we aren't
setting it in the java stack
+ #-domain => PXT::Config->get("base_domain"),
+ # Don't set the cookie's domain, as it will cause issues since we aren't
setting it in the java stack
@expire,
@secure,
-path => "/";