VCS: allow Git to report changed on server files comparing the whole tree. !! require...
[fedora-idea.git] / plugins / svn4idea / src / org / jetbrains / idea / svn / IgnoredFileInfo.java
blob766c84a75ee4685a4ea5877a75c9cfbc56022f32
1 package org.jetbrains.idea.svn;
3 import com.intellij.openapi.diagnostic.Logger;
4 import org.tmatesoft.svn.core.SVNDepth;
5 import org.tmatesoft.svn.core.SVNException;
6 import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;
7 import org.tmatesoft.svn.core.wc.ISVNStatusHandler;
8 import org.tmatesoft.svn.core.wc.SVNRevision;
9 import org.tmatesoft.svn.core.wc.SVNStatus;
10 import org.tmatesoft.svn.core.wc.SVNStatusType;
12 import java.io.File;
13 import java.util.*;
15 public class IgnoredFileInfo {
16 private static final Logger LOG = Logger.getInstance("#org.jetbrains.idea.svn.IgnoredFileInfo");
18 // directory for which properties are collected
19 private final File myFile;
20 private final List<String> myPatterns;
21 private final Set<String> myFileNames;
22 private final Set<String> myOldPatterns;
24 public IgnoredFileInfo(final File file, final Set<String> oldPatterns) {
25 myFile = file;
26 myPatterns = new ArrayList<String>();
27 myFileNames = new HashSet<String>();
28 myOldPatterns = oldPatterns;
31 public void addFileName(final String name) {
32 myFileNames.add(name);
35 public void addPattern(final String value) {
36 myPatterns.add(value);
39 public void calculatePatterns(final SvnVcs vcs) {
40 final List<String> names = new ArrayList<String>();
41 try {
42 vcs.createStatusClient().doStatus(myFile, SVNRevision.WORKING, SVNDepth.IMMEDIATES, false, true, true, false, new ISVNStatusHandler() {
43 public void handleStatus(SVNStatus status) throws SVNException {
44 if (SVNStatusType.STATUS_IGNORED == status.getContentsStatus()) {
45 final String name = status.getFile().getName();
46 if (! myFileNames.contains(name)) {
47 names.add(name);
51 }, null);
53 catch (SVNException e) {
54 LOG.info(e);
57 for (String pattern : myOldPatterns) {
58 boolean usedSomewhereElse = false;
59 for (String name : names) {
60 if (DefaultSVNOptions.matches(pattern, name)) {
61 usedSomewhereElse = true;
62 break;
66 if (! usedSomewhereElse) {
67 for (String name : myFileNames) {
68 if (DefaultSVNOptions.matches(pattern, name)) {
69 myPatterns.add(pattern);
70 break;
77 public File getFile() {
78 return myFile;
81 public List<String> getPatterns() {
82 return myPatterns;
85 public Set<String> getFileNames() {
86 return myFileNames;
89 public Set<String> getOldPatterns() {
90 return myOldPatterns;