anchor.diff:      if (_options.progressCallback == null) {
         _options.progressCallback = nopFunction;
       }
  +
  +    cancel = new CloneCancel();
     }
   
     chrome.DirectoryEntry get root => _options.root;
  
positive.code:   }
  
    /**
     * Public for testing purpose.
     */
    Future startClone(HttpFetcher fetcher) {
      return _checkDirectory(_options.root, _options.store, true).then((_) {
        return _options.root.createDirectory(".git").then(
            (chrome.DirectoryEntry gitDir) {
          return fetcher.fetchUploadRefs().then((List<GitRef> refs) {
            logger.info(_stopwatch.finishCurrentTask('fetchUploadRefs'));
  
            if (refs.isEmpty) {
  
negative.code: 
              logger.info(_stopwatch.finishCurrentTask('_writeRefs'));
  
              return callMethod(_processClone, [gitDir, localHeadRef, fetcher]);
            });
          }, onError: (e) {
            // Clean-up git directory and then re-throw error.
            _options.root.getDirectory(".git").then(
                (chrome.DirectoryEntry gitDir) => gitDir.removeRecursively());
            if (e is GitException && e.errorCode
                == GitErrorConstants.GIT_CLONE_CANCEL) {
              throw e;
            }
            throw "unable to load remote repo";
          }).whenComplete(() {
            logger.info(_stopwatch.finishProfiler());
  