public Configurable createConfigurable()

in src/org/jetbrains/tfsIntegration/core/TFSUpdateEnvironment.java [141:198]


  public Configurable createConfigurable(final Collection<FilePath> files) {
    final Map<WorkspaceInfo, UpdateSettingsForm.WorkspaceSettings> workspacesSettings =
      new HashMap<>();
    final Ref<TfsException> error = new Ref<>();
    Runnable r = () -> {
      try {
        WorkstationHelper.processByWorkspaces(files, true, myVcs.getProject(), new WorkstationHelper.VoidProcessDelegate() {
          @Override
          public void executeRequest(final WorkspaceInfo workspace, final List<ItemPath> paths) throws TfsException {
            final Map<FilePath, ExtendedItem> result =
              workspace.getExtendedItems2(paths, myVcs.getProject(), TFSBundle.message("loading.items"));
            Collection<ExtendedItem> items = new ArrayList<>(result.values());
            for (Iterator<ExtendedItem> i = items.iterator(); i.hasNext();) {
              final ExtendedItem extendedItem = i.next();
              if (extendedItem == null || extendedItem.getSitem() == null) {
                i.remove();
              }
            }

            if (items.isEmpty()) {
              return;
            }

            // determine common ancestor of all the paths
            ExtendedItem someExtendedItem = items.iterator().next();
            UpdateSettingsForm.WorkspaceSettings workspaceSettings =
              new UpdateSettingsForm.WorkspaceSettings(someExtendedItem.getSitem(), someExtendedItem.getType() == ItemType.Folder);
            for (ExtendedItem extendedItem : items) {
              final String path1 = workspaceSettings.serverPath;
              final String path2 = extendedItem.getSitem();
              if (VersionControlPath.isUnder(path2, path1)) {
                workspaceSettings = new UpdateSettingsForm.WorkspaceSettings(path2, extendedItem.getType() == ItemType.Folder);
              }
              else if (!VersionControlPath.isUnder(path1, path2)) {
                workspaceSettings = new UpdateSettingsForm.WorkspaceSettings(VersionControlPath.getCommonAncestor(path1, path2), true);
              }
            }
            workspacesSettings.put(workspace, workspaceSettings);
          }
        });
      }
      catch (TfsException e) {
        error.set(e);
      }
    };

    ProgressManager.getInstance().runProcessWithProgressSynchronously(r, "TFS: preparing for update...", false, myVcs.getProject());

    if (!error.isNull()) {
      //Messages.showErrorDialog(myVcs.getProject(), error.get().getMessage(), "Update Project");
      return null;
    }
    if (workspacesSettings.isEmpty()) {
      return null;
    }

    return new UpdateConfigurable(myVcs.getProject(), workspacesSettings);
  }