[352252] PublishHelper 'hangs' during publish
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishHelper.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishHelper.java
index 77c4601..c8d9cf7 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishHelper.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishHelper.java
@@ -536,6 +536,10 @@
for (int i = 0; i < size; i++) {
IStatus[] stat = copy(resources[i], path, monitor);
addArrayToList(status, stat);
+
+ if (monitor.isCanceled()) {
+ break;
+ }
}
IStatus[] stat = new IStatus[status.size()];
@@ -544,6 +548,9 @@
}
private IStatus[] copy(IModuleResource resource, IPath path, IProgressMonitor monitor) {
+ if (monitor.isCanceled()) {
+ return new IStatus[0];
+ }
String name = resource.getName();
if (Trace.PUBLISHING) {
Trace.trace(Trace.STRING_PUBLISHING, "Copying: " + name + " to " + path.toString());
@@ -557,12 +564,26 @@
IModuleFile mf = (IModuleFile) resource;
path = path.append(mf.getModuleRelativePath()).append(name);
File f = path.toFile().getParentFile();
- if (!f.exists())
- f.mkdirs();
- try {
- copyFile(mf, path);
- } catch (CoreException ce) {
- status.add(ce.getStatus());
+ if (f.exists()) {
+ try {
+ copyFile(mf, path);
+ } catch (CoreException ce) {
+ status.add(ce.getStatus());
+ }
+ } else {
+ // Create the parent directory.
+ if (f.mkdirs()) {
+ try {
+ copyFile(mf, path);
+ } catch (CoreException ce) {
+ status.add(ce.getStatus());
+ }
+ } else {
+ if (Trace.PUBLISHING) {
+ Trace.trace(Trace.STRING_PUBLISHING, "Failed to create the directory: " + f.getAbsolutePath() );
+ }
+ status.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorMkdir, f.getAbsolutePath()), null));
+ }
}
}
IStatus[] stat = new IStatus[status.size()];