java/code/src/com/redhat/rhn/frontend/action/configuration/ConfigFileForm.java |
4 +
java/code/src/com/redhat/rhn/frontend/action/configuration/files/FileDetailsAction.java |
3
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml |
6 +
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml |
6 +
java/code/src/com/redhat/rhn/manager/configuration/ConfigFileBuilder.java |
32 ++++++++++
java/code/src/com/redhat/rhn/manager/configuration/file/ConfigFileData.java |
17 +++++
java/code/webapp/WEB-INF/pages/common/fragments/configuration/files/details.jspf |
9 ++
java/code/webapp/WEB-INF/struts-config.xml |
1
8 files changed, 77 insertions(+), 1 deletion(-)
New commits:
commit 663f0cb9c44dfaa49b115537d8989af9a4b0c1d1
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Fri Feb 12 16:54:49 2010 -0500
510100 - adding the ability to set a config file to a certain revision
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/configuration/ConfigFileForm.java
b/java/code/src/com/redhat/rhn/frontend/action/configuration/ConfigFileForm.java
index 84233df..99ed406 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/configuration/ConfigFileForm.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/configuration/ConfigFileForm.java
@@ -68,6 +68,9 @@ public class ConfigFileForm extends ScrubbingDynaActionForm {
public static final String REV_EDITABLE = "editable";
public static final String REV_DISPLAYABLE = "displayable";
public static final String REV_TOOLARGE = "toolarge";
+ public static final String REV_NUMBER = "revnum";
+
+
public static final String DEFAULT_CONFIG_DELIM_START = "{|";
public static final String DEFAULT_CONFIG_DELIM_END = "|}";
@@ -313,6 +316,7 @@ public class ConfigFileForm extends ScrubbingDynaActionForm {
data.setOwner(getString(REV_UID));
data.setPermissions(getString(REV_PERMS));
data.setSelinuxCtx(getString(REV_SELINUX_CTX));
+ data.setRevNumber(getString(REV_NUMBER));
data.setType(extractFileType());
return data;
}
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/configuration/files/FileDetailsAction.java
b/java/code/src/com/redhat/rhn/frontend/action/configuration/files/FileDetailsAction.java
index bab6b56..d51808b 100644
---
a/java/code/src/com/redhat/rhn/frontend/action/configuration/files/FileDetailsAction.java
+++
b/java/code/src/com/redhat/rhn/frontend/action/configuration/files/FileDetailsAction.java
@@ -54,6 +54,7 @@ public class FileDetailsAction extends RhnAction {
public static final String LAST_USER = "lastUser";
public static final String LAST_USER_ID = "lastUserId";
public static final String TOOLARGE = "toolarge";
+ public static final String REV_NUM = "revnum";
public static final String VALIDATION_XSD =
"/com/redhat/rhn/frontend/action/configuration/validation/configFileForm.xsd";
@@ -144,6 +145,8 @@ public class FileDetailsAction extends RhnAction {
StringUtil.categorizeTime(cr.getConfigContent().
getModified().getTime(),
StringUtil.WEEKS_UNITS));
+ request.setAttribute(REV_NUM,
+ cr.getConfigFile().getLatestConfigRevision().getRevision() + 1);
User lastUser = cr.getChangedBy();
if (lastUser != null) {
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 5cb08b1..0c618f1 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -8454,6 +8454,12 @@ Follow this url to see the full list of inactive systems:
<trans-unit id="channeltarget.success">
<source>Subscribed {0} system(s) to {1}.</source>
</trans-unit>
+ <trans-unit id="error.config.revnum.too-old">
+ <source>The specified revision number must be greater than the current
revision number.</source>
+ </trans-unit>
+ <trans-unit id="error.config.revnum.invalid">
+ <source>Please specify a valid revision number.</source>
+ </trans-unit>
<trans-unit id="kickstart.cobbler.distro.syncfail">
<source>
The following is a list of errors gathered while Spacewalk attempts to
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 efb6ddf..72d6dab 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
@@ -21559,7 +21559,11 @@ given channel.</source>
</trans-unit>
<trans-unit id="channel.edit.jsp.sync">
<source>Sync Repo</source>
- </trans-unit>
+ </trans-unit>
+ <trans-unit id="filedetails.details.jspf.revnum">
+ <source>Next revision number:</source>
+ </trans-unit>
+
</body>
</file>
</xliff>
diff --git a/java/code/src/com/redhat/rhn/manager/configuration/ConfigFileBuilder.java
b/java/code/src/com/redhat/rhn/manager/configuration/ConfigFileBuilder.java
index 638abef..507bd85 100644
--- a/java/code/src/com/redhat/rhn/manager/configuration/ConfigFileBuilder.java
+++ b/java/code/src/com/redhat/rhn/manager/configuration/ConfigFileBuilder.java
@@ -26,6 +26,8 @@ import com.redhat.rhn.domain.config.ConfigurationFactory;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.manager.configuration.file.ConfigFileData;
+import org.apache.commons.lang.StringUtils;
+
import java.io.IOException;
@@ -108,6 +110,15 @@ public class ConfigFileBuilder {
return makeNewRevision(user, cff, cf, true);
}
+
+ private ConfigRevision makeNewRevision(User user, ConfigFileData form,
+ ConfigFile cf, boolean onCreate, Long revNum) {
+ ConfigRevision rev = makeNewRevision(user, form, cf, onCreate);
+ rev.setRevision(revNum);
+ ConfigurationFactory.saveNewConfigRevision(rev);
+ return rev;
+ }
+
/**
* Creates a new New config revision of a config file using the passed in data.
* @param user the logged in user
@@ -141,6 +152,10 @@ public class ConfigFileBuilder {
revision.setConfigFile(cf);
revision.setDelimStart(form.getMacroStart());
revision.setDelimEnd(form.getMacroEnd());
+ if (!StringUtils.isEmpty(form.getRevNumber())) {
+ revision.setRevision(Long.parseLong(form.getRevNumber()));
+ }
+
// Committing the revision commits the file for us (which commits the
// Channel, so everybody's pointers get updated...)
@@ -175,6 +190,23 @@ public class ConfigFileBuilder {
throw new ValidatorException(result);
}
else {
+ try {
+ Long l = Long.parseLong(form.getRevNumber());
+ if (l.longValue() <= file.getLatestConfigRevision().getRevision()) {
+ result = new ValidatorResult();
+ result.addError(new
ValidatorError("error.config.revnum.too-old",
+ form.getPath()));
+ throw new ValidatorException(result);
+ }
+ }
+ catch (NumberFormatException nfe) {
+ result = new ValidatorResult();
+ result.addError(new
ValidatorError("error.config.revnum.invalid",
+ form.getPath()));
+ throw new ValidatorException(result);
+ }
+
+
form.validate(false);
}
diff --git a/java/code/src/com/redhat/rhn/manager/configuration/file/ConfigFileData.java
b/java/code/src/com/redhat/rhn/manager/configuration/file/ConfigFileData.java
index 77e9a72..1c5e28f 100644
--- a/java/code/src/com/redhat/rhn/manager/configuration/file/ConfigFileData.java
+++ b/java/code/src/com/redhat/rhn/manager/configuration/file/ConfigFileData.java
@@ -52,6 +52,7 @@ public abstract class ConfigFileData {
private String selinuxCtx;
private String macroStart;
private String macroEnd;
+ private String revNumber;
private ConfigFileType type;
@@ -400,4 +401,20 @@ public abstract class ConfigFileData {
append("Size:", getContentSize());
return builder.toString();
}
+
+
+ /**
+ * @return Returns the revNumber.
+ */
+ public String getRevNumber() {
+ return revNumber;
+ }
+
+
+ /**
+ * @param revNumberIn The revNumber to set.
+ */
+ public void setRevNumber(String revNumberIn) {
+ this.revNumber = revNumberIn;
+ }
}
diff --git
a/java/code/webapp/WEB-INF/pages/common/fragments/configuration/files/details.jspf
b/java/code/webapp/WEB-INF/pages/common/fragments/configuration/files/details.jspf
index 94466b7..b1e2907 100644
--- a/java/code/webapp/WEB-INF/pages/common/fragments/configuration/files/details.jspf
+++ b/java/code/webapp/WEB-INF/pages/common/fragments/configuration/files/details.jspf
@@ -109,4 +109,13 @@
</c:choose>
</td>
</tr>
+<tr>
+<rhn:require acl="config_channel_editable(${channel.id})"
+
mixins="com.redhat.rhn.common.security.acl.ConfigAclHandler">
+ <th> <bean:message key="filedetails.details.jspf.revnum"/>
</th>
+ <td>
+ <html:text property="revnum" size="4"
value="${revision.revision + 1}"/>
+ </td>
+ </rhn:require>
+</tr>
</table>
diff --git a/java/code/webapp/WEB-INF/struts-config.xml
b/java/code/webapp/WEB-INF/struts-config.xml
index c629f83..c522cd1 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -899,6 +899,7 @@
<form-property name="cffUpload"
type="org.apache.struts.upload.FormFile" />
<form-property name="contents"
type="java.lang.String"/>
<form-property name="filetype" type="java.lang.String"
/>
+ <form-property name="revnum" type="java.lang.String"
/>
<form-property name="binary" type="java.lang.Boolean"
/>
<form-property name="submitted"
type="java.lang.Boolean"/>
</form-bean>