/**
* Copyright (c) 2010 Perforce Software. All rights reserved.
*/
package com.perforce.maven.scm.provider.p4.command.diff;
import java.util.List;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmVersion;
import org.apache.maven.scm.command.diff.AbstractDiffCommand;
import org.apache.maven.scm.command.diff.DiffScmResult;
import org.apache.maven.scm.provider.ScmProviderRepository;
import org.codehaus.plexus.util.StringUtils;
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.repository.P4ScmProviderRepository;
import com.perforce.p4java.core.IFileDiff;
import com.perforce.p4java.core.file.IFileSpec;
import com.perforce.p4java.exception.P4JavaException;
import com.perforce.p4java.impl.generic.core.file.FileSpec;
import com.perforce.p4java.option.server.GetFileDiffsOptions;
/**
* The class uses the Perforce diff2 command to diff of two depot files.
*/
public class P4DiffCommand extends AbstractDiffCommand implements P4Command {
/** The Constant command. */
public static final String command = "Perforce diff2 command";
/**
* @see org.apache.maven.scm.command.diff.AbstractDiffCommand#executeDiffCommand
* (org.apache.maven.scm.provider.ScmProviderRepository,
* org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion,
* org.apache.maven.scm.ScmVersion)
*/
protected DiffScmResult executeDiffCommand(ScmProviderRepository repo,
ScmFileSet files, ScmVersion startRev, ScmVersion endRev)
throws ScmException {
P4DiffResult p4Result = new P4DiffResult();
P4ScmProviderRepository p4Repo = (P4ScmProviderRepository) repo;
P4ClientExecutor executor = new P4ClientExecutor(p4Repo, files,
getLogger());
String start = startRev != null
&& StringUtils.isNotEmpty(startRev.getName()) ? "@"
+ startRev.getName() : "";
String end = endRev != null && StringUtils.isNotEmpty(endRev.getName()) ? endRev
.getName() : "now";
// Assume revisions are labels
String file1 = "..." + start;
String file2 = "...@" + end;
IFileSpec file1FileSpec = new FileSpec(file1);
IFileSpec file2FileSpec = new FileSpec(file2);
String branch = null;
try {
GetFileDiffsOptions getFileDiffsOptions = new GetFileDiffsOptions();
List<IFileDiff> retFileDiffs = executor.getServer().getFileDiffs(
file1FileSpec, file2FileSpec, branch, getFileDiffsOptions);
p4Result.processFileDiffs(retFileDiffs);
} catch (P4JavaException e) {
if (getLogger().isErrorEnabled()) {
getLogger().error(e);
}
throw new ScmException(e.getLocalizedMessage(), e);
}
if (!p4Result.isSuccess()) {
return new DiffScmResult(command, "The diff2 command failed.",
p4Result.getFileDiffOutput(), p4Result.isSuccess());
}
return new DiffScmResult(command, p4Result.getChangedFiles(),
p4Result.getDifferences(), p4Result.getPatch());
}
}
# |
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/diff/P4DiffCommand.java |
#1
|
8270 |
Matt Attaway |
Initial add of P4Maven source code |
|
|