code: private void resync() throws IOException {
  		Path gtl;
  		synchronized(gitToplevelLock) {
  			gtl = gitToplevel;
  		}
  		WatchService w;
  		synchronized(watcherLock) {
  			w = watcher;
  		}
  		if(gtl != null && w != null) {
  			synchronized(registered) {
  				Set<Path> extraKeys = new HashSet<>(registered.keySet());
  				resync(w, gtl, extraKeys);
  				for(Path extraKey : extraKeys) {
  					if(DEBUG) log("Canceling watch key: " + extraKey);
  					registered.remove(extraKey).cancel();
  				}
  			}
  		}
  	}
docs: Resyncs the entire directory recursively, registering and canceling any
  discrepancies found.