anchor.diff:     */
     bool _isScmProject(context) =>
         _isProject(context) && isUnderScm(context.first);
  +
  +  /**
  +   * Returns true if `context` is a list with of items, all in the same project,
  +   * and that project is under SCM.
  +   */
  +  bool _isUnderScmProject(context) {
  +    if (context is! List) return false;
  +    if (context.isEmpty) return false;
  +
  +    ws.Project project = context.first.project;
  +
  +    if (!isUnderScm(project)) return false;
  +
  +    for (var resource in context) {
  +      var resProject = resource.project;
  +      if (resProject == null || resProject != project) {
  +        return false;
  +      }
  +    }
  +
  +    return true;
  +  }
   
     /**
      * Returns true if `object` is a list with a single item and this item is a
  
positive.code:   bool appliesTo(context) => _isScmProject(context);
  }
  
  class _GitCloneJob extends Job {
    String url;
    String _projectName;
  
negative.code:     actionManager.registerAction(new GitCloneAction(this, getDialogElement("#gitCloneDialog")));
      actionManager.registerAction(new GitBranchAction(this, getDialogElement("#gitBranchDialog")));
      actionManager.registerAction(new GitCheckoutAction(this, getDialogElement("#gitCheckoutDialog")));
      actionManager.registerAction(new GitResolveConflictsAction(this));
      actionManager.registerAction(new GitCommitAction(this, getDialogElement("#gitCommitDialog")));
      actionManager.registerAction(new GitPushAction(this, getDialogElement("#gitPushDialog")));
      actionManager.registerAction(new RunTestsAction(this));
  