From 0e40be3c85686a4f583c0878769e9dea0f057c1a Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Wed, 24 Sep 2008 23:56:22 +0200 Subject: [PATCH] Add create support to the branch command The help string hinted it could create branches, but it was not implemented. Signed-off-by: Robin Rosenberg Signed-off-by: Shawn O. Pearce --- .../src/org/spearce/jgit/pgm/Branch.java | 38 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Branch.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Branch.java index a266244e..db0aab86 100644 --- a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Branch.java +++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Branch.java @@ -45,13 +45,16 @@ import java.util.Map; import java.util.Map.Entry; import org.kohsuke.args4j.Argument; +import org.kohsuke.args4j.ExampleMode; import org.kohsuke.args4j.Option; import org.spearce.jgit.lib.Constants; import org.spearce.jgit.lib.ObjectId; import org.spearce.jgit.lib.Ref; import org.spearce.jgit.lib.RefComparator; import org.spearce.jgit.lib.RefUpdate; +import org.spearce.jgit.lib.Repository; import org.spearce.jgit.lib.RefUpdate.Result; +import org.spearce.jgit.pgm.opt.CmdLineParser; import org.spearce.jgit.revwalk.RevWalk; @Command(common = true, usage = "List, create, or delete branches") @@ -69,6 +72,9 @@ class Branch extends TextBuiltin { @Option(name = "--delete-force", aliases = { "-D" }, usage = "delete branch (even if not merged)") private boolean deleteForce = false; + @Option(name = "--create-force", aliases = { "-f" }, usage = "force create branch even exists") + private boolean createForce = false; + @Option(name = "--verbose", aliases = { "-v" }, usage = "be verbose") private boolean verbose = false; @@ -87,9 +93,35 @@ class Branch extends TextBuiltin { if (delete || deleteForce) delete(deleteForce); else { - if (verbose) - rw = new RevWalk(db); - list(); + if (branches.size() > 2) + throw die("Too many refs given\n" + new CmdLineParser(this).printExample(ExampleMode.ALL)); + + if (branches.size() > 0) { + String newHead = branches.get(0); + ObjectId startAt; + if (branches.size() == 2) + startAt = db.resolve(branches.get(1) + "^0"); + else + startAt = db.resolve(Constants.HEAD + "^0"); + + String newRefName = newHead; + if (!newRefName.startsWith(Constants.R_HEADS)) + newRefName = Constants.R_HEADS + newRefName; + if (!Repository.isValidRefName(newRefName)) + throw die(String.format("%s is not a valid ref name", newRefName)); + if (!createForce && db.resolve(newRefName) != null) + throw die(String.format("branch %s already exists", newHead)); + RefUpdate updateRef = db.updateRef(newRefName); + updateRef.setNewObjectId(startAt); + updateRef.setForceUpdate(createForce); + Result update = updateRef.update(); + if (update == Result.REJECTED) + throw die(String.format("Could not create branch %s: %s", newHead, update.toString())); + } else { + if (verbose) + rw = new RevWalk(db); + list(); + } } } -- 2.11.4.GIT