public boolean invoke() throws VcsException, IOException {
      myChangesCacheFile.myLocation.onBeforeBatch();
      Collection<FilePath> incomingFiles = myChangesCacheFile.myChangesProvider.getIncomingFiles(myChangesCacheFile.myLocation);

      myAnyChanges = false;
      myChangesCacheFile.openStreams();
      myChangesCacheFile.loadHeader();
      try {
        IncomingChangeState.header(myChangesCacheFile.myLocation.toPresentableString());

        final List<IncomingChangeListData> list = myChangesCacheFile.loadIncomingChangeListData();
        boolean shouldChangeHeader;
        if (incomingFiles != null && incomingFiles.isEmpty()) {
          // we should just delete any partial files
          shouldChangeHeader = ! list.isEmpty();
          for (IncomingChangeListData data : list) {
            myChangesCacheFile.saveIncoming(data, true);
          }
        } else {
          Stopwatch stopWatch = Stopwatch.createStarted();
          shouldChangeHeader = refreshIncomingInFile(incomingFiles, list);
          debug("Finished incoming refresh for " + myChangesCacheFile.myLocation.toPresentableString() + " in " + stopWatch.stop());
        }

        IncomingChangeState.footer();
        if (shouldChangeHeader) {
          myChangesCacheFile.writeHeader();
        }
      }
      finally {
        myChangesCacheFile.myLocation.onAfterBatch();
        myChangesCacheFile.closeStreams();
      }
      return myAnyChanges;
    }
public boolean invoke()