anchor.diff:        _scheduleWriteIndex();
     }
   
  -  Future updateIndex() {
  -    return walkFilesAndUpdateIndex(_store.root).then((List<String> filePaths) {
  +  Future updateIndex([bool updateSha=true]) {
  +    return walkFilesAndUpdateIndex(_store.root, updateSha).then(
  +        (List<String> filePaths) {
         _updateDeletedFiles(filePaths);
         return new Future.value();
       });
  
positive.code:          }
  
           if (entry.isDirectory) {
             return walkFilesAndUpdateIndex(entry as chrome.DirectoryEntry)
                 .then((List<String> paths) {
               filePaths.addAll(paths);
               return filePaths;
             });
           } else {
             // don't update index for untracked files.
             if (_statusIdx[entry.fullPath] != null) {
               return getShaForEntry(entry, 'blob').then((String sha) {
                 return entry.getMetadata().then((data) {
                   FileStatus status = new FileStatus();
                   status.path = entry.fullPath;
                   status.sha = sha;
                   status.size = data.size;
                   updateIndexForEntry(status);
                   filePaths.add(entry.fullPath);
                 });
               });
             }
           }
        }).then((_) {
  
negative.code:   }
  
    void updateIndexForEntry(FileStatus status) {
  
      FileStatus oldStatus = _statusIdx[status.path];
  
  