Title: [40725] trunk/hudson/plugins/configurationslicing: partial implementation of wscleanup
Revision
40725
Author
jacob_robertson
Date
2012-10-15 09:30:04 -0400 (Mon, 15 Oct 2012)

Log Message

partial implementation of wscleanup

Modified Paths


Added Paths

Diff

Modified: trunk/hudson/plugins/configurationslicing/pom.xml (40724 => 40725)


--- trunk/hudson/plugins/configurationslicing/pom.xml	2012-10-13 07:36:42 UTC (rev 40724)
+++ trunk/hudson/plugins/configurationslicing/pom.xml	2012-10-15 13:30:04 UTC (rev 40725)
@@ -1,4 +1,5 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
 		<groupId>org.jvnet.hudson.plugins</groupId>
@@ -88,6 +89,12 @@
 			<version>1.12</version>
 			<optional>true</optional>
 		</dependency>
+		<dependency>
+			<groupId>org.jenkins-ci.plugins</groupId>
+			<artifactId>ws-cleanup</artifactId>
+			<version>0.10</version>
+			<optional>true</optional>
+		</dependency>
 	</dependencies>
 
 	<scm>

Added: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/wscleanup/AbstractWsCleanupSliceSpec.java (0 => 40725)


--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/wscleanup/AbstractWsCleanupSliceSpec.java	                        (rev 0)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/wscleanup/AbstractWsCleanupSliceSpec.java	2012-10-15 13:30:04 UTC (rev 40725)
@@ -0,0 +1,134 @@
+package configurationslicing.wscleanup;
+
+import hudson.model.AbstractProject;
+import hudson.plugins.ws_cleanup.Pattern;
+import hudson.plugins.ws_cleanup.Pattern.PatternType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import configurationslicing.UnorderedStringSlicer.UnorderedStringSlicerSpec;
+
+public abstract class AbstractWsCleanupSliceSpec extends UnorderedStringSlicerSpec<AbstractProject<?,?>> {
+
+	private static final String DISABLED = "(Disabled)";
+	private static final String SEPARATOR = ",";
+	private static final String INCLUDE = "+";
+	private static final String EXCLUDE = "-";
+	
+	private String url;
+	private String name;
+	
+	public AbstractWsCleanupSliceSpec(String url, String name) {
+		this.url = ""
+		this.name = name;
+	}
+
+	@Override
+	public String getDefaultValueString() {
+		return DISABLED;
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public String getName(AbstractProject<?, ?> item) {
+		return item.getName();
+	}
+
+	@Override
+	public String getUrl() {
+		return url;
+	}
+
+	@Override
+	public List<String> getValues(AbstractProject<?, ?> item) {
+		List<String> values = new ArrayList<String>();
+		CleanupInfo info = getCleanupInfo(item);
+		if (info == null) {
+			values.add(DISABLED);
+		} else {
+			StringBuilder buf = new StringBuilder();
+			buf.append(String.valueOf(info.appliesToDirectories));
+			if (isSkipEnabled()) {
+				buf.append(SEPARATOR);
+				buf.append(String.valueOf(info.skipWhenFailed));
+			}
+			for (Pattern pattern: info.patterns) {
+				buf.append(SEPARATOR);
+				if (pattern.getType() == PatternType.EXCLUDE) {
+					buf.append(EXCLUDE);
+				} else {
+					buf.append(INCLUDE);
+				}
+				buf.append(pattern.getPattern());
+			}
+			values.add(buf.toString());
+		}
+		return values;
+	}
+
+	public abstract CleanupInfo getCleanupInfo(AbstractProject<?, ?> item);
+
+	@Override
+	public boolean setValues(AbstractProject<?, ?> item, List<String> list) {
+		if (list != null && !list.isEmpty()) {
+			String value = list.get(0);
+			if (value.equals(DISABLED)) {
+				setCleanupInfo(item, null);
+				return true;
+			} else {
+				CleanupInfo info = new CleanupInfo();
+				String[] split = value.split(SEPARATOR);
+				int pos = 0;
+				info.appliesToDirectories = Boolean.parseBoolean(split[pos++]);
+				if (isSkipEnabled()) {
+					info.skipWhenFailed = Boolean.parseBoolean(split[pos++]);
+				}
+				for (int i = pos; i < split.length; i++) {
+					String patternTypeString = split[i].substring(0, 1);
+					String patternString = split[i].substring(1);
+					PatternType type;
+					if (INCLUDE.equals(patternTypeString)) {
+						type = PatternType.INCLUDE;
+					} else {
+						type = PatternType.EXCLUDE;
+					}
+					Pattern pattern = new Pattern(patternString, type);
+					info.patterns.add(pattern);
+				}
+				
+				return setCleanupInfo(item, info);
+			}
+		}
+		return false;
+	}
+	public abstract boolean isSkipEnabled();
+	public abstract boolean setCleanupInfo(AbstractProject<?, ?> item, CleanupInfo info);
+
+	@Override
+	public String getConfiguredValueDescription() {
+		StringBuilder buf = new StringBuilder();
+		buf.append("Apply to Directories,");
+		if (isSkipEnabled()) {
+			buf.append("Skip on Fail,");
+		}
+		buf.append("-Exclude Pattern,+Include Pattern,...");
+		buf.append("<br/><i>(e.g. false,");
+		if (isSkipEnabled()) {
+			buf.append("true,");
+		}
+		buf.append("+config/**,-*.xml,-*.txt)</i>");
+		return buf.toString();
+	}
+
+	public static class CleanupInfo {
+		public List<Pattern> patterns = new ArrayList<Pattern>();
+		public boolean appliesToDirectories = false;
+		public boolean skipWhenFailed = false;
+	}
+
+}
Property changes on: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/wscleanup/AbstractWsCleanupSliceSpec.java
___________________________________________________________________

Added: svn:mime-type

Added: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/wscleanup/CleanupBeforeSlicer.java (0 => 40725)


--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/wscleanup/CleanupBeforeSlicer.java	                        (rev 0)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/wscleanup/CleanupBeforeSlicer.java	2012-10-15 13:30:04 UTC (rev 40725)
@@ -0,0 +1,62 @@
+package configurationslicing.wscleanup;
+
+import hudson.Extension;
+import hudson.model.AbstractProject;
+import hudson.model.BuildableItemWithBuildWrappers;
+import hudson.model.Descriptor;
+import hudson.model.Hudson;
+import hudson.plugins.ws_cleanup.PreBuildCleanup;
+import hudson.tasks.BuildWrapper;
+import hudson.util.DescribableList;
+
+import java.util.List;
+
+import configurationslicing.UnorderedStringSlicer;
+
+@Extension
+public class CleanupBeforeSlicer extends UnorderedStringSlicer<AbstractProject<?, ?>> {
+
+	public CleanupBeforeSlicer() {
+		super(new CleanupBeforeSliceSpec());
+	}
+
+	public static class CleanupBeforeSliceSpec extends AbstractWsCleanupSliceSpec {
+
+		public CleanupBeforeSliceSpec() {
+			super("wscleanupbefore", "Delete workspace before build starts");
+		}
+
+		@Override
+		public CleanupInfo getCleanupInfo(AbstractProject<?, ?> item) {
+			CleanupInfo info = new CleanupInfo();
+			
+			BuildableItemWithBuildWrappers bi = (BuildableItemWithBuildWrappers) item;
+			DescribableList<BuildWrapper,Descriptor<BuildWrapper>> wrappers = bi.getBuildWrappersList();
+			boolean changed = false;
+			PreBuildCleanup wrapper = wrappers.get(PreBuildCleanup.class);
+			
+			if (changed) {
+				
+			}
+			
+			return info;
+		}
+
+		@Override
+		public boolean setCleanupInfo(AbstractProject<?, ?> item, CleanupInfo info) {
+			return false;
+		}
+		@Override
+		public boolean isSkipEnabled() {
+			// we do not allow skip on fail in the cleanup before
+			return false;
+		}
+		@SuppressWarnings("unchecked")
+		@Override
+		public List<AbstractProject<?, ?>> getWorkDomain() {
+            return (List) Hudson.getInstance().getItems(BuildableItemWithBuildWrappers.class);
+		}
+	
+	}
+	
+}
Property changes on: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/wscleanup/CleanupBeforeSlicer.java
___________________________________________________________________

Added: svn:mime-type

Reply via email to