/**
* Copyright (c) 2010 Perforce Software. All rights reserved.
*/
package com.perforce.maven.scm.provider.p4.command.status;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.command.status.AbstractStatusCommand;
import org.apache.maven.scm.command.status.StatusScmResult;
import org.apache.maven.scm.provider.ScmProviderRepository;
import com.perforce.maven.scm.provider.p4.command.P4ClientExecutor;
import com.perforce.maven.scm.provider.p4.command.P4Command;
import com.perforce.maven.scm.provider.p4.command.P4Executor;
import com.perforce.maven.scm.provider.p4.repository.P4ScmProviderRepository;
import com.perforce.p4java.core.file.FileSpecBuilder;
import com.perforce.p4java.core.file.IFileSpec;
import com.perforce.p4java.exception.P4JavaException;
import com.perforce.p4java.option.server.OpenedFilesOptions;
/**
* The class uses the Perforce opened command to list opened files and display
* file status.
*/
public class P4StatusCommand extends AbstractStatusCommand implements P4Command {
/** The Constant command. */
public static final String command = "Perforce opened command";
/**
* @see org.apache.maven.scm.command.status.AbstractStatusCommand
* executeStatusCommand(org.apache.maven.scm.provider.ScmProviderRepository,
* org.apache.maven.scm.ScmFileSet)
*/
protected StatusScmResult executeStatusCommand(ScmProviderRepository repo,
ScmFileSet files) throws ScmException {
P4StatusResult p4Result = new P4StatusResult();
P4ScmProviderRepository p4Repo = (P4ScmProviderRepository) repo;
P4ClientExecutor executor = new P4ClientExecutor(p4Repo, files,
getLogger());
List<IFileSpec> fileSpecs = null;
List<File> fileList = files.getFileList();
if (fileList != null) {
List<String> filePaths = new ArrayList<String>();
for (File f : fileList) {
if (!f.getName().contentEquals(".")) {
filePaths.add(P4Executor.encodeWildcards(f
.getAbsolutePath()));
}
}
if (!filePaths.isEmpty()) {
fileSpecs = FileSpecBuilder.makeFileSpecList(filePaths
.toArray(new String[filePaths.size()]));
}
}
if (fileSpecs == null || fileSpecs.isEmpty()) {
if (P4Executor.isEmpty(files.getIncludes())
&& P4Executor.isEmpty(files.getExcludes())) {
StringBuffer filePath = new StringBuffer();
filePath.append("...");
fileSpecs = FileSpecBuilder
.makeFileSpecList(new String[] { filePath.toString() });
}
}
if (fileSpecs != null && !fileSpecs.isEmpty()) {
try {
OpenedFilesOptions openedFilesOptions = new OpenedFilesOptions();
List<IFileSpec> retFileSpecs = executor.getClient()
.openedFiles(fileSpecs, openedFilesOptions);
p4Result.process(retFileSpecs);
} catch (P4JavaException e) {
if (getLogger().isErrorEnabled()) {
getLogger().error(e);
}
throw new ScmException(e.getLocalizedMessage(), e);
}
}
if (!p4Result.isSuccess()) {
return new StatusScmResult(command, "The opened command failed.",
p4Result.getCommandOutput(), p4Result.isSuccess());
}
return new StatusScmResult(command, p4Result.getCommandResult());
}
}
# |
Change |
User |
Description |
Committed |
|
#2
|
10055 |
Matt Attaway |
Pull over numerous changes from @dantran's branch. |
|
|
#1
|
8496 |
Matt Attaway |
Move P4Ant and P4Maven into their proper homes |
|
|
//public/perforce/p4maven/main/com.perforce.maven/src/main/java/com/perforce/maven/scm/provider/p4/command/status/P4StatusCommand.java |
#1
|
8270 |
Matt Attaway |
Initial add of P4Maven source code |
|
|