private boolean isDeletedRemotely(SyncInfo info) {
   int kind = info.getKind();
   if (kind == (SyncInfo.INCOMING | SyncInfo.DELETION)) return true;
   if (SyncInfo.getDirection(kind) == SyncInfo.CONFLICTING && info.getRemote() == null)
     return true;
   return false;
 }
 private boolean requiresCustomSyncInfo(
     SyncInfo info, ICVSRemoteResource remoteResource, ILogEntry logEntry) {
   // Only interested in non-deletions
   if (logEntry.isDeletion() || !(info instanceof CVSSyncInfo)) return false;
   // Only require a custom sync info if the remote of the sync info
   // differs from the remote in the log entry
   IResourceVariant remote = info.getRemote();
   if (remote == null) return true;
   return !remote.equals(remoteResource);
 }
 /*
  * Add the remote change to an incoming commit set
  */
 private void addRemoteChange(
     SyncInfo info, ICVSRemoteResource remoteResource, ILogEntry logEntry) {
   if (disposed) return;
   LogEntryCacheUpdateHandler handler = getLogEntryHandler();
   if (handler != null
       && remoteResource != null
       && logEntry != null
       && handler.isRemoteChange(info)) {
     if (requiresCustomSyncInfo(info, remoteResource, logEntry)) {
       info =
           new CVSUpdatableSyncInfo(
               info.getKind(),
               info.getLocal(),
               info.getBase(),
               (RemoteResource) logEntry.getRemoteFile(),
               ((CVSSyncInfo) info).getSubscriber());
       try {
         info.init();
       } catch (TeamException e) {
         // this shouldn't happen, we've provided our own calculate kind
       }
     }
     // Only add the info if the base and remote differ
     IResourceVariant base = info.getBase();
     IResourceVariant remote = info.getRemote();
     if ((base == null && remote != null)
         || (remote == null && base != null)
         || (remote != null && base != null && !base.equals(remote))) {
       synchronized (this) {
         CheckedInChangeSet set = getChangeSetFor(logEntry);
         if (set == null) {
           set = createChangeSetFor(logEntry);
           add(set);
         }
         set.add(info);
       }
     }
   } else {
     // The info was not retrieved for the remote change for some reason.
     // Add the node to the root
     addToDefaultSet(DEFAULT_INCOMING_SET_NAME, info);
   }
 }