Collection getFiles()

in command.line/java/com/jetbrains/teamcity/command/RemoteRun.java [602:662]


  Collection<File> getFiles(Args args, IProgressMonitor monitor) throws IllegalArgumentException {
    monitor.beginTask(getMsg("RemoteRun.collect.changes.step.name"));
    final String[] elements = args.getArguments();
    int i = 0;// skip command
    while (i < elements.length) {
      final String currentToken = elements[i].toLowerCase();
      if (elements[i].startsWith("-")) { 
        if (elements[i].toLowerCase().equals(CONFIGURATION_PARAM) || elements[i].toLowerCase().equals(CONFIGURATION_PARAM_LONG)) {
          i++; // arg
          if (elements[i].toLowerCase().equals(PROJECT_PARAM) || elements[i].toLowerCase().equals(PROJECT_PARAM_LONG)) {
            i++; // arg
          }
          i++; // arg value
        }
        else if (elements[i].toLowerCase().equals(NO_WAIT_SWITCH) || currentToken.equals(NO_WAIT_SWITCH_LONG) || currentToken.equals(CHECK_FOR_CHANGES_EARLY_SWITCH)) {
          i++; // single token
        }
        else {
          i++; // arg
          i++; // args value
        }
      } else {
        // reach files
        break;
      }
    }

    Collection<File> result;

    if (elements.length > i) {// file's part existing
      final String[] buffer = new String[elements.length - i];
      System.arraycopy(elements, i, buffer, 0, buffer.length);
      debug("Read from arguments: %s", Arrays.toString(buffer));
      result = collectFiles(buffer);
    } else {
      // try read from stdin
      debug("Trying stdin...");
      final String input = readFromStream(System.in);
      if (input != null && input.trim().length() > 0) {
        final String[] buffer = input.split("[\n\r]");
        debug("Read from stdin: %s", Arrays.toString(buffer));
        result = collectFiles(buffer);

      } else { // let's use current directory as root if nothing passed
        debug("Stdin is empty. Will use current (%s) folder as root", new File("."));
        result = TCC_FILTER.accept(Util.SVN_FILES_FILTER.accept(Util.CVS_FILES_FILTER.accept(Util.getFiles("."))));
      }
    }
    if (result.size() == 0) {
      throw new IllegalArgumentException(getMsg("RemoteRun.no.files.collected.for.remoterun.error.message"));
    }
    
    result = normalizePaths(result);

    monitor.status(new ProgressStatus(IProgressStatus.INFO, format(getMsg("RemoteRun.collect.changes.step.result.pattern"), result.size())));
    monitor.done(); 
    for (final File collected : result) {
      debug("%s", collected);
    }
    return result;
  }