RevTreeHandler.java

  1. /*
  2.  * Copyright (C) 2009, Google Inc.
  3.  * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others
  4.  *
  5.  * This program and the accompanying materials are made available under the
  6.  * terms of the Eclipse Distribution License v. 1.0 which is available at
  7.  * https://www.eclipse.org/org/documents/edl-v10.php.
  8.  *
  9.  * SPDX-License-Identifier: BSD-3-Clause
  10.  */

  11. package org.eclipse.jgit.pgm.opt;

  12. import java.io.IOException;

  13. import org.eclipse.jgit.errors.IncorrectObjectTypeException;
  14. import org.eclipse.jgit.errors.MissingObjectException;
  15. import org.eclipse.jgit.lib.ObjectId;
  16. import org.eclipse.jgit.pgm.internal.CLIText;
  17. import org.eclipse.jgit.revwalk.RevTree;
  18. import org.kohsuke.args4j.CmdLineException;
  19. import org.kohsuke.args4j.CmdLineParser;
  20. import org.kohsuke.args4j.OptionDef;
  21. import org.kohsuke.args4j.spi.OptionHandler;
  22. import org.kohsuke.args4j.spi.Parameters;
  23. import org.kohsuke.args4j.spi.Setter;

  24. /**
  25.  * Custom argument handler {@link org.eclipse.jgit.revwalk.RevTree} from string
  26.  * values.
  27.  * <p>
  28.  * Assumes the parser has been initialized with a Repository.
  29.  */
  30. public class RevTreeHandler extends OptionHandler<RevTree> {
  31.     private final org.eclipse.jgit.pgm.opt.CmdLineParser clp;

  32.     /**
  33.      * Create a new handler for the command name.
  34.      * <p>
  35.      * This constructor is used only by args4j.
  36.      *
  37.      * @param parser
  38.      *            a {@link org.kohsuke.args4j.CmdLineParser} object.
  39.      * @param option
  40.      *            a {@link org.kohsuke.args4j.OptionDef} object.
  41.      * @param setter
  42.      *            a {@link org.kohsuke.args4j.spi.Setter} object.
  43.      */
  44.     public RevTreeHandler(final CmdLineParser parser, final OptionDef option,
  45.             final Setter<? super RevTree> setter) {
  46.         super(parser, option, setter);
  47.         clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser;
  48.     }

  49.     /** {@inheritDoc} */
  50.     @Override
  51.     public int parseArguments(Parameters params) throws CmdLineException {
  52.         final String name = params.getParameter(0);
  53.         final ObjectId id;
  54.         try {
  55.             id = clp.getRepository().resolve(name);
  56.         } catch (IOException e) {
  57.             throw new CmdLineException(clp, CLIText.format(e.getMessage()));
  58.         }
  59.         if (id == null)
  60.             throw new CmdLineException(clp,
  61.                     CLIText.format(CLIText.get().notATree), name);

  62.         final RevTree c;
  63.         try {
  64.             c = clp.getRevWalk().parseTree(id);
  65.         } catch (MissingObjectException | IncorrectObjectTypeException e) {
  66.             CmdLineException cle = new CmdLineException(clp,
  67.                     CLIText.format(CLIText.get().notATree), name);
  68.             cle.initCause(e);
  69.             throw cle;
  70.         } catch (IOException e) {
  71.             throw new CmdLineException(clp,
  72.                     CLIText.format(CLIText.get().cannotReadBecause), name,
  73.                     e.getMessage());
  74.         }
  75.         setter.addValue(c);
  76.         return 1;
  77.     }

  78.     /** {@inheritDoc} */
  79.     @Override
  80.     public String getDefaultMetaVariable() {
  81.         return CLIText.get().metaVar_treeish;
  82.     }
  83. }