Index: src/main/java/hudson/plugins/build_publisher/ExternalProjectProperty.java =================================================================== --- src/main/java/hudson/plugins/build_publisher/ExternalProjectProperty.java (revision 19099) +++ src/main/java/hudson/plugins/build_publisher/ExternalProjectProperty.java (working copy) @@ -25,9 +25,11 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.HashSet; -import java.util.List; import java.util.Set; +import java.util.TimeZone; import java.util.logging.Level; import java.util.logging.Logger; @@ -113,17 +115,51 @@ oldBuildIDs.add(run.getId()); } + File buildsDir = new File(project.getRootDir(), "builds"); + //Untar incoming builds unto the build directory Untar untar = new Untar(); untar.setProject(new org.apache.tools.ant.Project()); untar.add(new InputStreamResource(project.getName(), new BufferedInputStream(req.getInputStream()))); - untar.setDest(new File(project.getRootDir(), "builds")); + untar.setDest(buildsDir); untar.setOverwrite(true); + String publisherTimezoneID = (String)req.getHeader("X-Publisher-Timezone"); + HudsonInstance.LOGGER.fine("Got timezone " + publisherTimezoneID); + TimeZone publisherTimezone = null; + String buildId = null; + String newId = null; + SimpleDateFormat dateFormatter = null; + SimpleDateFormat oldDateFormatter = null; + if(publisherTimezoneID!=null) { + publisherTimezone = TimeZone.getTimeZone(publisherTimezoneID); + dateFormatter = Run.getIDFormatter(); + buildId = (String)req.getHeader("X-Build-ID"); + oldDateFormatter = (SimpleDateFormat)dateFormatter.clone(); + oldDateFormatter.setTimeZone(publisherTimezone); + } + try { + if(publisherTimezone!=null) { + try { + newId = dateFormatter.format(oldDateFormatter.parse(buildId)); + } catch (ParseException e) { + throw new BuildException("Failed to parse buildId", e); + } + } + untar.execute(); + if(publisherTimezone!=null) { + File oldBuildDir = new File(buildsDir, buildId); + File newBuildDir = new File(buildsDir, newId); + + HudsonInstance.LOGGER.fine("Renaming: " + oldBuildDir.getCanonicalPath() + " to " + newBuildDir.getCanonicalPath()); + + oldBuildDir.renameTo(newBuildDir); + } + //Load incoming builds from disk reloadProject(project); Index: src/main/java/hudson/plugins/build_publisher/HTTPBuildTransmitter.java =================================================================== --- src/main/java/hudson/plugins/build_publisher/HTTPBuildTransmitter.java (revision 19099) +++ src/main/java/hudson/plugins/build_publisher/HTTPBuildTransmitter.java (working copy) @@ -28,6 +28,7 @@ import java.io.OutputStream; import java.net.URI; import java.net.URISyntaxException; +import java.util.TimeZone; import java.util.logging.Level; import org.apache.commons.httpclient.HttpException; @@ -40,7 +41,6 @@ private PostMethod method; private boolean aborted = false; - @Override public void sendBuild(AbstractBuild build, HudsonInstance hudsonInstance) throws ServerFailureException { @@ -74,6 +74,9 @@ method.setRequestEntity(new FileRequestEntity(tempFile, "application/x-tar")); + + method.setRequestHeader("X-Publisher-Timezone", TimeZone.getDefault().getID()); + method.setRequestHeader("X-Build-ID", build.getId()); executeMethod(method, hudsonInstance); @@ -103,7 +106,6 @@ } - @Override public void abortTransmission() { aborted = true; if (method != null) {