Package hudson.plugins.perforce

Source Code of hudson.plugins.perforce.QuickRestoreCall

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package hudson.plugins.perforce;

import hudson.model.TaskListener;
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;

/**
*
* @author rpetti
*/
class QuickRestoreCall implements RemoteCall {
    private String[] env;
    private OutputStream out;
    private String workDir;
    private TaskListener listener;
    private String p4exe;
    private FileFilter filter;
    private String p4ticket;

    public QuickRestoreCall() {
    }

    public Integer call() throws IOException {
        try {
            forceSyncUsingP4DiffOption("-se");
            forceSyncUsingP4DiffOption("-sd");
        } finally {
            IOUtils.closeQuietly(out);
        }
        return 0;
    }
   
    private void forceSyncUsingP4DiffOption(String option) throws IOException {
        PipedInputStream forceSyncInput = new PipedInputStream();
        PipedOutputStream diffOutput = new PipedOutputStream();
       
        forceSyncInput.connect(diffOutput);
       
        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();
            //find changed files
            findDiffFiles.start();
            findDiffFiles.join();
            forceSync.join();
        } catch (InterruptedException e) {
            forceSync.interrupt();
            findDiffFiles.interrupt();
        } finally {
            IOUtils.closeQuietly(forceSyncInput);
            IOUtils.closeQuietly(diffOutput);
        }
    }
   
    public void setEnv(String[] env) {
        this.env = env;
    }

    public void setFilter(FileFilter filter) {
        this.filter = filter;
    }

    public void setListener(TaskListener listener) {
        this.listener = listener;
    }

    public void setOut(OutputStream out) {
        this.out = out;
    }

    public void setP4exe(String p4exe) {
        this.p4exe = p4exe;
    }

    public void setWorkDir(String workDir) {
        this.workDir = workDir;
    }

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

Related Classes of hudson.plugins.perforce.QuickRestoreCall

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.