]> source.dussan.org Git - aspectj.git/commitdiff
absolutizing temp dir path.
authorwisberg <wisberg>
Wed, 14 May 2003 05:23:47 +0000 (05:23 +0000)
committerwisberg <wisberg>
Wed, 14 May 2003 05:23:47 +0000 (05:23 +0000)
When File.getTempFile() fails, workaround temp dir
is relative, which messes up the zip resource copying.

build/src/org/aspectj/internal/tools/ant/taskdefs/AJInstaller.java

index bdeb456c69d632b1f1ae42cd59b2823b42f28d67..518f8efc4815c734e50bc90d4af6592ac9112997 100644 (file)
@@ -44,7 +44,7 @@ public class AJInstaller extends MatchingTask {
     static final String MAIN_CLASS = "$installer$.org.aspectj.Main";
     static final String CONTENTS_FILE = "$installer$/org/aspectj/resources/contents.txt";
     private String htmlSrc;
-
+    
     public void setHtmlSrc(String v) { htmlSrc = v; }
 
     private String resourcesSrc;
@@ -91,10 +91,8 @@ public class AJInstaller extends MatchingTask {
     protected void finishZipOutputStream(ZipOutputStream zOut) throws IOException, BuildException {
         writeContents(zOut);
         writeManifest(zOut);
-        File tmpDirF = File.createTempFile("tgz", ".di");
-        File tmpDir = new File(tmpDirF.getAbsolutePath() + "r");
-        tmpDirF.delete();
-        String tmp = tmpDir.getAbsolutePath();
+        File tempDir = setupTempDir();
+        String tmp = tempDir.getAbsolutePath();
 
         // installer class files
         Expand expand = new Expand();
@@ -134,15 +132,16 @@ public class AJInstaller extends MatchingTask {
         cd.execute();
         // now move these files into the jar
         setBasedir(tmp);
-        writeFiles(zOut, getFiles(tmpDir));
+        writeFiles(zOut, getFiles(tempDir));
         // and delete the tmp dir
         Delete dt = (Delete)project.createTask("delete");
         if (null == dt) {
             dt = new Delete();
             dt.setProject(getProject());
         }
-        dt.setDir(new File(tmp));
+        dt.setDir(tempDir);
         dt.execute();
+        tempDir = null;
     }
 
     static final char NEWLINE = '\n';
@@ -277,7 +276,25 @@ public class AJInstaller extends MatchingTask {
             fIn.close();
         }
     }
-
+    private File setupTempDir() throws BuildException {
+        File tmpDirF = null;
+        File tmpDir = null;
+        try {
+            tmpDirF = File.createTempFile("tgz", ".di");
+            tmpDir = new File(tmpDirF.getParentFile(), "AJInstaller");
+            tmpDirF.delete();
+        } catch (IOException e) {
+            // retrying below
+        }
+        if (null == tmpDir || !tmpDir.mkdirs()) {
+            tmpDir = new File("AJInstaller.finishZipOutputStream.tmp");
+            if (!tmpDir.mkdirs()) {
+                throw new BuildException("unable to make temp dir");
+            }
+        }
+        return tmpDir;
+    }
+    
     public void execute() throws BuildException {
         if (installerClassJar == null) {
             throw new BuildException("installerClassJar attribute must be set!");
@@ -313,7 +330,7 @@ public class AJInstaller extends MatchingTask {
             initZipOutputStream(zOut);
             writeDirs(zOut, dirs);
             writeFiles(zOut, files);
-            finishZipOutputStream(zOut);
+            finishZipOutputStream(zOut); // deletes temp dir
         } catch (IOException ioe) {
             String msg = "Problem creating " + archiveType + " " + ioe.getMessage();
             throw new BuildException(msg, ioe, location);