This is an automated email from the ASF dual-hosted git repository.

ebourg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat-jakartaee-migration.git

commit f69a7d986c0105d392ac3b33f2717a6a6263ce5d
Author: Emmanuel Bourg <ebo...@apache.org>
AuthorDate: Tue Apr 7 01:16:49 2020 +0200

    Support inplace file migration
---
 .../org/apache/tomcat/jakartaee/Migration.java     | 26 +++++++++++++++++++---
 .../org/apache/tomcat/jakartaee/MigrationTest.java | 15 +++++++++++++
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/apache/tomcat/jakartaee/Migration.java 
b/src/main/java/org/apache/tomcat/jakartaee/Migration.java
index 422e723..4ba79bd 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/Migration.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/Migration.java
@@ -16,6 +16,7 @@
  */
 package org.apache.tomcat.jakartaee;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -144,10 +145,29 @@ public class Migration {
 
 
     private boolean migrateFile(File src, File dest) throws IOException {
-        try (InputStream is = new FileInputStream(src);
-                OutputStream os = new FileOutputStream(dest)) {
-            return migrateStream(src.getName(), is, os);
+        boolean result = false;
+
+        boolean inplace = src.equals(dest);
+        if (!inplace) {
+            try (InputStream is = new FileInputStream(src);
+                 OutputStream os = new FileOutputStream(dest)) {
+                result = migrateStream(src.getName(), is, os);
+            }
+        } else {
+            File tmp = new File(dest.getParentFile(), dest.getName() + ".tmp");
+
+            ByteArrayOutputStream buffer = new ByteArrayOutputStream((int) 
(src.length() * 1.05));
+
+            try (InputStream is = new FileInputStream(src)) {
+                result = migrateStream(src.getName(), is, buffer);
+            }
+
+            try (OutputStream os = new FileOutputStream(dest)) {
+                os.write(buffer.toByteArray());
+            }
         }
+
+        return result;
     }
 
 
diff --git a/src/test/java/org/apache/tomcat/jakartaee/MigrationTest.java 
b/src/test/java/org/apache/tomcat/jakartaee/MigrationTest.java
index 5ddda03..80e595d 100644
--- a/src/test/java/org/apache/tomcat/jakartaee/MigrationTest.java
+++ b/src/test/java/org/apache/tomcat/jakartaee/MigrationTest.java
@@ -49,4 +49,19 @@ public class MigrationTest {
         assertFalse("Imports not migrated", migratedSource.contains("import 
javax.servlet"));
         assertTrue("Migrated imports not found", 
migratedSource.contains("import jakarta.servlet"));
     }
+
+    @Test
+    public void testMigrateSingleSourceFileInPlace() throws Exception {
+        File sourceFile = new File("target/test-classes/HelloServlet.java");
+        File migratedFile = new 
File("target/test-classes/HelloServlet.inplace.java");
+        FileUtils.copyFile(sourceFile, migratedFile);
+
+        Migration.main(new String[] {"-profile=EE", 
migratedFile.getAbsolutePath(), migratedFile.getAbsolutePath()});
+
+        assertTrue("Migrated file not found", migratedFile.exists());
+
+        String migratedSource = FileUtils.readFileToString(migratedFile);
+        assertFalse("Imports not migrated", migratedSource.contains("import 
javax.servlet"));
+        assertTrue("Migrated imports not found", 
migratedSource.contains("import jakarta.servlet"));
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to