Sync bndlib code

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1399825 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/bnd/differ/Baseline.java b/bundleplugin/src/main/java/aQute/bnd/differ/Baseline.java
index fe79c7d..cd2d9b6 100644
--- a/bundleplugin/src/main/java/aQute/bnd/differ/Baseline.java
+++ b/bundleplugin/src/main/java/aQute/bnd/differ/Baseline.java
@@ -78,7 +78,14 @@
 
 		newerVersion = getVersion(n);
 		olderVersion = getVersion(o);
-		
+
+		boolean firstRelease = false;
+		if (o.get("<manifest>") == null) {
+			firstRelease = true;
+			if (newerVersion.equals(Version.emptyVersion)) {
+				newerVersion = Version.ONE;
+			}
+		}
 		Delta highestDelta = Delta.MICRO;
 		for (Diff pdiff : apiDiff.getChildren()) {
 			if (pdiff.getType() != Type.PACKAGE) // Just packages
@@ -108,7 +115,14 @@
 			} else if (pdiff.getDelta() == Delta.REMOVED) {
 				info.suggestedVersion = null;
 			} else if (pdiff.getDelta() == Delta.ADDED) {
-				info.suggestedVersion = Version.ONE;
+				if (firstRelease) {
+					info.suggestedVersion = info.newerVersion;
+					if (info.suggestedVersion.equals(Version.emptyVersion)) {
+						info.suggestedVersion = newerVersion.getWithoutQualifier();
+					}
+				} else {
+					info.suggestedVersion = Version.ONE;
+				}
 			} else {
 				// We have an API change
 				info.suggestedVersion = bump(pdiff.getDelta(), info.olderVersion, 1, 0);
@@ -151,9 +165,10 @@
 				highestDelta = pdiff.getDelta();
 			}
 		}
-		suggestedVersion = bumpBundle(highestDelta, olderVersion, 1, 0);
-		if (suggestedVersion.getMajor() == 0) {
-			suggestedVersion = Version.ONE;
+		if (firstRelease) {
+			suggestedVersion = newerVersion;
+		} else {
+			suggestedVersion = bumpBundle(highestDelta, olderVersion, 1, 0);
 		}
 		return infos;
 	}
diff --git a/bundleplugin/src/main/java/aQute/bnd/differ/DiffPluginImpl.java b/bundleplugin/src/main/java/aQute/bnd/differ/DiffPluginImpl.java
index 38de872..c1d28a4 100644
--- a/bundleplugin/src/main/java/aQute/bnd/differ/DiffPluginImpl.java
+++ b/bundleplugin/src/main/java/aQute/bnd/differ/DiffPluginImpl.java
@@ -33,6 +33,11 @@
 	 */
 	final static Set<String>	IGNORE_HEADERS	= new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
 
+	/**
+	 * Headers that have values that should be sorted
+	 */
+	final static Set<String>	ORDERED_HEADERS	= new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
+
 	static {
 		MAJOR_HEADERS.add(Constants.EXPORT_PACKAGE);
 		MAJOR_HEADERS.add(Constants.IMPORT_PACKAGE);
@@ -47,6 +52,8 @@
 		IGNORE_HEADERS.add(Constants.TOOL);
 		IGNORE_HEADERS.add(Constants.BND_LASTMODIFIED);
 		IGNORE_HEADERS.add(Constants.CREATED_BY);
+
+		ORDERED_HEADERS.add(Constants.SERVICE_COMPONENT);
 	}
 
 	/**
@@ -166,6 +173,10 @@
 					clausesDef.add(new Element(Type.CLAUSE, clause.getKey(), parameterDef, CHANGED, CHANGED, null));
 				}
 				result.add(new Element(Type.HEADER, header, clausesDef, CHANGED, CHANGED, null));
+			} else if (ORDERED_HEADERS.contains(header)) {
+				ExtList<String> values = ExtList.from(value);
+				Collections.sort(values);
+				result.add(new Element(Type.HEADER, header + ":" + values.join(), null, CHANGED, CHANGED, null));
 			} else {
 				result.add(new Element(Type.HEADER, header + ":" + value, null, CHANGED, CHANGED, null));
 			}