package org.jenkinsci.plugins.p4.tasks; import java.io.File; import java.io.IOException; import java.io.Serializable; import java.util.logging.Logger; import org.jenkinsci.plugins.p4.PerforceScm; import org.jenkinsci.plugins.p4.PerforceScm.DescriptorImpl; import org.jenkinsci.plugins.p4.changes.P4Revision; import org.jenkinsci.plugins.p4.client.ClientHelper; import org.jenkinsci.plugins.p4.populate.ForceCleanImpl; import org.jenkinsci.remoting.RoleChecker; import org.jenkinsci.remoting.RoleSensitive; import hudson.FilePath.FileCallable; import hudson.model.Descriptor; import hudson.remoting.VirtualChannel; import hudson.scm.SCM; import jenkins.model.Jenkins; import jenkins.security.Roles; public class RemoveClientTask extends AbstractTask implements FileCallable<Boolean>, Serializable { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(RemoveClientTask.class.getName()); private final String client; private final boolean deleteClient; private final boolean deleteFiles; public RemoveClientTask(String client) { this.client = client; Jenkins j = Jenkins.getInstance(); if (j != null) { @SuppressWarnings("unchecked") Descriptor<SCM> scm = j.getDescriptor(PerforceScm.class); DescriptorImpl p4scm = (DescriptorImpl) scm; deleteClient = p4scm.isDeleteClient(); deleteFiles = p4scm.isDeleteFiles(); } else { logger.warning("Unable to read PerforceScm global descriptor."); deleteClient = false; deleteFiles = false; } } @Override public Object task(ClientHelper p4) throws Exception { logger.info("Task: remove client."); try { // remove files if required if (deleteFiles) { ForceCleanImpl forceClean = new ForceCleanImpl(true, true, null, null); logger.info("P4: unsyncing client: " + client); p4.syncFiles(new P4Revision(0), forceClean); // TODO: Jenkins should do this, uncomment if needed. // File root = workspace.getCanonicalFile(); // FileUtils.forceDelete(root); } // remove client if required if (deleteClient) { if (p4.isClient(client)) { // revert any pending files, before deleting client p4.revertAllFiles(); logger.info("P4: remove client: " + client); p4.deleteClient(client); } else { logger.warning("P4: Cannot find: " + client); return deleteFiles; } } } catch (Exception e) { logger.warning("P4: Not able to get connection"); return false; } finally { p4.disconnect(); } return deleteFiles; } @Override public Boolean invoke(File workspace, VirtualChannel channel) throws IOException, InterruptedException { return (Boolean) tryTask(); } @Override public void checkRoles(RoleChecker checker) throws SecurityException { checker.check((RoleSensitive) this, Roles.SLAVE); } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#5 | 23691 | Paul Allen | Cleanup P4Task: Remove disconnect and use Closeable. | ||
#4 | 23689 | Paul Allen | Cleanup P4Task: Combined Workspace setup | ||
#3 | 23686 | Paul Allen | Cleanup P4Task: Move setters into constructor. | ||
#2 | 23685 | Paul Allen | Copy main -> dev | ||
#1 | 20641 | Paul Allen | Copy main -> dev (jenkinsci/p4-plugin) | ||
//guest/perforce_software/p4jenkins/main/src/main/java/org/jenkinsci/plugins/p4/tasks/RemoveClientTask.java | |||||
#6 | 19764 | Paul Allen | Simplify RemoveClientTask by using AbstractTask. | ||
#5 | 19752 | Paul Allen | Remove 'modtime' option from ForceClean | ||
#4 | 19593 | Paul Allen | More minor fixes to satisfy FindBugs Analysis. | ||
#3 | 19324 | Paul Allen |
Added Parallel Sync. An Advanced Populate option. Must specify the PATH to the ‘p4’ executable as parallel sync is not supported by p4java. JENKINS-29228 |
||
#2 | 19090 | Paul Allen |
Revert files before deleting a Workspace. JENKINS-24070 Jenkins Log (successful delete): Apr 21, 2016 10:08:20 PM org.jenkinsci.plugins.p4.PerforceScm processWorkspaceBeforeDeletion INFO: processWorkspaceBeforeDeletion Apr 21, 2016 10:08:20 PM org.jenkinsci.plugins.p4.tasks.RemoveClientTask invoke INFO: Task: remove client. Apr 21, 2016 10:08:20 PM org.jenkinsci.plugins.p4.tasks.RemoveClientTask invoke INFO: P4: unsyncing client: jenkins-master-open Apr 21, 2016 10:08:20 PM org.jenkinsci.plugins.p4.tasks.RemoveClientTask invoke INFO: P4: remove client: jenkins-master-open Apr 21, 2016 10:08:20 PM org.jenkinsci.plugins.p4.PerforceScm processWorkspaceBeforeDeletion INFO: clean: true |
||
#1 | 18335 | Paul Allen |
Slave support for Clean Up Workspace. Will remove the client and/or versioned files. Other non versioned files are removed by Jenkins not the p4 plugin. Uncomment lines 67,68 in RemoveClientTask.java to fix Jenkins bug. JENKINS-24003 |