From 25ca3de5fc6b95b6cb0645f8ca16e4722d7e56b4 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Mon, 21 Sep 2009 23:52:09 +0000 Subject: [PATCH] Update center will create backup files to make it easier for manual roll back of botched upgrades. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@21980 71c3de6d-444a-0410-be80-ed276b4c234a --- core/src/main/java/hudson/Util.java | 13 +++++++++++++ core/src/main/java/hudson/model/UpdateCenter.java | 5 ++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/Util.java b/core/src/main/java/hudson/Util.java index b9e4ec22b9..d2a0fab5ca 100644 --- a/core/src/main/java/hudson/Util.java +++ b/core/src/main/java/hudson/Util.java @@ -1044,6 +1044,19 @@ public class Util { } } + /** + * Returns a file name by changing its extension. + * + * @param ext + * For example, ".zip" + */ + public static File changeExtension(File dst, String ext) { + String p = dst.getPath(); + int pos = p.lastIndexOf('.'); + if (pos<0) return new File(p+ext); + else return new File(p.substring(0,pos)+ext); + } + public static final FastDateFormat XS_DATETIME_FORMATTER = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss'Z'",new SimpleTimeZone(0,"GMT")); // Note: RFC822 dates must not be localized! diff --git a/core/src/main/java/hudson/model/UpdateCenter.java b/core/src/main/java/hudson/model/UpdateCenter.java index 6b6126e260..cee7dfc271 100644 --- a/core/src/main/java/hudson/model/UpdateCenter.java +++ b/core/src/main/java/hudson/model/UpdateCenter.java @@ -835,7 +835,10 @@ public class UpdateCenter extends AbstractModelObject { * the old file with the new file. */ protected void replace(File dst, File src) throws IOException { - dst.delete(); + File bak = Util.changeExtension(dst,".bak"); + bak.delete(); + dst.renameTo(bak); + dst.delete(); // any failure up to here is no big deal if(!src.renameTo(dst)) { throw new IOException("Failed to rename "+src+" to "+dst); }