Signed-off-by: Florian Koeberle <florianskarten@xxxxxx> --- .../src/org/spearce/jgit/pgm/AddCommand.java | 97 ++++++++++++++++++++ .../src/org/spearce/jgit/pgm/MainProgram.java | 1 + 2 files changed, 98 insertions(+), 0 deletions(-) create mode 100644 org.spearce.jgit/src/org/spearce/jgit/pgm/AddCommand.java diff --git a/org.spearce.jgit/src/org/spearce/jgit/pgm/AddCommand.java b/org.spearce.jgit/src/org/spearce/jgit/pgm/AddCommand.java new file mode 100644 index 0000000..6d0a0d6 --- /dev/null +++ b/org.spearce.jgit/src/org/spearce/jgit/pgm/AddCommand.java @@ -0,0 +1,97 @@ +/* + * 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.File; +import java.io.IOException; +import java.util.Arrays; + +import org.spearce.jgit.errors.InvalidPatternException; +import org.spearce.jgit.lib.GitIndex; +import org.spearce.jgit.lib.Repository; + +import static org.spearce.jgit.lib.Repository.findWorkTree; +import org.spearce.jgit.lib.WorkTree; +import org.spearce.jgit.lib.GitIndex.Entry; +import org.spearce.jgit.treewalk.LightFileTreeIterable; +import org.spearce.jgit.treewalk.rules.AddRulesFactory; +import org.spearce.jgit.treewalk.rules.Rules; + +/** + * The {@link #execute} method of this class is used to add files to the index. + * This class is immutable. + * + */ +public class AddCommand implements Command { + /** + * Use this instance instead of creating a new ${link AddCommand}. You don't + * need to create an instance of this class as it is immutable and not + * configurable. + */ + public static AddCommand INSTANCE = new AddCommand(); + + private AddRulesFactory addRulesFactory = new AddRulesFactory(); + + /** + * Adds the specified files to the index. + * + * @param args + * can contain "*.Suffix" patterns, files and directories. + */ + public void execute(String... args) throws IOException { + final WorkTree workTree = findWorkTree(); + final Repository repository = workTree.getRepository(); + try { + final GitIndex gitIndex = repository.getIndex(); + final File projectDirectory = workTree.getDirectory(); + final String workingDirectoryString = System + .getProperty("user.dir"); + if (workingDirectoryString == null) { + throw new UnableToDetermineWorkingDirectory(); + } + final File workingDirectory = new File(workingDirectoryString); + final Rules rules = addRulesFactory.createRules(workTree + .getDirectory(), workingDirectory, Arrays.asList(args)); + final Iterable<File> fileIterable = new LightFileTreeIterable( + workTree.getDirectory(), rules, false); + for (File path : fileIterable) { + if (path.isFile()) { + final Entry entry = gitIndex.add(projectDirectory, path); + entry.setAssumeValid(false); + } + } + gitIndex.write(); + } catch (UnableToDetermineWorkingDirectory e) { + System.err.println("Unable to determine working directory"); + System.exit(1); + } catch (InvalidPatternException e) { + System.err.printf("The pattern '%s' is invalid: %s", + e.getMessage(), e.getPattern()); + System.exit(1); + } finally { + repository.close(); + } + } + + public String getShortDescription() { + return "Adds one or more files to the index."; + } + + private static class UnableToDetermineWorkingDirectory extends Exception { + private static final long serialVersionUID = -4229647819515644868L; + } +} diff --git a/org.spearce.jgit/src/org/spearce/jgit/pgm/MainProgram.java b/org.spearce.jgit/src/org/spearce/jgit/pgm/MainProgram.java index 1ade91b..d9dafa3 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/pgm/MainProgram.java +++ b/org.spearce.jgit/src/org/spearce/jgit/pgm/MainProgram.java @@ -33,6 +33,7 @@ public class MainProgram { static { final Map<String, Command> commands = new HashMap<String, Command>(); + commands.put("add", AddCommand.INSTANCE); commands.put("init", InitCommand.INSTANCE); commands.put("help", HelpCommand.INSTANCE); commandNameToObjectMap = Collections.unmodifiableMap(commands); -- 1.5.4.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html