Skip to content

Commit

Permalink
[FIXED JENKINS-13765] Resolving this issue as a workaround, since the…
Browse files Browse the repository at this point in the history
… si proejctco command ingnores the --retoreTimestamp option
  • Loading branch information
cletusdsouza committed Mar 27, 2015
1 parent 0ccf764 commit f57bae6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
9 changes: 8 additions & 1 deletion src/main/java/hudson/scm/IntegrityCMMember.java
Expand Up @@ -7,6 +7,7 @@
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.sql.Timestamp;
import java.util.logging.Logger;

import org.apache.commons.codec.digest.DigestUtils;
Expand Down Expand Up @@ -105,7 +106,7 @@ public static final String getDifferencesLink(String configPath, String memberID
* @return true if the operation succeeded or false if failed
* @throws APIException
*/
public static final boolean checkout(APISession api, String configPath, String memberID, String memberRev,
public static final boolean checkout(APISession api, String configPath, String memberID, String memberRev, Timestamp memberTimestamp,
File targetFile, boolean restoreTimestamp, String lineTerminator) throws APIException
{
// Make sure the directory is created
Expand All @@ -132,6 +133,12 @@ public static final boolean checkout(APISession api, String configPath, String m
// Return true if we were successful
if( res.getExitCode() == 0 )
{
// Per JENKINS-13765 - providing a workaround due to API bug
// Update the timestamp for the file, if appropriate
if( restoreTimestamp )
{
targetFile.setLastModified(memberTimestamp.getTime());
}
return true;
}
// Otherwise return false...
Expand Down
18 changes: 11 additions & 7 deletions src/main/java/hudson/scm/IntegrityCheckoutTask.java
Expand Up @@ -7,6 +7,7 @@

import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
Expand Down Expand Up @@ -198,18 +199,20 @@ private final class CheckOutTask implements Callable<Void>
private final String memberID;
private final String memberName;
private final String memberRev;
private final Timestamp memberTimestamp;
private final File targetFile;
private final boolean calculateChecksum;

public CheckOutTask(ThreadLocalAPISession apiSession, ThreadLocalOpenFileHandler openFileHandler,
String memberName, String configPath, String memberID, String memberRev, File targetFile, boolean calculateChecksum)
public CheckOutTask(ThreadLocalAPISession apiSession, ThreadLocalOpenFileHandler openFileHandler, String memberName, String configPath,
String memberID, String memberRev, Timestamp memberTimestamp, File targetFile, boolean calculateChecksum)
{
this.apiSession = apiSession;
this.openFileHandler = openFileHandler;
this.configPath = configPath;
this.memberID = memberID;
this.memberName = memberName;
this.memberRev = memberRev;
this.memberTimestamp = memberTimestamp;
this.targetFile = targetFile;
this.calculateChecksum = calculateChecksum;
}
Expand All @@ -230,7 +233,7 @@ public Void call() throws Exception
LOGGER.fine("Checkout on API thread: " + api.toString());
try
{
IntegrityCMMember.checkout(api, configPath, memberID, memberRev, targetFile, restoreTimestamp, lineTerminator);
IntegrityCMMember.checkout(api, configPath, memberID, memberRev, memberTimestamp, targetFile, restoreTimestamp, lineTerminator);
}
catch( APIException aex )
{
Expand Down Expand Up @@ -295,33 +298,34 @@ public Boolean invoke(File workspaceFile, VirtualChannel channel) throws IOExcep
String memberName = memberInfo.get(CM_PROJECT.NAME).toString();
String memberID = memberInfo.get(CM_PROJECT.MEMBER_ID).toString();
String memberRev = memberInfo.get(CM_PROJECT.REVISION).toString();
Timestamp memberTimestamp = (Timestamp)memberInfo.get(CM_PROJECT.TIMESTAMP);
String configPath = memberInfo.get(CM_PROJECT.CONFIG_PATH).toString();
String checksum = (null == memberInfo.get(CM_PROJECT.CHECKSUM) ? "" : memberInfo.get(CM_PROJECT.CHECKSUM).toString());

if( cleanCopy && deltaFlag != 3 )
{
LOGGER.fine("Attempting to checkout file: " + targetFile.getAbsolutePath() + " at revision " + memberRev);
coThreads.add(executor.submit(new CheckOutTask(generateAPISession, openFileHandler, memberName, configPath, memberID, memberRev, targetFile, fetchChangedWorkspaceFiles)));
coThreads.add(executor.submit(new CheckOutTask(generateAPISession, openFileHandler, memberName, configPath, memberID, memberRev, memberTimestamp, targetFile, fetchChangedWorkspaceFiles)));
}
else if( deltaFlag == 0 && fetchChangedWorkspaceFiles && checksum.length() > 0 )
{
if( ! checksum.equals(IntegrityCMMember.getMD5Checksum(targetFile)) )
{
LOGGER.fine("Attempting to restore changed workspace file: " + targetFile.getAbsolutePath() + " to revision " + memberRev);
coThreads.add(executor.submit(new CheckOutTask(generateAPISession, openFileHandler, memberName, configPath, memberID, memberRev, targetFile, false)));
coThreads.add(executor.submit(new CheckOutTask(generateAPISession, openFileHandler, memberName, configPath, memberID, memberRev, memberTimestamp, targetFile, false)));
fetchCount++;
}
}
else if( deltaFlag == 1 )
{
LOGGER.fine("Attempting to get new file: " + targetFile.getAbsolutePath() + " at revision " + memberRev);
coThreads.add(executor.submit(new CheckOutTask(generateAPISession, openFileHandler, memberName, configPath, memberID, memberRev, targetFile, fetchChangedWorkspaceFiles)));
coThreads.add(executor.submit(new CheckOutTask(generateAPISession, openFileHandler, memberName, configPath, memberID, memberRev, memberTimestamp, targetFile, fetchChangedWorkspaceFiles)));
addCount++;
}
else if( deltaFlag == 2 )
{
LOGGER.fine("Attempting to update file: " + targetFile.getAbsolutePath() + " to revision " + memberRev);
coThreads.add(executor.submit(new CheckOutTask(generateAPISession, openFileHandler, memberName, configPath, memberID, memberRev, targetFile, fetchChangedWorkspaceFiles)));
coThreads.add(executor.submit(new CheckOutTask(generateAPISession, openFileHandler, memberName, configPath, memberID, memberRev, memberTimestamp, targetFile, fetchChangedWorkspaceFiles)));
updateCount++;
}
else if( deltaFlag == 3 )
Expand Down

0 comments on commit f57bae6

Please sign in to comment.