Latest bnd sync

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1370165 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/Container.java b/bundleplugin/src/main/java/aQute/bnd/build/Container.java
index 8a721c9..0de335d 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/Container.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/Container.java
@@ -103,12 +103,14 @@
 		return error;
 	}
 
+	@Override
 	public boolean equals(Object other) {
 		if (other instanceof Container)
 			return file.equals(((Container) other).file);
 		return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return file.hashCode();
 	}
@@ -122,6 +124,7 @@
 	 * 
 	 * @return
 	 */
+	@Override
 	public String toString() {
 		if (getError() != null)
 			return "/error/" + getError();
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/Project.java b/bundleplugin/src/main/java/aQute/bnd/build/Project.java
index 06a4f8e..9c5c2ec 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/Project.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/Project.java
@@ -14,6 +14,7 @@
 import aQute.bnd.osgi.*;
 import aQute.bnd.osgi.eclipse.*;
 import aQute.bnd.service.*;
+import aQute.bnd.service.RepositoryPlugin.PutResult;
 import aQute.bnd.service.RepositoryPlugin.Strategy;
 import aQute.bnd.service.action.*;
 import aQute.bnd.version.*;
@@ -146,6 +147,7 @@
 		return workspace;
 	}
 
+	@Override
 	public String toString() {
 		return getBase().getName();
 	}
@@ -202,7 +204,9 @@
 					// Set default bin directory
 					output = getOutput0();
 					if (!output.exists()) {
-						output.mkdirs();
+						if (!output.mkdirs()) {
+							throw new IOException("Could not create directory " + output);
+						}
 						getWorkspace().changedFile(output);
 					}
 					if (!output.isDirectory())
@@ -296,10 +300,12 @@
 	/**
 	 * 
 	 */
-	private File getTarget0() {
+	private File getTarget0() throws IOException {
 		File target = getFile(getProperty("target", "generated"));
 		if (!target.exists()) {
-			target.mkdirs();
+			if (!target.mkdirs()) {
+				throw new IOException("Could not create directory " + target);
+			}
 			getWorkspace().changedFile(target);
 		}
 		return target;
@@ -809,15 +815,16 @@
 		return join(list, separator);
 	}
 
+	@Override
 	protected Object[] getMacroDomains() {
 		return new Object[] {
 			workspace
 		};
 	}
 
-	public File release(Jar jar) throws Exception {
+	public File release(String jarName, InputStream jarStream) throws Exception {
 		String name = getProperty(Constants.RELEASEREPO);
-		return release(name, jar);
+		return release(name, jarName, jarStream);
 	}
 
 	/**
@@ -825,11 +832,12 @@
 	 * 
 	 * @param name
 	 *            The repository name
-	 * @param jar
+	 * @param jarName
+	 * @param jarStream
 	 * @return
 	 * @throws Exception
 	 */
-	public File release(String name, Jar jar) throws Exception {
+	public File release(String name, String jarName, InputStream jarStream) throws Exception {
 		trace("release %s", name);
 		List<RepositoryPlugin> plugins = getPlugins(RepositoryPlugin.class);
 		RepositoryPlugin rp = null;
@@ -848,14 +856,11 @@
 
 		if (rp != null) {
 			try {
-				File file = rp.put(jar);
-				trace("Released %s to file %s in repository %s", jar.getName(), file, rp);
+				PutResult r = rp.put(jarStream, new RepositoryPlugin.PutOptions());
+				trace("Released %s to %s in repository %s", jarName, r.artifact, rp);
 			}
 			catch (Exception e) {
-				msgs.Release_Into_Exception_(jar, rp, e);
-			}
-			finally {
-				jar.close();
+				msgs.Release_Into_Exception_(jarName, rp, e);
 			}
 		} else if (name == null)
 			msgs.NoNameForReleaseRepository();
@@ -890,15 +895,8 @@
 		}
 		trace("build ", Arrays.toString(jars));
 		for (File jar : jars) {
-			Jar j = new Jar(jar);
-			try {
-				release(name, j);
-			}
-			finally {
-				j.close();
-			}
+			release(name, jar.getName(), new BufferedInputStream(new FileInputStream(jar)));
 		}
-
 	}
 
 	/**
@@ -1114,17 +1112,13 @@
 		}
 
 		if (rp != null) {
-			Jar jar = new Jar(file);
 			try {
-				rp.put(jar);
+				rp.put(new BufferedInputStream(new FileInputStream(file)), new RepositoryPlugin.PutOptions());
 				return;
 			}
 			catch (Exception e) {
 				msgs.DeployingFile_On_Exception_(file, rp.getName(), e);
 			}
-			finally {
-				jar.close();
-			}
 			return;
 		}
 		trace("No repo found " + file);
@@ -1155,22 +1149,16 @@
 		}
 		File[] outputs = getBuildFiles();
 		for (File output : outputs) {
-			Jar jar = new Jar(output);
-			try {
 				for (Deploy d : getPlugins(Deploy.class)) {
-					trace("Deploying %s to: %s", jar, d);
+					trace("Deploying %s to: %s", output.getName(), d);
 					try {
-						if (d.deploy(this, jar))
+						if (d.deploy(this, output.getName(), new BufferedInputStream(new FileInputStream(output))))
 							trace("deployed %s successfully to %s", output, d);
 					}
 					catch (Exception e) {
 						msgs.Deploying(e);
 					}
 				}
-			}
-			finally {
-				jar.close();
-			}
 		}
 	}
 
@@ -1452,8 +1440,12 @@
 			if (!f.exists() || f.lastModified() < jar.lastModified()) {
 				reportNewer(f.lastModified(), jar);
 				f.delete();
-				if (!f.getParentFile().isDirectory())
-					f.getParentFile().mkdirs();
+				File fp = f.getParentFile();
+				if (!fp.isDirectory()) {
+					if (!fp.exists() && !fp.mkdirs()) {
+						throw new IOException("Could not create directory " + fp);
+					}
+				}
 				jar.write(f);
 
 				getWorkspace().changedFile(f);
@@ -1491,6 +1483,7 @@
 	/**
 	 * Refresh if we are based on stale data. This also implies our workspace.
 	 */
+	@Override
 	public boolean refresh() {
 		boolean changed = false;
 		if (isCnf()) {
@@ -1503,6 +1496,7 @@
 		return getBase().getName().equals(Workspace.CNFDIR);
 	}
 
+	@Override
 	public void propertiesChanged() {
 		super.propertiesChanged();
 		preparedPaths = false;
@@ -1568,12 +1562,16 @@
 		File target = getTarget0();
 		if (target.isDirectory() && target.getParentFile() != null) {
 			IO.delete(target);
-			target.mkdirs();
+			if (!target.exists() && !target.mkdirs()) {
+				throw new IOException("Could not create directory " + target);
+			}
 		}
 		File output = getOutput0();
 		if (getOutput().isDirectory())
 			IO.delete(output);
-		output.mkdirs();
+		if (!output.exists() && !output.mkdirs()) {
+			throw new IOException("Could not create directory " + output);
+		}
 	}
 
 	public File[] build() throws Exception {
@@ -2052,7 +2050,10 @@
 
 		String path = packageName.replace('.', '/') + "/packageinfo";
 		File binary = IO.getFile(getOutput(), path);
-		binary.getParentFile().mkdirs();
+		File bp = binary.getParentFile();
+		if (!bp.exists() && !bp.mkdirs()) {
+			throw new IOException("Could not create directory " + bp);
+		}
 		IO.copy(file, binary);
 
 		refresh();
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/ProjectBuilder.java b/bundleplugin/src/main/java/aQute/bnd/build/ProjectBuilder.java
index 5cf4f0e..774934a 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/ProjectBuilder.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/ProjectBuilder.java
@@ -27,12 +27,14 @@
 	/**
 	 * We put our project and our workspace on the macro path.
 	 */
+	@Override
 	protected Object[] getMacroDomains() {
 		return new Object[] {
 				project, project.getWorkspace()
 		};
 	}
 
+	@Override
 	public Builder getSubBuilder() throws Exception {
 		return project.getBuilder(this);
 	}
@@ -41,6 +43,7 @@
 		return project;
 	}
 
+	@Override
 	public void init() {
 		try {
 			if (!initialized) {
@@ -68,6 +71,7 @@
 		}
 	}
 
+	@Override
 	public List<Jar> getClasspath() {
 		init();
 		return super.getClasspath();
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/ProjectMessages.java b/bundleplugin/src/main/java/aQute/bnd/build/ProjectMessages.java
index 57367f6..f692abb 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/ProjectMessages.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/ProjectMessages.java
@@ -3,7 +3,6 @@
 import java.io.*;
 import java.util.*;
 
-import aQute.bnd.osgi.*;
 import aQute.bnd.service.*;
 import aQute.bnd.service.RepositoryPlugin.Strategy;
 import aQute.bnd.version.*;
@@ -39,7 +38,7 @@
 
 	ERROR ReleaseRepository_NotFoundIn_(String name, List<RepositoryPlugin> plugins);
 
-	ERROR Release_Into_Exception_(Jar jar, RepositoryPlugin rp, Exception e);
+	ERROR Release_Into_Exception_(String jar, RepositoryPlugin rp, Exception e);
 
 	ERROR NoScripters_(String script);
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/ProjectTester.java b/bundleplugin/src/main/java/aQute/bnd/build/ProjectTester.java
index 86ce2e3..4549624 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/ProjectTester.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/ProjectTester.java
@@ -63,7 +63,9 @@
 	}
 
 	public boolean prepare() throws Exception {
-		reportDir.mkdirs();
+		if (!reportDir.exists() && !reportDir.mkdirs()) {
+			throw new IOException("Could not create directory " + reportDir);
+		}
 		for (File file : reportDir.listFiles()) {
 			file.delete();
 		}
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/ReflectAction.java b/bundleplugin/src/main/java/aQute/bnd/build/ReflectAction.java
index 3c3ee16..7a0f855 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/ReflectAction.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/ReflectAction.java
@@ -16,6 +16,7 @@
 		m.invoke(project);
 	}
 
+	@Override
 	public String toString() {
 		return "ra:" + what;
 	}
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/Workspace.java b/bundleplugin/src/main/java/aQute/bnd/build/Workspace.java
index 9111773..0044b11 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/Workspace.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/Workspace.java
@@ -81,7 +81,9 @@
 
 	public Workspace(File dir) throws Exception {
 		dir = dir.getAbsoluteFile();
-		dir.mkdirs();
+		if (!dir.exists() && !dir.mkdirs()) {
+			throw new IOException("Could not create directory " + dir);
+		}
 		assert dir.isDirectory();
 
 		File buildDir = new File(dir, BNDDIR).getAbsoluteFile();
@@ -123,6 +125,7 @@
 		return models.values();
 	}
 
+	@Override
 	public boolean refresh() {
 		if (super.refresh()) {
 			for (Project project : getCurrentProjects()) {
@@ -261,19 +264,23 @@
 			super("cache", getFile(buildDir, CACHEDIR), false);
 		}
 
+		@Override
 		public String toString() {
 			return "bnd-cache";
 		}
 
+		@Override
 		protected void init() throws Exception {
 			if (lock.tryLock(50, TimeUnit.SECONDS) == false)
 				throw new TimeLimitExceededException("Cached File Repo is locked and can't acquire it");
 			try {
 				if (!inited) {
 					inited = true;
-					root.mkdirs();
+					if (!root.exists() && !root.mkdirs()) {
+						throw new IOException("Could not create cache directory " + root);
+					}
 					if (!root.isDirectory())
-						throw new IllegalArgumentException("Cannot create cache dir " + root);
+						throw new IllegalArgumentException("Cache directory " + root + " not a directory");
 
 					InputStream in = getClass().getResourceAsStream(EMBEDDED_REPO);
 					if (in != null)
@@ -296,7 +303,10 @@
 					if (!jentry.isDirectory()) {
 						File dest = Processor.getFile(dir, jentry.getName());
 						if (!dest.isFile() || dest.lastModified() < jentry.getTime() || jentry.getTime() == 0) {
-							dest.getParentFile().mkdirs();
+							File dp = dest.getParentFile();
+							if (!dp.exists() && !dp.mkdirs()) {
+								throw new IOException("Could not create directory " + dp);
+							}
 							FileOutputStream out = new FileOutputStream(dest);
 							try {
 								copy(jin, out);
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/WorkspaceRepository.java b/bundleplugin/src/main/java/aQute/bnd/build/WorkspaceRepository.java
index 451bd77..c52b7f1 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/WorkspaceRepository.java
+++ b/bundleplugin/src/main/java/aQute/bnd/build/WorkspaceRepository.java
@@ -86,7 +86,7 @@
 		return false;
 	}
 
-	public File put(Jar jar) throws Exception {
+	public PutResult put(InputStream stream, PutOptions options) throws Exception {
 		return null;
 	}
 
diff --git a/bundleplugin/src/main/java/aQute/bnd/build/packageinfo b/bundleplugin/src/main/java/aQute/bnd/build/packageinfo
index 0ff7674..084a0d4 100644
--- a/bundleplugin/src/main/java/aQute/bnd/build/packageinfo
+++ b/bundleplugin/src/main/java/aQute/bnd/build/packageinfo
@@ -1 +1 @@
-version 1.45.0
+version 2.0.0