This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 121354
Collapse All | Expand All

(-)versioncontrol/mercurial/src/org/netbeans/modules/mercurial/FileStatusCache.java (-19 / +26 lines)
Lines 277-283 Link Here
277
     * @see FileInformation
277
     * @see FileInformation
278
     */
278
     */
279
    public FileInformation getStatus(File file) {
279
    public FileInformation getStatus(File file) {
280
        if (file.isDirectory() && (hg.isAdministrative(file) || SharabilityQuery.getSharability(file) == SharabilityQuery.NOT_SHARABLE))
280
        if (file.isDirectory() && (hg.isAdministrative(file) || HgUtils.isIgnored(file)))
281
            return FileStatusCache.FILE_INFORMATION_EXCLUDED_DIRECTORY;
281
            return FileStatusCache.FILE_INFORMATION_EXCLUDED_DIRECTORY;
282
        File dir = file.getParentFile();
282
        File dir = file.getParentFile();
283
        if (dir == null) {
283
        if (dir == null) {
Lines 363-369 Link Here
363
        Mercurial.LOG.log(Level.FINE, "createFileInformation(): {0}", file); // NOI18N
363
        Mercurial.LOG.log(Level.FINE, "createFileInformation(): {0}", file); // NOI18N
364
        if (file == null)
364
        if (file == null)
365
            return FILE_INFORMATION_UNKNOWN;
365
            return FILE_INFORMATION_UNKNOWN;
366
        if (hg.isAdministrative(file) || SharabilityQuery.getSharability(file) == SharabilityQuery.NOT_SHARABLE)
366
        if (hg.isAdministrative(file) || HgUtils.isIgnored(file))
367
            return file.isDirectory() ? FILE_INFORMATION_EXCLUDED_DIRECTORY : FILE_INFORMATION_EXCLUDED; // Excluded
367
            return file.isDirectory() ? FILE_INFORMATION_EXCLUDED_DIRECTORY : FILE_INFORMATION_EXCLUDED; // Excluded
368
368
369
        File rootManagedFolder = hg.getTopmostManagedParent(file);        
369
        File rootManagedFolder = hg.getTopmostManagedParent(file);        
Lines 404-410 Link Here
404
    }
404
    }
405
 
405
 
406
    @SuppressWarnings("unchecked") // Need to change turbo module to remove warning at source
406
    @SuppressWarnings("unchecked") // Need to change turbo module to remove warning at source
407
    private Map<File, FileInformation> getScannedFiles(File dir, Map<File, FileInformation> interestingFiles) {
407
    public Map<File, FileInformation> getScannedFiles(File dir, Map<File, FileInformation> interestingFiles) {
408
        Map<File, FileInformation> files;
408
        Map<File, FileInformation> files;
409
        
409
        
410
        files = (Map<File, FileInformation>) turbo.readEntry(dir, FILE_STATUS_MAP);
410
        files = (Map<File, FileInformation>) turbo.readEntry(dir, FILE_STATUS_MAP);
Lines 682-688 Link Here
682
            // Only interested in looking for Hg managed dirs
682
            // Only interested in looking for Hg managed dirs
683
            for (File file : files) {
683
            for (File file : files) {
684
                if (file.isDirectory() && hg.getTopmostManagedParent(file) != null){
684
                if (file.isDirectory() && hg.getTopmostManagedParent(file) != null){
685
                    if (hg.isAdministrative(file) || SharabilityQuery.getSharability(file) == SharabilityQuery.NOT_SHARABLE)
685
                    if (hg.isAdministrative(file) || HgUtils.isIgnored(file))
686
                        folderFiles.put(file, FILE_INFORMATION_EXCLUDED_DIRECTORY); // Excluded dir
686
                        folderFiles.put(file, FILE_INFORMATION_EXCLUDED_DIRECTORY); // Excluded dir
687
                    else
687
                    else
688
                        folderFiles.put(file, FILE_INFORMATION_UPTODATE_DIRECTORY);
688
                        folderFiles.put(file, FILE_INFORMATION_UPTODATE_DIRECTORY);
Lines 693-698 Link Here
693
            return folderFiles;
693
            return folderFiles;
694
        }
694
        }
695
                
695
                
696
        boolean bInIgnoredDir = HgUtils.isIgnored(dir);
697
        if(bInIgnoredDir){
698
            for (File file : files) {
699
                if (HgUtils.isPartOfMercurialMetadata(file)) continue;
700
                
701
                if (file.isDirectory()) {
702
                    folderFiles.put(file, FILE_INFORMATION_EXCLUDED_DIRECTORY); // Excluded dir
703
                } else {
704
                    Mercurial.LOG.log(Level.FINE, "scanFolder exclude: {0}", file); // NOI18N
705
                    folderFiles.put(file, FILE_INFORMATION_EXCLUDED);
706
                }
707
            }
708
            return folderFiles;
709
        }
710
        
696
        if(interestingFiles == null){
711
        if(interestingFiles == null){
697
            try {
712
            try {
698
                interestingFiles = HgCommand.getInterestingStatus(rootManagedFolder, dir);
713
                interestingFiles = HgCommand.getInterestingStatus(rootManagedFolder, dir);
Lines 719-748 Link Here
719
        
734
        
720
        if (interestingFiles == null || interestingFiles.isEmpty()) return folderFiles;
735
        if (interestingFiles == null || interestingFiles.isEmpty()) return folderFiles;
721
736
722
        boolean bInIgnoredDir = SharabilityQuery.getSharability(dir) == SharabilityQuery.NOT_SHARABLE;
723
        if(bInIgnoredDir){
724
            for (File file : files) {
737
            for (File file : files) {
725
                if (HgUtils.isPartOfMercurialMetadata(file)) continue;
738
                if (HgUtils.isPartOfMercurialMetadata(file)) continue;
726
                
739
                
727
                if (file.isDirectory()) {
740
                if (file.isDirectory()) {
741
                if (hg.isAdministrative(file) || HgUtils.isIgnored(file)) {
728
                    folderFiles.put(file, FILE_INFORMATION_EXCLUDED_DIRECTORY); // Excluded dir
742
                    folderFiles.put(file, FILE_INFORMATION_EXCLUDED_DIRECTORY); // Excluded dir
729
                } else {
743
                } else {
730
                    folderFiles.put(file, FILE_INFORMATION_EXCLUDED);
731
                }
732
            }
733
            return folderFiles;
734
        }
735
        
736
        for (File file : files) {
737
            if (HgUtils.isPartOfMercurialMetadata(file)) continue;
738
            
739
            if (file.isDirectory()) {
740
                if (hg.isAdministrative(file) || SharabilityQuery.getSharability(file) == SharabilityQuery.NOT_SHARABLE)
741
                    folderFiles.put(file, FILE_INFORMATION_EXCLUDED_DIRECTORY); // Excluded dir
742
                else
743
                    folderFiles.put(file, FILE_INFORMATION_UPTODATE_DIRECTORY);
744
                    folderFiles.put(file, FILE_INFORMATION_UPTODATE_DIRECTORY);
745
                }
744
            } else {
746
            } else {
745
                FileInformation fi = interestingFiles.get(file);
747
                FileInformation fi = interestingFiles.get(file);
748
                if (fi == null) {
749
                    // We have removed -i from HgCommand.getInterestingFiles
750
                    // so we might have a file we should be ignoring
751
                    fi = createFileInformation(file);
752
                }
746
                if (fi != null && fi.getStatus() != FileInformation.STATUS_VERSIONED_UPTODATE)
753
                if (fi != null && fi.getStatus() != FileInformation.STATUS_VERSIONED_UPTODATE)
747
                    folderFiles.put(file, fi);
754
                    folderFiles.put(file, fi);
748
            }
755
            }
(-)versioncontrol/mercurial/src/org/netbeans/modules/mercurial/MercurialAnnotator.java (-3 / +46 lines)
Lines 48-62 Link Here
48
import org.netbeans.modules.versioning.spi.VersioningSupport;
48
import org.netbeans.modules.versioning.spi.VersioningSupport;
49
import org.netbeans.modules.versioning.util.Utils;
49
import org.netbeans.modules.versioning.util.Utils;
50
import org.netbeans.api.project.Project;
50
import org.netbeans.api.project.Project;
51
import org.openide.util.RequestProcessor;
51
import org.openide.util.Utilities;
52
import org.openide.util.Utilities;
52
import org.openide.nodes.Node;
53
import org.openide.nodes.Node;
53
import org.openide.util.NbBundle;
54
import org.openide.util.NbBundle;
55
import org.netbeans.modules.versioning.util.Utils;
54
import javax.swing.*;
56
import javax.swing.*;
55
import java.awt.Image;
57
import java.awt.Image;
56
import java.io.File;
58
import java.io.File;
57
import java.text.MessageFormat;
59
import java.text.MessageFormat;
58
import java.util.*;
60
import java.util.*;
61
import java.util.logging.Level;
59
import java.util.regex.Pattern;
62
import java.util.regex.Pattern;
63
import java.util.concurrent.ConcurrentLinkedQueue;
60
import java.lang.reflect.Field;
64
import java.lang.reflect.Field;
61
import java.lang.Exception;
65
import java.lang.Exception;
62
import org.netbeans.modules.mercurial.ui.annotate.AnnotateAction;
66
import org.netbeans.modules.mercurial.ui.annotate.AnnotateAction;
Lines 130-138 Link Here
130
    private MessageFormat format;
134
    private MessageFormat format;
131
    private String emptyFormat;
135
    private String emptyFormat;
132
    private Boolean needRevisionForFormat;
136
    private Boolean needRevisionForFormat;
137
    private File folderToScan;
138
    private ConcurrentLinkedQueue<File> dirsToScan = new ConcurrentLinkedQueue();
139
    private RequestProcessor.Task scanTask;
140
    private static final RequestProcessor rp = new RequestProcessor("MercurialAnnotateScan", 1, true); // NOI18N
133
    
141
    
134
    public MercurialAnnotator() {
142
    public MercurialAnnotator() {
135
        cache = Mercurial.getInstance().getFileStatusCache();
143
        cache = Mercurial.getInstance().getFileStatusCache();
144
        scanTask = rp.create(new ScanTask());
136
        initDefaults();
145
        initDefaults();
137
    }
146
    }
138
    
147
    
Lines 200-207 Link Here
200
        File mostImportantFile = null;
209
        File mostImportantFile = null;
201
        boolean folderAnnotation = false;
210
        boolean folderAnnotation = false;
202
        
211
        
203
        for (File file : context.getRootFiles()) {
212
        for (final File file : context.getRootFiles()) {
204
            FileInformation info = cache.getStatus(file);
213
            FileInformation info = cache.getCachedStatus(file);
214
            if (info == null) {
215
                File parentFile = file.getParentFile();
216
                Mercurial.LOG.log(Level.FINE, "null cached status for: {0} {1} {2}", new Object[] {file, folderToScan, parentFile});
217
                folderToScan = parentFile;
218
                reScheduleScan(1000);
219
                continue;
220
            }
205
            int status = info.getStatus();
221
            int status = info.getStatus();
206
            if ((status & includeStatus) == 0) continue;
222
            if ((status & includeStatus) == 0) continue;
207
            
223
            
Lines 242-248 Link Here
242
        boolean isVersioned = false;
258
        boolean isVersioned = false;
243
        for (Iterator i = context.getRootFiles().iterator(); i.hasNext();) {
259
        for (Iterator i = context.getRootFiles().iterator(); i.hasNext();) {
244
            File file = (File) i.next();
260
            File file = (File) i.next();
245
            if ((cache.getStatus(file).getStatus() & STATUS_BADGEABLE) != 0) {
261
            // There is an assumption here that annotateName was already 
262
            // called and FileStatusCache.getStatus was scheduled if
263
            // FileStatusCache.getCachedStatus returned null.
264
            FileInformation info = cache.getCachedStatus(file);
265
            if ((info != null && (info.getStatus() & STATUS_BADGEABLE) != 0)) {
246
                isVersioned = true;
266
                isVersioned = true;
247
                break;
267
                break;
248
            }
268
            }
Lines 634-637 Link Here
634
        return true;
654
        return true;
635
    }
655
    }
636
    
656
    
657
    private void reScheduleScan(int delayMillis) {
658
        File dirToScan = dirsToScan.peek();
659
        if (!folderToScan.equals(dirToScan)) {
660
            if (!dirsToScan.offer(folderToScan)) {
661
                Mercurial.LOG.log(Level.FINE, "reScheduleScan failed to add to dirsToScan queue: {0} ", folderToScan);
637
}
662
}
663
        }
664
        scanTask.schedule(delayMillis);
665
    }
666
667
    private class ScanTask implements Runnable {
668
        public void run() {
669
            Thread.interrupted();
670
            File dirToScan = dirsToScan.poll();
671
            if (dirToScan != null) {
672
                cache.getScannedFiles(dirToScan, null);
673
                dirToScan = dirsToScan.peek();
674
                if (dirToScan != null) {
675
                    scanTask.schedule(1000);
676
                }
677
            }
678
        }
679
    }
680
}
(-)versioncontrol/mercurial/src/org/netbeans/modules/mercurial/util/HgCommand.java (-1 / +1 lines)
Lines 89-95 Link Here
89
    private static final String HG_STATUS_FLAG_INCLUDE_CMD = "-I"; // NOI18N
89
    private static final String HG_STATUS_FLAG_INCLUDE_CMD = "-I"; // NOI18N
90
    private static final String HG_STATUS_FLAG_INCLUDE_GLOB_CMD = "glob:"; // NOI18N
90
    private static final String HG_STATUS_FLAG_INCLUDE_GLOB_CMD = "glob:"; // NOI18N
91
    private static final String HG_STATUS_FLAG_INCLUDE_END_CMD = "*"; // NOI18N
91
    private static final String HG_STATUS_FLAG_INCLUDE_END_CMD = "*"; // NOI18N
92
    private static final String HG_STATUS_FLAG_INTERESTING_CMD = "-marduiC"; // NOI18N
92
    private static final String HG_STATUS_FLAG_INTERESTING_CMD = "-marduC"; // NOI18N
93
    private static final String HG_STATUS_FLAG_UNKNOWN_CMD = "-u"; // NOI18N
93
    private static final String HG_STATUS_FLAG_UNKNOWN_CMD = "-u"; // NOI18N
94
    
94
    
95
    private static final String HG_COMMIT_CMD = "commit"; // NOI18N
95
    private static final String HG_COMMIT_CMD = "commit"; // NOI18N

Return to bug 121354