From: "Shawn O. Pearce" <spearce@spearce.org>
To: Robin Rosenberg <robin.rosenberg@dewire.com>,
Marek Zawirski <marek.zawirski@gmail.com>
Cc: git@vger.kernel.org
Subject: [JGIT PATCH 09/28] Add option handler for AbstractTreeIterator values
Date: Thu, 17 Jul 2008 21:44:02 -0400 [thread overview]
Message-ID: <1216345461-59382-10-git-send-email-spearce@spearce.org> (raw)
In-Reply-To: <1216345461-59382-9-git-send-email-spearce@spearce.org>
Converts String to AbstractTreeIterator on demand. A string
that can be resolved as a RevTree is read with a canonical
tree iterator, as it is a standard Git tree already stored in
the object database. Otherwise we assume it is a local file
and scan the filesystem, as it may be a working directory.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
.../jgit/pgm/opt/AbstractTreeIteratorHandler.java | 121 ++++++++++++++++++++
1 files changed, 121 insertions(+), 0 deletions(-)
create mode 100644 org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/opt/AbstractTreeIteratorHandler.java
diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/opt/AbstractTreeIteratorHandler.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/opt/AbstractTreeIteratorHandler.java
new file mode 100644
index 0000000..31d1c84
--- /dev/null
+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/opt/AbstractTreeIteratorHandler.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.spearce.jgit.pgm.opt;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.args4j.CmdLineParser;
+import org.kohsuke.args4j.OptionDef;
+import org.kohsuke.args4j.spi.OptionHandler;
+import org.kohsuke.args4j.spi.Parameters;
+import org.kohsuke.args4j.spi.Setter;
+import org.spearce.jgit.errors.IncorrectObjectTypeException;
+import org.spearce.jgit.errors.MissingObjectException;
+import org.spearce.jgit.lib.ObjectId;
+import org.spearce.jgit.treewalk.AbstractTreeIterator;
+import org.spearce.jgit.treewalk.CanonicalTreeParser;
+import org.spearce.jgit.treewalk.FileTreeIterator;
+
+/**
+ * Custom argument handler {@link AbstractTreeIterator} from string values.
+ * <p>
+ * Assumes the parser has been initialized with a Repository.
+ */
+public class AbstractTreeIteratorHandler extends
+ OptionHandler<AbstractTreeIterator> {
+ private final org.spearce.jgit.pgm.opt.CmdLineParser clp;
+
+ /**
+ * Create a new handler for the command name.
+ * <p>
+ * This constructor is used only by args4j.
+ *
+ * @param parser
+ * @param option
+ * @param setter
+ */
+ public AbstractTreeIteratorHandler(final CmdLineParser parser,
+ final OptionDef option,
+ final Setter<? super AbstractTreeIterator> setter) {
+ super(parser, option, setter);
+ clp = (org.spearce.jgit.pgm.opt.CmdLineParser) parser;
+ }
+
+ @Override
+ public int parseArguments(final Parameters params) throws CmdLineException {
+ final String name = params.getParameter(0);
+
+ if (new File(name).isDirectory()) {
+ setter.addValue(new FileTreeIterator(new File(name)));
+ return 1;
+ }
+
+ final ObjectId id;
+ try {
+ id = clp.getRepository().resolve(name);
+ } catch (IOException e) {
+ throw new CmdLineException(e.getMessage());
+ }
+ if (id == null)
+ throw new CmdLineException(name + " is not a tree");
+
+ final CanonicalTreeParser p = new CanonicalTreeParser();
+ try {
+ p.reset(clp.getRepository(), clp.getRevWalk().parseTree(id));
+ } catch (ClassCastException e) {
+ throw new CmdLineException(name + " is not a tree");
+ } catch (MissingObjectException e) {
+ throw new CmdLineException(name + " is not a tree");
+ } catch (IncorrectObjectTypeException e) {
+ throw new CmdLineException(name + " is not a tree");
+ } catch (IOException e) {
+ throw new CmdLineException("cannot read " + name + ": "
+ + e.getMessage());
+ }
+
+ setter.addValue(p);
+ return 1;
+ }
+
+ @Override
+ public String getDefaultMetaVariable() {
+ return "tree-ish";
+ }
+}
--
1.5.6.3.569.ga9185
next prev parent reply other threads:[~2008-07-18 1:46 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-18 1:43 [JGIT PATCH 00/28] Convert command line parsing to args4j Shawn O. Pearce
2008-07-18 1:43 ` [JGIT PATCH 01/28] Fix deadlock caused by push over SSH Shawn O. Pearce
2008-07-18 1:43 ` [JGIT PATCH 02/28] Use die utility method in glog Shawn O. Pearce
2008-07-18 1:43 ` [JGIT PATCH 03/28] Add args4j library for command line switch processing Shawn O. Pearce
2008-07-18 1:43 ` [JGIT PATCH 04/28] Move org.spearce.jgit.pgm to its own Java project Shawn O. Pearce
2008-07-18 1:43 ` [JGIT PATCH 05/28] Make TextBuiltin public so other packages can implement and use it Shawn O. Pearce
2008-07-18 1:43 ` [JGIT PATCH 06/28] Initialize TextBuiltins with the repository before execution Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 07/28] Define our own extended CmdLineParser for extra parsing support Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 08/28] Add parseTree method to RevWalk to obtain a RevTree from AnyObjectId Shawn O. Pearce
2008-07-18 1:44 ` Shawn O. Pearce [this message]
2008-07-18 1:44 ` [JGIT PATCH 10/28] Add option handler for ObjectId values Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 11/28] Add option handler for PathTreeFilter values Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 12/28] Add option handler for RefSpec values Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 13/28] Add option handler for RevCommit values Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 14/28] Add option handler for RevTree values Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 15/28] Register most of our OptionHandler implementations for automatic use Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 16/28] Convert jgit's Main to use args4j for basic parsing services Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 17/28] Support automatic command line parsing for TextBuiltin subclasses Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 18/28] Convert diff-tree program to args4j Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 19/28] Convert fetch " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 20/28] Convert index-pack " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 21/28] Convert ls-remote " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 22/28] Convert ls-tree " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 23/28] Convert merge-base " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 24/28] Convert push " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 25/28] Convert show-ref " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 26/28] Convert tag " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 27/28] Convert rev-list, log, glog programs " Shawn O. Pearce
2008-07-18 1:44 ` [JGIT PATCH 28/28] Remove support for legacy style TextBuiltins Shawn O. Pearce
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1216345461-59382-10-git-send-email-spearce@spearce.org \
--to=spearce@spearce.org \
--cc=git@vger.kernel.org \
--cc=marek.zawirski@gmail.com \
--cc=robin.rosenberg@dewire.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).