anchor.diff:        .catchError((e) => _completer.completeError(e));
     }
   
  -  Future<FileStatus> getFileStatus(Resource resource) {
  -    return new Future.error('unimplemented - getFileStatus()');
  -  }
  +  FileStatus getFileStatus(Resource resource) {
  +    // TODO:
  +    return FileStatus.UNKNOWN;
  +  }
  +
  +  Stream<ScmProjectOperations> get onStatusChange => _statusController.stream;
   
     Future<String> getBranchName() =>
         objectStore.then((store) => store.getCurrentBranch());
  
positive.code:     _providers.firstWhere((p) => p.id == type, orElse: () => null);
  
  /**
   * Returns the [ScmProjectOperations] for the given project, or `null` if the
   * project is not under SCM.
   */
  ScmProjectOperations getScmOperationsFor(Project project) {
    for (ScmProvider provider in _providers) {
      if (provider.isUnderScm(project)) {
        return provider.getOperationsFor(project);
      }
    }
  
    return null;
  }
  
  /**
  
negative.code:  * The possible SCM file statuses (`committed`, `dirty`, or `unknown`).
   */
  class FileStatus {
    static final FileStatus COMITTED = new FileStatus._('comitted');
    static final FileStatus DIRTY = new FileStatus._('dirty');
    static final FileStatus UNKNOWN = new FileStatus._('unknown');
  
    final String _status;
  
  