blob: 3f4c5e25ca21c603527abd638ad41b7f26c2d6fb [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.cvsSupport2.cvsoperations.cvsLog;
import org.jetbrains.annotations.Nullable;
import org.netbeans.lib.cvsclient.IClientEnvironment;
import org.netbeans.lib.cvsclient.IRequestProcessor;
import org.netbeans.lib.cvsclient.admin.Entry;
import org.netbeans.lib.cvsclient.command.AbstractCommand;
import org.netbeans.lib.cvsclient.command.CommandException;
import org.netbeans.lib.cvsclient.command.log.LogMessageParser;
import org.netbeans.lib.cvsclient.connection.AuthenticationException;
import org.netbeans.lib.cvsclient.event.ICvsListener;
import org.netbeans.lib.cvsclient.event.ICvsListenerRegistry;
import org.netbeans.lib.cvsclient.event.IEventSender;
import org.netbeans.lib.cvsclient.file.FileObject;
import org.netbeans.lib.cvsclient.progress.IProgressViewer;
import org.netbeans.lib.cvsclient.progress.sending.DummyRequestsProgressHandler;
import org.netbeans.lib.cvsclient.request.CommandRequest;
import org.netbeans.lib.cvsclient.request.Requests;
public class RlogCommand extends AbstractCommand {
private String myModuleName = ".";
private boolean myHeadersOnly = true;
private boolean myNoTags = false;
private String myDateTo;
private String myDateFrom;
private boolean mySuppressEmptyHeaders = true;
private String myBranchName = null;
private boolean myLogDefaultBranch = false;
private String[] myRevisions = null;
// Implemented ============================================================
public final boolean execute(IRequestProcessor requestProcessor,
IEventSender eventSender,
ICvsListenerRegistry listenerRegistry,
IClientEnvironment clientEnvironment,
IProgressViewer progressViewer) throws CommandException, AuthenticationException {
final Requests requests = new Requests(CommandRequest.RLOG, clientEnvironment);
requests.addArgumentRequest(myHeadersOnly, "-h");
requests.addArgumentRequest(myNoTags, "-N");
requests.addArgumentRequest(mySuppressEmptyHeaders, "-S");
requests.addArgumentRequest(!isRecursive(), "-l");
requests.addArgumentRequest(getDateFilter(), "-d");
final String revisionFilter = getRevisionFilter();
if (revisionFilter != null) {
requests.addArgumentRequest("-r" + revisionFilter);
} else if (myBranchName != null) {
requests.addArgumentRequest("-r" + myBranchName);
}
requests.addArgumentRequest(myLogDefaultBranch, "-b");
requests.addArgumentRequest(myModuleName);
final ICvsListener parser = new LogMessageParser(eventSender, clientEnvironment.getCvsFileSystem());
parser.registerListeners(listenerRegistry);
try {
return requestProcessor.processRequests(requests, new DummyRequestsProgressHandler());
}
finally {
parser.unregisterListeners(listenerRegistry);
}
}
public void setMyLogDefaultBranch(boolean logDefaultBranch) {
myLogDefaultBranch = logDefaultBranch;
}
@Nullable
private String getDateFilter() {
if (myDateFrom == null && myDateTo == null) {
return null;
}
final StringBuilder result = new StringBuilder();
if (myDateFrom == null) {
result.append('<');
result.append(myDateTo);
}
else if (myDateTo == null) {
result.append('>');
result.append(myDateFrom);
}
else {
result.append(myDateFrom);
result.append('<');
result.append(myDateTo);
}
return result.toString();
}
@Nullable
private String getRevisionFilter() {
if (myRevisions == null || myRevisions.length == 0) {
return null;
}
final StringBuilder result = new StringBuilder();
boolean comma = false;
for (String revision : myRevisions) {
if (comma) result.append(',');
else comma = true;
result.append(revision);
}
return result.toString();
}
public final String getCvsCommandLine() {
//noinspection HardCodedStringLiteral
final StringBuffer cvsCommandLine = new StringBuffer("rlog ");
cvsCommandLine.append(getCVSArguments());
appendFileArguments(cvsCommandLine);
return cvsCommandLine.toString();
}
public final void resetCvsCommand() {
super.resetCvsCommand();
setRecursive(true);
}
public void setHeadersOnly(final boolean headersOnly) {
myHeadersOnly = headersOnly;
}
public void setNoTags(final boolean noTags) {
myNoTags = noTags;
}
@SuppressWarnings({"HardCodedStringLiteral"})
private String getCVSArguments() {
final StringBuilder cvsArguments = new StringBuilder();
if (myHeadersOnly) {
cvsArguments.append("-h ");
}
if (myNoTags) {
cvsArguments.append("-N ");
}
return cvsArguments.toString();
}
public void setModuleName(final String moduleName) {
myModuleName = moduleName;
}
// Utils ==================================================================
protected final void addModifiedRequest(FileObject fileObject, Entry entry, Requests requests, IClientEnvironment clientEnvironment) {
requests.addIsModifiedRequest(fileObject);
}
public void setDateFrom(final String dateFrom) {
myDateFrom = dateFrom;
}
public void setDateTo(final String dateTo) {
myDateTo = dateTo;
}
public void setSuppressEmptyHeaders(final boolean suppressEmptyHeaders) {
mySuppressEmptyHeaders = suppressEmptyHeaders;
}
public void setBranchName(final String branchName) {
myBranchName = branchName;
}
public void setRevisions(final String... revisions) {
myRevisions = revisions;
}
}