anchor.diff:    bool appliesTo(context) => _isScmProject(context);
   }
   
  -class GitAddAction extends SparkAction implements ContextAction {
  -  GitAddAction(Spark spark) : super(spark, "git-add", "Git Add");
  +class GitAddAction extends SparkActionWithProgressDialog implements ContextAction {
  +  GitAddAction(Spark spark, SparkDialog dialog)
  +      : super(spark, "git-add", "Git Add", dialog);
     chrome.Entry entry;
   
     void _invoke([List<ws.Resource> resources]) {
  
positive.code:     resources.forEach((resource) {
        files.add(resource.entry);
      });
      spark.jobManager.schedule(new _GitAddJob(operations, files, spark));
    }
  
    String get category => 'git';
  
negative.code:     actionManager.registerAction(new CompileDartAction(this));
      actionManager.registerAction(new GitCloneAction(this, getDialogElement("#gitCloneDialog")));
      if (SparkFlags.showGitPull) {
        actionManager.registerAction(new GitPullAction(this, getDialogElement('#statusDialog')));
      }
      actionManager.registerAction(new GitBranchAction(this, getDialogElement("#gitBranchDialog")));
      actionManager.registerAction(new GitCheckoutAction(this, getDialogElement("#gitCheckoutDialog")));
      actionManager.registerAction(new GitAddAction(this, getDialogElement('#statusDialog')));
      actionManager.registerAction(new GitResolveConflictsAction(this));
      actionManager.registerAction(new GitCommitAction(this, getDialogElement("#gitCommitDialog")));
      actionManager.registerAction(new GitRevertChangesAction(this));
  