From 90b8d7e0e1b5e5ed296c1213168b9a8937ac66fd Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 02 Feb 2012 20:02:40 -0500 Subject: [PATCH] Refactored and unit tested updating HEAD feature --- src/com/gitblit/utils/JGitUtils.java | 46 ++++++++++++++++++++++------------------------ 1 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index 319aca5..c80fb8a 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -1163,9 +1163,9 @@ * no match is found, the SHA1 is returned. * * @param repository - * @return the ref name or the SHA1 for detached HEADs + * @return the ref name or the SHA1 for a detached HEAD */ - public static String getSymbolicHeadTarget(Repository repository) { + public static String getHEADRef(Repository repository) { String target = null; try { target = repository.getFullBranch(); @@ -1193,58 +1193,56 @@ } /** - * Sets the HEAD symbolic ref name for a repository. The HEAD will - * be detached if the name does not reference a branch. + * Sets the symbolic ref HEAD to the specified target ref. The + * HEAD will be detached if the target ref is not a branch. * * @param repository - * @param name + * @param targetRef + * @return true if successful */ - public static void setSymbolicHeadTarget(Repository repository, String name) { + public static boolean setHEADtoRef(Repository repository, String targetRef) { try { - boolean detach = !name.startsWith(Constants.R_HEADS); // detach if not a branch + // detach HEAD if target ref is not a branch + boolean detach = !targetRef.startsWith(Constants.R_HEADS); RefUpdate.Result result; RefUpdate head = repository.updateRef(Constants.HEAD, detach); if (detach) { // Tag - RevCommit commit = getCommit(repository, name); + RevCommit commit = getCommit(repository, targetRef); head.setNewObjectId(commit.getId()); result = head.forceUpdate(); } else { - result = head.link(name); + result = head.link(targetRef); } switch (result) { case NEW: case FORCED: case NO_CHANGE: case FAST_FORWARD: - break; + return true; default: - LOGGER.error(MessageFormat.format("{0} symbolic HEAD update to {1} returned result {2}", - repository.getDirectory().getAbsolutePath(), name, result)); + LOGGER.error(MessageFormat.format("{0} HEAD update to {1} returned result {2}", + repository.getDirectory().getAbsolutePath(), targetRef, result)); } } catch (Throwable t) { - error(t, repository, "{0} failed to set symbolic HEAD to {1}", name); + error(t, repository, "{0} failed to set HEAD to {1}", targetRef); } + return false; } /** - * Get the full branch and tag ref names for any potential symbolic head targets. + * Get the full branch and tag ref names for any potential HEAD targets. * * @param repository * @return a list of ref names */ public static List<String> getAvailableHeadTargets(Repository repository) { List<String> targets = new ArrayList<String>(); - List<RefModel> branchModels = JGitUtils.getLocalBranches(repository, true, -1); - if (branchModels.size() > 0) { - for (RefModel branchModel : branchModels) { - targets.add(branchModel.getName()); - } + for (RefModel branchModel : JGitUtils.getLocalBranches(repository, true, -1)) { + targets.add(branchModel.getName()); } - List<RefModel> tagModels = JGitUtils.getTags(repository, true, -1); - if (tagModels.size() > 0) { - for (RefModel tagModel : tagModels) { - targets.add(tagModel.getName()); - } + + for (RefModel tagModel : JGitUtils.getTags(repository, true, -1)) { + targets.add(tagModel.getName()); } return targets; } -- Gitblit v1.9.1