blob: a7042cb1b6ae07ba6ba1f63ed6294d7ff00e1a6f [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.openapi.vcs.changes;
import com.intellij.openapi.util.Factory;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.VcsKey;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
/**
* Builder for the changes list in the file system. The instances of
* this class are used to collect changes that happened in the file system.
*
* @see ChangeProvider#getChanges(VcsDirtyScope, ChangelistBuilder,com.intellij.openapi.progress.ProgressIndicator, ChangeListManagerGate)
* @author max
*/
public interface ChangelistBuilder {
/**
* Process a change to the file. This method is used to report changes that
* version control system knows about.
*
* @param change a change to process.
* @param vcsKey
*/
void processChange(Change change, VcsKey vcsKey);
void processChangeInList(Change change, @Nullable ChangeList changeList, VcsKey vcsKey);
/**
* Put the given change into the change list with the given name.
* If there is no such change list it is created.
* This method allows not to refer to ChangeListManager for the LocalChangeList object.
*
* @param change Submitted change
* @param changeListName A name for a change list.
* @param vcsKey
*/
void processChangeInList(Change change, String changeListName, VcsKey vcsKey);
void removeRegisteredChangeFor(final FilePath path);
/**
* Process a file that is not under version control.
*
* @param file a file to process
*/
void processUnversionedFile(VirtualFile file);
/**
* Process a file that was deleted locally, but version
* control has not been notified about removal yet.
*
* @param file a file to process
*/
void processLocallyDeletedFile(FilePath file);
void processLocallyDeletedFile(final LocallyDeletedChange locallyDeletedChange);
/**
* Process the file that was modified without explicit checkout
* (if version control supports such behavior).
*
* @param file a file to process
*/
void processModifiedWithoutCheckout(VirtualFile file);
/**
* Process the file that is ignored by the version control.
*
* @param file an ignored file
*/
void processIgnoredFile(VirtualFile file);
/**
* technically locked folder (for Subversion: locked in working copy to keep WC's state consistent)
*/
void processLockedFolder(VirtualFile file);
/**
* Logically locked file: (in repository) in lock-modify-unlock model
*/
void processLogicallyLockedFolder(VirtualFile file, LogicalLock logicalLock);
/**
* Report a file which has been updated to a branch other than that of the files around it
* ("switched"). Changed files (reported through {@link #processChange}) can also be reported as switched.
*
* @param file the switched file
* @param branch the name of the branch to which the file is switched.
* @param recursive if true, all subdirectories of file are also marked as switched to that branch
*/
void processSwitchedFile(VirtualFile file, String branch, final boolean recursive);
void processRootSwitch(VirtualFile file, String branch);
boolean reportChangesOutsideProject();
void reportAdditionalInfo(final String text);
void reportAdditionalInfo(final Factory<JComponent> infoComponent);
}