/* * 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); }