Renamed constants, local variables and member variables using "hg" to "git".
[nbgit.git] / src / org / netbeans / modules / git / ui / status / StatusAction.java
blobc2503c76bfe3f33b7b52e63f0483a3089bc3acc5
1 package org.netbeans.modules.git.ui.status;
3 import java.awt.event.ActionEvent;
4 import java.io.File;
5 import java.util.Calendar;
6 import java.util.Collection;
7 import java.util.Map;
8 import java.util.logging.Level;
9 import javax.swing.Action;
10 import org.netbeans.modules.git.FileInformation;
11 import org.netbeans.modules.git.FileStatusCache;
12 import org.netbeans.modules.git.Git;
13 import org.netbeans.modules.git.GitException;
14 import org.netbeans.modules.git.GitProgressSupport;
15 import org.netbeans.modules.git.ui.actions.ContextAction;
16 import org.netbeans.modules.git.util.GitCommand;
17 import org.netbeans.modules.git.util.GitUtils;
18 import org.netbeans.modules.versioning.spi.VCSContext;
19 import org.netbeans.modules.versioning.util.Utils;
21 /**
22 * Status action for Git:
23 * git status - show changed files in the working directory
25 * @author John Rice
27 public class StatusAction extends ContextAction {
29 private final VCSContext context;
31 public StatusAction(String name, VCSContext context) {
32 this.context = context;
33 putValue(Action.NAME, name);
36 public void performAction(ActionEvent ev) {
37 File [] files = context.getRootFiles().toArray(new File[context.getRootFiles().size()]);
38 if (files == null || files.length == 0) return;
40 final GitVersioningTopComponent stc = GitVersioningTopComponent.findInstance();
41 stc.setContentTitle(Utils.getContextDisplayName(context));
42 stc.setContext(context);
43 stc.open();
44 stc.requestActive();
45 stc.performRefreshAction();
48 @Override
49 public boolean isEnabled() {
50 return GitUtils.getRootFile(context) != null;
53 /**
54 * Connects to repository and gets recent status.
56 public static void executeStatus(final VCSContext context, GitProgressSupport support) {
58 if (context == null || context.getRootFiles().size() == 0) {
59 return;
61 File repository = GitUtils.getRootFile(context);
62 if (repository == null) {
63 return;
66 try {
67 FileStatusCache cache = Git.getInstance().getFileStatusCache();
68 Calendar start = Calendar.getInstance();
69 cache.refreshCached(context);
70 Calendar end = Calendar.getInstance();
71 Git.LOG.log(Level.FINE, "executeStatus: refreshCached took {0} millisecs", end.getTimeInMillis() - start.getTimeInMillis()); // NOI18N
73 for (File root : context.getRootFiles()) {
74 if(support.isCanceled()) {
75 return;
77 if (root.isDirectory()) {
78 Map<File, FileInformation> interestingFiles;
79 interestingFiles = GitCommand.getInterestingStatus(repository, root);
80 if (!interestingFiles.isEmpty()){
81 Collection<File> files = interestingFiles.keySet();
83 Map<File, Map<File,FileInformation>> interestingDirs =
84 GitUtils.getInterestingDirs(interestingFiles, files);
86 start = Calendar.getInstance();
87 for (File file : files) {
88 if(support.isCanceled()) {
89 return;
91 FileInformation fi = interestingFiles.get(file);
93 cache.refreshFileStatus(file, fi,
94 interestingDirs.get(file.isDirectory()? file: file.getParentFile()));
96 end = Calendar.getInstance();
97 Git.LOG.log(Level.FINE, "executeStatus: process interesting files took {0} millisecs", end.getTimeInMillis() - start.getTimeInMillis()); // NOI18N
99 } else {
100 cache.refresh(root, FileStatusCache.REPOSITORY_STATUS_UNKNOWN);
103 } catch (GitException ex) {
104 support.annotate(ex);