git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[JGIT PATCH 01/22] Start of an implementation of a git like command line tool.

From
FKFlorian Koeberle <florianskarten@web.de>
Date
May 10, 2008, 13:00 UTC
Message-ID
<1210424440-13886-2-git-send-email-florianskarten@web.de>
In-Reply-To
<1210424440-13886-1-git-send-email-florianskarten@web.de>
Only the "help" command is currenly supported, but it is extendable.
Signed-off-by: Florian Koeberle <florianskarten@web.de>
---
 .../src/org/spearce/jgit/pgm/Command.java          |   40 +++++++
 .../src/org/spearce/jgit/pgm/MainProgram.java      |  114 ++++++++++++++++++++
 2 files changed, 154 insertions(+), 0 deletions(-)
 create mode 100644 org.spearce.jgit/src/org/spearce/jgit/pgm/Command.java
 create mode 100644 org.spearce.jgit/src/org/spearce/jgit/pgm/MainProgram.java
diff --git a/org.spearce.jgit/src/org/spearce/jgit/pgm/Command.java b/org.spearce.jgit/src/org/spearce/jgit/pgm/Command.java
new file mode 100644
index 0000000..cf66b20
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/pgm/Command.java
@@ -0,0 +1,40 @@
+/*
+ *  Copyright (C) 2008 Florian Köberle
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public
+ *  License, version 2, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ */
+package org.spearce.jgit.pgm;
+
+import java.io.IOException;
+
+/**
+ * A command have tasks like the "git-add", "git-help" or "git-init" console commands.
+ * Instances of ${link Command} must be immutable.
+ * @author Florian Köberle
+ *
+ */
+public interface Command {
+	/**
+	 * Executes the specified Command.
+	 * @param args the arguments which you would pass to the console equivalent of the command.
+	 * @throws IOException for some undefined reasons.
+	 */
+	public void execute(String... args) throws IOException;
+
+	/**
+	 * 
+	 * @return a short description about what the command does. Short means in this context 5 - 10 words.
+	 */
+	public String getShortDescription();
+}
\ No newline at end of file
diff --git a/org.spearce.jgit/src/org/spearce/jgit/pgm/MainProgram.java b/org.spearce.jgit/src/org/spearce/jgit/pgm/MainProgram.java
new file mode 100644
index 0000000..72b0156
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/pgm/MainProgram.java
@@ -0,0 +1,114 @@
+/*
+ *  Copyright (C) 2008 Florian Köberle
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public
+ *  License, version 2, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ */
+package org.spearce.jgit.pgm;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * A program which works similar like the command git, except that very view
+ * arguments are supported jet.
+ * 
+ * @author Florian Köberle
+ * 
+ */
+public class MainProgram {
+	private final static Map<String, Command> commandNameToObjectMap;
+
+	static {
+		final Map<String, Command> commands = new HashMap<String, Command>();
+		commands.put("help", HelpCommand.INSTANCE);
+		commandNameToObjectMap = Collections.unmodifiableMap(commands);
+	}
+
+	/**
+	 * Executes a command with some arguments. There are commands for creating
+	 * git repositories, tracking files, etc.
+	 * 
+	 * @param args
+	 *            The first argument specifies the command which should be
+	 *            executed. The other arguments are passed to the command.
+	 * @throws IOException
+	 *             for some reasons.
+	 */
+	public static void main(String[] args) throws IOException {
+		try {
+			if (args.length == 0) {
+				throw new WrongCallException("Require one argument!");
+			}
+			final Command command = commandNameToObjectMap.get(args[0]);
+			if (command == null) {
+				throw new WrongCallException("Require one argument!");
+			}
+			final String[] commandArguments = Arrays.copyOfRange(args, 1,
+					args.length);
+			command.execute(commandArguments);
+
+		} catch (WrongCallException e) {
+			System.err.println(e.getMessage());
+			System.err.println();
+			HelpCommand.INSTANCE.execute();
+			System.exit(1);
+		}
+	}
+
+	private static class WrongCallException extends Exception {
+		private static final long serialVersionUID = 3643362832429311084L;
+
+		WrongCallException(String message) {
+			super(message);
+		}
+	}
+
+	private static class HelpCommand implements Command {
+		/**
+		 * Use this instance instead of creating a new ${link HelpCommand}. You
+		 * don't need to create an instance of this class as it is immutable and
+		 * not configurable.
+		 */
+		public static HelpCommand INSTANCE = new HelpCommand();
+
+		public void execute(String... args) throws IOException {
+			System.out
+					.println("Call this program with the following arguments:");
+			System.out
+					.println("commandName commandArgument0 commandArgument1 ...");
+			System.out.println();
+			System.out
+					.println("Currently the following commands are supported:");
+			final SortedMap<String, Command> sortedCommandMap = new TreeMap<String, Command>(
+					MainProgram.commandNameToObjectMap);
+			for (Map.Entry<String, Command> commandEntry : sortedCommandMap
+					.entrySet()) {
+				final String commandName = commandEntry.getKey();
+				final String commandDescription = commandEntry.getValue()
+						.getShortDescription();
+				System.out.printf("%#10s - %s%n", commandName,
+						commandDescription);
+			}
+		}
+
+		public String getShortDescription() {
+			return "Displays some text about how to use this program.";
+		}
+	}
+}
-- 
1.5.2.5
Previous: Florian KoeberleNext: Florian Koeberle
Message 2 of 35 in “Implementation of a file tree iteration using ignore rules.”
  1. Implementation of a file tree iteration using ignore rules.Florian Koeberle, May 10, 2008
  2. 01/22 Start of an implementation of a git like command line tool.Florian Koeberle, May 10, 2008
  3. 02/22 Replaced Java 6 API useage with Java 5 equivalent.Florian Koeberle, May 10, 2008
  4. 03/22 Added a class Project which represents a project directory and it's repository.Florian Koeberle, May 10, 2008
  5. Robin RosenbergMay 10, 2008
  6. 04/22 Added a "init" command to the git like command line tool.Florian Koeberle, May 10, 2008
  7. 05/22 Added ProjectSeeker class.Florian Koeberle, May 10, 2008
  8. Robin RosenbergMay 10, 2008
  9. 06/22 Added the interface FilePattern.Florian Koeberle, May 10, 2008
  10. 07/22 Added the class Rule.Florian Koeberle, May 10, 2008
  11. 08/22 Added the iterface Rules.Florian Koeberle, May 10, 2008
  12. Robin RosenbergMay 10, 2008
  13. 09/22 Added the class FileTreeIterator and a test for it.Florian Koeberle, May 10, 2008
  14. 10/22 Added class FileTreeIterable.Florian Koeberle, May 10, 2008
  15. 11/22 Added the class StarPattern.Florian Koeberle, May 10, 2008
  16. Robin RosenbergMay 10, 2008
  17. 12/22 Added the class GlobalFilePatternFlorian Koeberle, May 10, 2008
  18. 13/22 Added the class ComplexFilePattern.Florian Koeberle, May 10, 2008
  19. Robin RosenbergMay 10, 2008
  20. 14/22 Added the class IgnoreRuleListFactory.Florian Koeberle, May 10, 2008
  21. Robin RosenbergMay 10, 2008
  22. 15/22 Added a Rules interface implementation and a factory for it.Florian Koeberle, May 10, 2008
  23. 16/22 Added test class OverallIgnoreRulestest.Florian Koeberle, May 10, 2008
  24. 17/22 Added the class TreeFilePattern.Florian Koeberle, May 10, 2008
  25. 18/22 Added InvalidPatternException and PathNotInProjectDirectoryExceptionFlorian Koeberle, May 10, 2008
  26. Robin RosenbergMay 10, 2008
  27. 19/22 Added the class AddRuleListFactory.Florian Koeberle, May 10, 2008
  28. Robin RosenbergMay 10, 2008
  29. 20/22 Added class FileIterableFactoryForAddCommand.Florian Koeberle, May 10, 2008
  30. 21/22 Added test class FileIterableFactoryForAddCommandTest.Florian Koeberle, May 10, 2008
  31. Robin RosenbergMay 10, 2008
  32. 22/22 Added a "add" command to the git like command line tool.Florian Koeberle, May 10, 2008
  33. Robin RosenbergMay 10, 2008
  34. Robin RosenbergMay 10, 2008
  35. Shawn O. PearceMay 11, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.