You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PathTreeFilterHandler.java 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. package org.eclipse.jgit.pgm.opt;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. import org.eclipse.jgit.pgm.internal.CLIText;
  14. import org.eclipse.jgit.treewalk.filter.PathFilter;
  15. import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
  16. import org.eclipse.jgit.treewalk.filter.TreeFilter;
  17. import org.kohsuke.args4j.CmdLineException;
  18. import org.kohsuke.args4j.CmdLineParser;
  19. import org.kohsuke.args4j.OptionDef;
  20. import org.kohsuke.args4j.spi.OptionHandler;
  21. import org.kohsuke.args4j.spi.Parameters;
  22. import org.kohsuke.args4j.spi.Setter;
  23. /**
  24. * Create a {@link org.eclipse.jgit.treewalk.filter.TreeFilter} to match path
  25. * names.
  26. * <p>
  27. * This handler consumes all arguments to the end of the command line, and is
  28. * meant to be used on an {@link org.kohsuke.args4j.Option} of name "--".
  29. */
  30. public class PathTreeFilterHandler extends OptionHandler<TreeFilter> {
  31. /**
  32. * Create a new handler for the command name.
  33. * <p>
  34. * This constructor is used only by args4j.
  35. *
  36. * @param parser
  37. * a {@link org.kohsuke.args4j.CmdLineParser} object.
  38. * @param option
  39. * a {@link org.kohsuke.args4j.OptionDef} object.
  40. * @param setter
  41. * a {@link org.kohsuke.args4j.spi.Setter} object.
  42. */
  43. public PathTreeFilterHandler(final CmdLineParser parser,
  44. final OptionDef option, final Setter<? super TreeFilter> setter) {
  45. super(parser, option, setter);
  46. }
  47. /** {@inheritDoc} */
  48. @Override
  49. public int parseArguments(Parameters params) throws CmdLineException {
  50. final List<PathFilter> filters = new ArrayList<>();
  51. for (int idx = 0;; idx++) {
  52. final String path;
  53. try {
  54. path = params.getParameter(idx);
  55. } catch (CmdLineException cle) {
  56. break;
  57. }
  58. filters.add(PathFilter.create(path));
  59. }
  60. if (filters.isEmpty())
  61. return 0;
  62. if (filters.size() == 1) {
  63. setter.addValue(filters.get(0));
  64. return 1;
  65. }
  66. setter.addValue(PathFilterGroup.create(filters));
  67. return filters.size();
  68. }
  69. /** {@inheritDoc} */
  70. @Override
  71. public String getDefaultMetaVariable() {
  72. return CLIText.get().metaVar_paths;
  73. }
  74. }