Skip to content

Commit

Permalink
[FIXED JENKINS-15807] add ticket to quick clean calls when available
Browse files Browse the repository at this point in the history
  • Loading branch information
rpetti committed Nov 13, 2012
1 parent 228084d commit 3b9bc38
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 11 deletions.
2 changes: 1 addition & 1 deletion src/main/java/hudson/plugins/perforce/PerforceSCM.java
Expand Up @@ -816,7 +816,7 @@ public boolean checkout(AbstractBuild build, Launcher launcher,
forceSync = true;
}
if (quickCleanBeforeBuild) {
QuickCleaner quickCleaner = new QuickCleaner(depot.getExecutable(), launcher, depot, workspace, wipeFilter);
QuickCleaner quickCleaner = new QuickCleaner(depot.getExecutable(), depot.getP4Ticket(), launcher, depot, workspace, wipeFilter);
log.println("Quickly cleaning workspace...");
quickCleaner.doClean();
log.println("Workspace is clean.");
Expand Down
10 changes: 7 additions & 3 deletions src/main/java/hudson/plugins/perforce/QuickCleaner.java
Expand Up @@ -34,13 +34,15 @@ public class QuickCleaner {
private FilePath filePath;
private String p4exe;
private FileFilter filter;
private String p4ticket;

QuickCleaner(String p4exe, Launcher hudsonLauncher, Depot depot, FilePath filePath, FileFilter filter) {
QuickCleaner(String p4exe, String p4ticket, Launcher hudsonLauncher, Depot depot, FilePath filePath, FileFilter filter) {
this.hudsonLauncher = hudsonLauncher;
this.env = getEnvFromDepot(depot, filePath.getRemote());
this.filePath = filePath;
this.p4exe = p4exe;
this.filter = filter;
this.p4ticket = p4ticket;
}

public void doClean() throws PerforceException {
Expand Down Expand Up @@ -76,6 +78,7 @@ public void call(RemoteCall remoteCall) throws PerforceException {
remoteCall.setWorkDir(filePath.getRemote());
remoteCall.setListener(listener);
remoteCall.setFilter(filter);
remoteCall.setP4Ticket(p4ticket);
LogPrinter logPrinter = new LogPrinter(listener.getLogger(), p4in);
logPrinter.start();
filePath.act(remoteCall);
Expand Down Expand Up @@ -151,12 +154,14 @@ public interface RemoteCall extends Callable<Integer, IOException> {
void setP4exe(String p4exe);

void setWorkDir(String workDir);

void setP4Ticket(String p4ticket);

}

public static class PerforceCall extends Thread {

private String[] env;
private String p4exe;
private InputStream input;
private OutputStream output;
private String workDir;
Expand All @@ -168,7 +173,6 @@ public static class PerforceCall extends Thread {
this.input = input;
this.output = output;
this.env = env;
this.p4exe = p4exe;
this.workDir = workDir;
this.listener = listener;
this.cmdList = cmdList;
Expand Down
22 changes: 17 additions & 5 deletions src/main/java/hudson/plugins/perforce/QuickCleanerCall.java
Expand Up @@ -24,6 +24,7 @@ public class QuickCleanerCall implements QuickCleaner.RemoteCall {
private TaskListener listener;
private String p4exe;
private FileFilter filter;
private String p4ticket;

QuickCleanerCall() {

Expand Down Expand Up @@ -67,7 +68,7 @@ public Integer call() throws IOException {
PipedInputStream cleanerInput = new PipedInputStream();

DirectoryScanner directoryScanner = new DirectoryScanner(workDir, dsOutput, filter);
ProcessByPerforce p4Processor = new ProcessByPerforce(env, p4exe, p4Input, p4Output, workDir, listener);
PerforceCall p4Processor = createHaveCall(env, p4exe, p4ticket, p4Input, p4Output, workDir, listener);
Cleaner cleaner = new Cleaner(workDir, cleanerInput, out);

dsOutput.connect(p4Input);
Expand All @@ -89,6 +90,10 @@ public Integer call() throws IOException {
return 0;
}

public void setP4Ticket(String p4ticket) {
this.p4ticket = p4ticket;
}

//Scans the specified path for all files
private class DirectoryScanner extends Thread {

Expand Down Expand Up @@ -147,11 +152,18 @@ private void outputFilePath(File file) throws IOException {
}

//Ask perforce if they are tracked
private class ProcessByPerforce extends PerforceCall {

ProcessByPerforce(String[] env, String p4exe, InputStream input, OutputStream output, String workDir, TaskListener listener) {
super(env, new String[]{p4exe, "-d", workDir, "-x-", "have"}, input, output, workDir, listener, true);
private PerforceCall createHaveCall (String[] env, String p4exe, String p4ticket, InputStream input, OutputStream output, String workDir, TaskListener listener) {
ArrayList<String> cmdlist = new ArrayList<String>();
cmdlist.add(p4exe);
if(p4ticket != null && !p4ticket.trim().isEmpty()){
cmdlist.add("-P");
cmdlist.add(p4ticket);
}
cmdlist.add("-d");
cmdlist.add(workDir);
cmdlist.add("-x-");
cmdlist.add("have");
return new PerforceCall(env, cmdlist.toArray(new String[cmdlist.size()]), input, output, workDir, listener, true);
}

//Deletes untracked files
Expand Down
37 changes: 35 additions & 2 deletions src/main/java/hudson/plugins/perforce/QuickRestoreCall.java
Expand Up @@ -8,6 +8,7 @@
import hudson.plugins.perforce.QuickCleaner.PerforceCall;
import hudson.plugins.perforce.QuickCleaner.RemoteCall;
import java.io.*;
import java.util.ArrayList;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.input.ClosedInputStream;

Expand All @@ -22,6 +23,7 @@ class QuickRestoreCall implements RemoteCall {
private TaskListener listener;
private String p4exe;
private FileFilter filter;
private String p4ticket;

public QuickRestoreCall() {
}
Expand All @@ -42,8 +44,35 @@ private void forceSyncUsingP4DiffOption(String option) throws IOException {

forceSyncInput.connect(diffOutput);

PerforceCall forceSync = new PerforceCall(env, new String[]{p4exe, "-d", workDir, "-x-", "sync", "-f"}, forceSyncInput, out, workDir, listener, false);
PerforceCall findDiffFiles = new PerforceCall(env, new String[]{p4exe, "-d", workDir, "diff", option}, new ClosedInputStream(), diffOutput, workDir, listener, true);
ArrayList<String> forceSyncCmdList = new ArrayList<String>();
ArrayList<String> findDiffFilesCmdList = new ArrayList<String>();

//build force sync command
forceSyncCmdList.add(p4exe);
if(p4ticket != null && !p4ticket.trim().isEmpty()){
forceSyncCmdList.add("-P");
forceSyncCmdList.add(p4ticket);
}
forceSyncCmdList.add("-d");
forceSyncCmdList.add(workDir);
forceSyncCmdList.add("-x-");
forceSyncCmdList.add("sync");
forceSyncCmdList.add("-f");

PerforceCall forceSync = new PerforceCall(env, forceSyncCmdList.toArray(new String[forceSyncCmdList.size()]), forceSyncInput, out, workDir, listener, false);

//build diff command
findDiffFilesCmdList.add(p4exe);
if(p4ticket != null && !p4ticket.trim().isEmpty()){
findDiffFilesCmdList.add("-P");
findDiffFilesCmdList.add(p4ticket);
}
findDiffFilesCmdList.add("-d");
findDiffFilesCmdList.add(workDir);
findDiffFilesCmdList.add("diff");
findDiffFilesCmdList.add(option);

PerforceCall findDiffFiles = new PerforceCall(env, findDiffFilesCmdList.toArray(new String[findDiffFilesCmdList.size()]), new ClosedInputStream(), diffOutput, workDir, listener, true);

try {
forceSync.start();
Expand Down Expand Up @@ -83,4 +112,8 @@ public void setP4exe(String p4exe) {
public void setWorkDir(String workDir) {
this.workDir = workDir;
}

public void setP4Ticket(String p4ticket) {
this.p4ticket = p4ticket;
}
}

0 comments on commit 3b9bc38

Please sign in to comment.