Bug 477007 - Do not use white space in XML

Writing and reading XML white space is unnecessary from a programmatic
point of view, and increases the size of compressed and decompressed
files.  Given that the repository sizes can be quite large removing the
white space at creation time will save download and decompression memory
bandwidth.

Removing white space from the artifacts.xml file results in around a
10% space saving before compression.

Change-Id: If93e38ca9c185e811952f5510ff28f000eadf130
Signed-off-by: Alex Blewitt <alex.blewitt@gmail.com>
diff --git a/bundles/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
index 6b0c041..b864b2c 100644
--- a/bundles/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.repository;singleton:=true
-Bundle-Version: 2.4.700.qualifier
+Bundle-Version: 2.4.800.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.repository.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.equinox.p2.repository/pom.xml b/bundles/org.eclipse.equinox.p2.repository/pom.xml
index 87f92ca..441861d 100644
--- a/bundles/org.eclipse.equinox.p2.repository/pom.xml
+++ b/bundles/org.eclipse.equinox.p2.repository/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.p2.repository</artifactId>
-  <version>2.4.700-SNAPSHOT</version>
+  <version>2.4.800-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLWriter.java b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLWriter.java
index 011417d..0922d3c 100644
--- a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLWriter.java
+++ b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLWriter.java
@@ -22,6 +22,8 @@
 
 public class XMLWriter implements XMLConstants {
 
+	static final boolean useWhitespace = Boolean.getBoolean("p2.useWhitespace"); //$NON-NLS-1$
+
 	public static class ProcessingInstruction {
 
 		private String target;
@@ -82,7 +84,9 @@
 		if (this.open) {
 			println('>');
 		}
-		indent();
+		if (useWhitespace) {
+			indent();
+		}
 		print('<');
 		print(name);
 		this.elements.push(name);
@@ -308,15 +312,25 @@
 	}
 
 	private void println(char c) {
-		this.pw.println(c);
+		if (useWhitespace) {
+			this.pw.println(c);
+		} else {
+			this.pw.print(c);
+		}
 	}
 
 	private void println(String s) {
-		this.pw.println(s);
+		if (useWhitespace) {
+			this.pw.println(s);
+		} else {
+			this.pw.print(s);
+		}
 	}
 
 	private void println() {
-		this.pw.println();
+		if (useWhitespace) {
+			this.pw.println();
+		}
 	}
 
 	private void print(char c) {
@@ -331,14 +345,18 @@
 		if (s.length() == 0) {
 			println();
 		} else {
-			indent();
+			if (useWhitespace) {
+				indent();
+			}
 			println(escape ? escape(s) : s);
 		}
 	}
 
 	private void indent() {
-		for (int i = this.elements.size(); i > 0; i -= 1) {
-			print(this.indent);
+		if (useWhitespace) {
+			for (int i = this.elements.size(); i > 0; i -= 1) {
+				print(this.indent);
+			}
 		}
 	}
 
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
index 1c448b7..0c67700 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.touchpoint.eclipse;singleton:=true
-Bundle-Version: 2.2.600.qualifier
+Bundle-Version: 2.2.700.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.touchpoint.eclipse.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
index 226e6ab..13bdda6 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.p2.touchpoint.eclipse</artifactId>
-  <version>2.2.600-SNAPSHOT</version>
+  <version>2.2.700-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/XMLWriter.java b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/XMLWriter.java
index 905bc86..d096cb4 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/XMLWriter.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/XMLWriter.java
@@ -25,6 +25,8 @@
 public class XMLWriter extends PrintWriter {
 	protected int tab;
 
+	static final boolean useWhitespace = Boolean.getBoolean("p2.useWhitespace"); //$NON-NLS-1$
+
 	/* constants */
 	protected static final String XML_VERSION = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; //$NON-NLS-1$
 
@@ -69,9 +71,9 @@
 				sb.append("\""); //$NON-NLS-1$
 			}
 		sb.append(">"); //$NON-NLS-1$
-		if (shouldTab)
+		if (shouldTab && useWhitespace)
 			printTabulation();
-		if (newLine)
+		if (newLine && useWhitespace)
 			println(sb.toString());
 		else
 			print(sb.toString());
diff --git a/features/org.eclipse.equinox.p2.core.feature/feature.xml b/features/org.eclipse.equinox.p2.core.feature/feature.xml
index c1577fe..2e1ca83 100644
--- a/features/org.eclipse.equinox.p2.core.feature/feature.xml
+++ b/features/org.eclipse.equinox.p2.core.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.equinox.p2.core.feature"
       label="%featureName"
-      version="1.6.600.qualifier"
+      version="1.6.700.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="0.0.0">
diff --git a/features/org.eclipse.equinox.p2.core.feature/forceQualifierUpdate.txt b/features/org.eclipse.equinox.p2.core.feature/forceQualifierUpdate.txt
index a75bf15..f878148 100644
--- a/features/org.eclipse.equinox.p2.core.feature/forceQualifierUpdate.txt
+++ b/features/org.eclipse.equinox.p2.core.feature/forceQualifierUpdate.txt
@@ -18,4 +18,5 @@
 Bug 444188 - Fix concurrent access to listener collections
 Bug 542873 - IBuild I20181217-1800 failed due to unresolved project dependencies.
 Bug 551174 - Comparator errors in 4.14 I build - I20190917-1800
-Bug 553238 - Unanticipated comparator errors in I20191119-1800
\ No newline at end of file
+Bug 553238 - Unanticipated comparator errors in I20191119-1800
+Bug 477007 - Do not use whitespace in XML
diff --git a/features/org.eclipse.equinox.p2.core.feature/pom.xml b/features/org.eclipse.equinox.p2.core.feature/pom.xml
index 02ec5a7..3ba1d17 100644
--- a/features/org.eclipse.equinox.p2.core.feature/pom.xml
+++ b/features/org.eclipse.equinox.p2.core.feature/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.p2.core.feature</artifactId>
-  <version>1.6.600-SNAPSHOT</version>
+  <version>1.6.700-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
 
diff --git a/features/org.eclipse.equinox.p2.extras.feature/feature.xml b/features/org.eclipse.equinox.p2.extras.feature/feature.xml
index 2c6eb1a..7a791b9 100644
--- a/features/org.eclipse.equinox.p2.extras.feature/feature.xml
+++ b/features/org.eclipse.equinox.p2.extras.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.equinox.p2.extras.feature"
       label="%featureName"
-      version="1.4.800.qualifier"
+      version="1.4.900.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="0.0.0">
diff --git a/features/org.eclipse.equinox.p2.extras.feature/forceQualifierUpdate.txt b/features/org.eclipse.equinox.p2.extras.feature/forceQualifierUpdate.txt
index 14e118e..0cc86fe 100644
--- a/features/org.eclipse.equinox.p2.extras.feature/forceQualifierUpdate.txt
+++ b/features/org.eclipse.equinox.p2.extras.feature/forceQualifierUpdate.txt
@@ -4,3 +4,4 @@
 Bug 458346 - Unusual, hard to decipher error in I-build
 Bug 506597 - Build failure on I20161026-2000
 Bug 551174 - Comparator errors in 4.14 I build - I20190917-1800
+Bug 477007 - Do not use whitespace in XML
diff --git a/features/org.eclipse.equinox.p2.extras.feature/pom.xml b/features/org.eclipse.equinox.p2.extras.feature/pom.xml
index 3ab9471..97141f0 100644
--- a/features/org.eclipse.equinox.p2.extras.feature/pom.xml
+++ b/features/org.eclipse.equinox.p2.extras.feature/pom.xml
@@ -19,7 +19,7 @@
   </parent>
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.p2.extras.feature</artifactId>
-  <version>1.4.800-SNAPSHOT</version>
+  <version>1.4.900-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.equinox.p2.rcp.feature/feature.xml b/features/org.eclipse.equinox.p2.rcp.feature/feature.xml
index 624e4ea..8ac798d 100644
--- a/features/org.eclipse.equinox.p2.rcp.feature/feature.xml
+++ b/features/org.eclipse.equinox.p2.rcp.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.equinox.p2.rcp.feature"
       label="%featureName"
-      version="1.4.800.qualifier"
+      version="1.4.900.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="0.0.0">
diff --git a/features/org.eclipse.equinox.p2.rcp.feature/forceQualifierUpdate.txt b/features/org.eclipse.equinox.p2.rcp.feature/forceQualifierUpdate.txt
index 14e118e..0cc86fe 100644
--- a/features/org.eclipse.equinox.p2.rcp.feature/forceQualifierUpdate.txt
+++ b/features/org.eclipse.equinox.p2.rcp.feature/forceQualifierUpdate.txt
@@ -4,3 +4,4 @@
 Bug 458346 - Unusual, hard to decipher error in I-build
 Bug 506597 - Build failure on I20161026-2000
 Bug 551174 - Comparator errors in 4.14 I build - I20190917-1800
+Bug 477007 - Do not use whitespace in XML
diff --git a/features/org.eclipse.equinox.p2.rcp.feature/pom.xml b/features/org.eclipse.equinox.p2.rcp.feature/pom.xml
index 625e103..e1fd6e1 100644
--- a/features/org.eclipse.equinox.p2.rcp.feature/pom.xml
+++ b/features/org.eclipse.equinox.p2.rcp.feature/pom.xml
@@ -20,7 +20,7 @@
 
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.p2.rcp.feature</artifactId>
-  <version>1.4.800-SNAPSHOT</version>
+  <version>1.4.900-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.equinox.p2.sdk/feature.xml b/features/org.eclipse.equinox.p2.sdk/feature.xml
index 0e41eff..e09375a 100644
--- a/features/org.eclipse.equinox.p2.sdk/feature.xml
+++ b/features/org.eclipse.equinox.p2.sdk/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.equinox.p2.sdk"
       label="%featureName"
-      version="3.11.800.qualifier"
+      version="3.11.900.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="0.0.0">
diff --git a/features/org.eclipse.equinox.p2.sdk/forceQualifierUpdate.txt b/features/org.eclipse.equinox.p2.sdk/forceQualifierUpdate.txt
index c27d7dd..dadb2b6 100644
--- a/features/org.eclipse.equinox.p2.sdk/forceQualifierUpdate.txt
+++ b/features/org.eclipse.equinox.p2.sdk/forceQualifierUpdate.txt
@@ -11,4 +11,5 @@
 Bug 458346 - Unusual, hard to decipher error in I-build
 Bug 506597 - Build failure on I20161026-2000
 Bug 551174 - Comparator errors in 4.14 I build - I20190917-1800
-Bug 553238 - Unanticipated comparator errors in I20191119-1800
\ No newline at end of file
+Bug 553238 - Unanticipated comparator errors in I20191119-1800
+Bug 477007 - Do not use whitespace in XML
diff --git a/features/org.eclipse.equinox.p2.sdk/pom.xml b/features/org.eclipse.equinox.p2.sdk/pom.xml
index 9b2f48b..af73a82 100644
--- a/features/org.eclipse.equinox.p2.sdk/pom.xml
+++ b/features/org.eclipse.equinox.p2.sdk/pom.xml
@@ -20,6 +20,6 @@
   </parent>
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.p2.sdk</artifactId>
-  <version>3.11.800-SNAPSHOT</version>
+  <version>3.11.900-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/features/org.eclipse.equinox.p2.user.ui/feature.xml b/features/org.eclipse.equinox.p2.user.ui/feature.xml
index 71dccfa..683f373 100644
--- a/features/org.eclipse.equinox.p2.user.ui/feature.xml
+++ b/features/org.eclipse.equinox.p2.user.ui/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.equinox.p2.user.ui"
       label="%featureName"
-      version="2.4.800.qualifier"
+      version="2.4.900.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="0.0.0">
diff --git a/features/org.eclipse.equinox.p2.user.ui/forceQualifierUpdate.txt b/features/org.eclipse.equinox.p2.user.ui/forceQualifierUpdate.txt
index 14e118e..0cc86fe 100644
--- a/features/org.eclipse.equinox.p2.user.ui/forceQualifierUpdate.txt
+++ b/features/org.eclipse.equinox.p2.user.ui/forceQualifierUpdate.txt
@@ -4,3 +4,4 @@
 Bug 458346 - Unusual, hard to decipher error in I-build
 Bug 506597 - Build failure on I20161026-2000
 Bug 551174 - Comparator errors in 4.14 I build - I20190917-1800
+Bug 477007 - Do not use whitespace in XML
diff --git a/features/org.eclipse.equinox.p2.user.ui/pom.xml b/features/org.eclipse.equinox.p2.user.ui/pom.xml
index 63734b0..9dfdf4b 100644
--- a/features/org.eclipse.equinox.p2.user.ui/pom.xml
+++ b/features/org.eclipse.equinox.p2.user.ui/pom.xml
@@ -20,7 +20,7 @@
 
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.p2.user.ui</artifactId>
-  <version>2.4.800-SNAPSHOT</version>
+  <version>2.4.900-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>