blob: ad4b7cb61aa800ca52cd932690d5f6312364acf7 [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.impl;
import com.intellij.CvsBundle;
import com.intellij.cvsSupport2.config.CvsApplicationLevelConfiguration;
import com.intellij.cvsSupport2.config.CvsRootConfiguration;
import com.intellij.cvsSupport2.config.DateOrRevisionSettings;
import com.intellij.cvsSupport2.connections.CvsConnectionSettings;
import com.intellij.cvsSupport2.connections.IDEARootFormatter;
import com.intellij.cvsSupport2.connections.pserver.PServerLoginProvider;
import com.intellij.cvsSupport2.cvsExecution.CvsOperationExecutor;
import com.intellij.cvsSupport2.cvsExecution.CvsOperationExecutorCallback;
import com.intellij.cvsSupport2.cvshandlers.CommandCvsHandler;
import com.intellij.cvsSupport2.cvsoperations.cvsCheckOut.CheckoutProjectOperation;
import com.intellij.cvsSupport2.cvsoperations.cvsContent.GetFileContentOperation;
import com.intellij.cvsSupport2.cvsoperations.dateOrRevision.RevisionOrDate;
import com.intellij.cvsSupport2.cvsoperations.dateOrRevision.RevisionOrDateImpl;
import com.intellij.cvsSupport2.cvsoperations.dateOrRevision.SimpleRevision;
import com.intellij.cvsSupport2.history.ComparableVcsRevisionOnOperation;
import com.intellij.openapi.cvsIntegration.CvsModule;
import com.intellij.openapi.cvsIntegration.CvsRepository;
import com.intellij.openapi.cvsIntegration.CvsResult;
import com.intellij.openapi.cvsIntegration.CvsServices;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.AbstractVcsHelper;
import com.intellij.openapi.vcs.vfs.VcsFileSystem;
import com.intellij.openapi.vcs.vfs.VcsVirtualFile;
import org.netbeans.lib.cvsclient.command.KeywordSubstitution;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* author: lesya
*/
public class CvsServicesImpl extends CvsServices {
private static final Logger LOG = Logger.getInstance("#com.intellij.cvsSupport2.impl.CvsServicesImpl");
public CvsModule[] chooseModules(Project project,
boolean allowRootSelection,
boolean allowMultipleSelection,
boolean allowFilesSelection, String title, String selectModulePageTitle) {
ModuleChooser moduleChooser = new ModuleChooser(project,
allowFilesSelection,
allowMultipleSelection,
allowRootSelection,
title,
selectModulePageTitle);
moduleChooser.show();
if (!moduleChooser.isOK()) return null;
return moduleChooser.getSelectedModules();
}
public CvsRepository[] getConfiguredRepositories() {
List<CvsRootConfiguration> configurations = CvsApplicationLevelConfiguration.getInstance().CONFIGURATIONS;
CvsRepository[] result = new CvsRepository[configurations.size()];
for (int i = 0; i < configurations.size(); i++) {
result[i] = configurations.get(i).createCvsRepository();
}
return result;
}
private static ComparableVcsRevisionOnOperation createCvsVersionOn(CvsModule module, Project project) {
final CvsRootConfiguration rootConfiguration = CvsApplicationLevelConfiguration.getInstance()
.getConfigurationForCvsRoot(module.getRepository().getStringRepresentation());
CvsConnectionSettings env = new IDEARootFormatter(rootConfiguration).createConfiguration();
GetFileContentOperation operation =
new GetFileContentOperation(new File(module.getPathInCvs()),
env, new SimpleRevision(module.getRevision()));
return new ComparableVcsRevisionOnOperation(operation, project);
}
public void showDifferencesForFiles(CvsModule first, CvsModule second, Project project) throws Exception {
AbstractVcsHelper.getInstance(project).showDifferences(
createCvsVersionOn(first, project),
createCvsVersionOn(second, project),
new File(first.getPathInCvs()));
}
public String getScrambledPasswordForPServerCvsRoot(String cvsRoot) {
return PServerLoginProvider.getInstance()
.getScrambledPasswordForCvsRoot(cvsRoot);
}
public boolean saveRepository(CvsRepository repository) {
CvsApplicationLevelConfiguration configuration = CvsApplicationLevelConfiguration.getInstance();
CvsRootConfiguration config = CvsRootConfiguration.createOn(repository);
if (configuration.CONFIGURATIONS.contains(config)) return false;
configuration.CONFIGURATIONS.add(config);
return configuration.CONFIGURATIONS.contains(config);
}
public void openInEditor(Project project, CvsModule cvsFile) {
CvsRepository repository = cvsFile.getRepository();
RevisionOrDate revisionOrDate = RevisionOrDateImpl.createOn(new DateOrRevisionSettings().updateFrom(repository.getDateOrRevision()));
GetFileContentOperation operation = new GetFileContentOperation(new File(cvsFile.getPathInCvs()),
CvsRootConfiguration.createOn(repository),
revisionOrDate
);
ComparableVcsRevisionOnOperation revision = new ComparableVcsRevisionOnOperation(operation,
project);
VcsVirtualFile vcsVirtualFile = new VcsVirtualFile(cvsFile.getPathInCvs(),
revision,
VcsFileSystem.getInstance());
OpenFileDescriptor openFileDescriptor = new OpenFileDescriptor(project, vcsVirtualFile);
FileEditorManager.getInstance(project).openTextEditor(openFileDescriptor, false);
}
public byte[] getFileContent(Project project, CvsModule cvsFile) throws IOException {
final GetFileContentOperation operation = new GetFileContentOperation(new File(cvsFile.getPathInCvs()),
CvsRootConfiguration.createOn(cvsFile.getRepository()),
new SimpleRevision(cvsFile.getRevision())
);
final CvsOperationExecutor executor = new CvsOperationExecutor(project);
executor.performActionSync(new CommandCvsHandler(CvsBundle.message("operation.name.load.file.content"), operation, false),
CvsOperationExecutorCallback.EMPTY);
if (!executor.hasNoErrors()) throw new RuntimeException(executor.getFirstError());
if (operation.isDeleted()) throw new IOException(CvsBundle.message("exception.text.revision.has.been.deleted"));
return operation.getFileBytes();
}
public CvsResult checkout(String[] modules,
File checkoutTo,
String directory,
boolean makeNewFilesReadOnly,
boolean pruneEmptyDirectories,
Object keywordSubstitution,
Project project,
CvsRepository repository) {
LOG.assertTrue(modules.length > 0);
CheckoutProjectOperation operation = new CheckoutProjectOperation(modules,
CvsRootConfiguration.createOn(repository),
makeNewFilesReadOnly,
checkoutTo,
directory,
pruneEmptyDirectories,
(KeywordSubstitution)keywordSubstitution);
final CvsOperationExecutor executor = new CvsOperationExecutor(project);
executor.performActionSync(new CommandCvsHandler(CvsBundle.message("operation.name.checkout"), operation, true),
CvsOperationExecutorCallback.EMPTY);
return executor.getResult();
}
}