diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHookEvent.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHookEvent.java index 1d0a811012..3aa4344f50 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHookEvent.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHookEvent.java @@ -36,6 +36,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevSort; import org.eclipse.jgit.revwalk.RevWalk; @@ -44,6 +45,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.util.IOUtil; +import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -72,14 +74,16 @@ public class GitRepositoryHookEvent extends AbstractRepositoryHookEvent * * * @param directory + * @param ref * @param newId * @param oldId * @param type */ - public GitRepositoryHookEvent(File directory, ObjectId newId, ObjectId oldId, - RepositoryHookType type) + public GitRepositoryHookEvent(File directory, Ref ref, ObjectId newId, + ObjectId oldId, RepositoryHookType type) { this.directory = directory; + this.defaultBranch = GitUtil.getBranch(ref); this.newId = newId; this.oldId = oldId; this.type = type; @@ -152,7 +156,21 @@ public class GitRepositoryHookEvent extends AbstractRepositoryHookEvent while (commit != null) { - result.add(converter.createChangeset(commit)); + Changeset changeset = converter.createChangeset(commit); + + if (changeset.getBranches().isEmpty() + && Util.isNotEmpty(defaultBranch)) + { + if (logger.isTraceEnabled()) + { + logger.trace("set branch to current default branch {}", + defaultBranch); + } + + changeset.getBranches().add(defaultBranch); + } + + result.add(changeset); commit = walk.next(); } } @@ -176,6 +194,9 @@ public class GitRepositoryHookEvent extends AbstractRepositoryHookEvent /** Field description */ private List changesets; + /** Field description */ + private String defaultBranch; + /** Field description */ private File directory; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java index e3224b1515..c65536217a 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java @@ -224,16 +224,21 @@ public class GitUtil { String branch = null; - String name = ref.getName(); - - if (name.startsWith(PREFIX_HEADS)) + if (ref != null) { - branch = name.substring(PREFIX_HEADS.length()); + + String name = ref.getName(); + + if (name.startsWith(PREFIX_HEADS)) + { + branch = name.substring(PREFIX_HEADS.length()); + } + } return branch; } - + /** * Method description * @@ -250,10 +255,12 @@ public class GitUtil throws IOException { ObjectId branchId = null; - if ( ! branchName.startsWith(REF_HEAD) ){ + + if (!branchName.startsWith(REF_HEAD)) + { branchName = PREFIX_HEADS.concat(branchName); } - + Ref ref = repo.getRef(branchName); if (ref != null) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceiveHook.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceiveHook.java index 63b132a445..e41495afe2 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceiveHook.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceiveHook.java @@ -96,7 +96,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook * @param handler */ public GitReceiveHook(RepositoryManager repositoryManager, - GitRepositoryHandler handler) + GitRepositoryHandler handler) { this.repositoryManager = repositoryManager; this.handler = handler; @@ -113,7 +113,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook */ @Override public void onPostReceive(ReceivePack rpack, - Collection receiveCommands) + Collection receiveCommands) { onReceive(rpack, receiveCommands, RepositoryHookType.POST_RECEIVE); } @@ -128,7 +128,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook */ @Override public void onPreReceive(ReceivePack rpack, - Collection receiveCommands) + Collection receiveCommands) { onReceive(rpack, receiveCommands, RepositoryHookType.PRE_RECEIVE); } @@ -145,8 +145,8 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook * @param refName */ private void executeFileHook(ReceivePack rpack, ReceiveCommand rc, - File repositoryDirectory, File hook, - ObjectId oldId, ObjectId newId, String refName) + File repositoryDirectory, File hook, ObjectId oldId, ObjectId newId, + String refName) { final Command cmd = new SimpleCommand(hook.getAbsolutePath(), getId(oldId), getId(newId), Util.nonNull(refName)); @@ -199,11 +199,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook } /** - * Method description, ccurred - * - * - * - * + * Method description, occurred * * @param rpack * @param rc @@ -213,18 +209,17 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook * @param type */ private void fireHookEvent(ReceivePack rpack, ReceiveCommand rc, - File directory, ObjectId oldId, ObjectId newId, - RepositoryHookType type) + File directory, ObjectId oldId, ObjectId newId, RepositoryHookType type) { try { String repositoryName = RepositoryUtil.getRepositoryName(handler, directory); - GitRepositoryHookEvent e = new GitRepositoryHookEvent(directory, newId, - oldId, type); + GitRepositoryHookEvent e = new GitRepositoryHookEvent(directory, + rc.getRef(), newId, oldId, type); repositoryManager.fireHookEvent(GitRepositoryHandler.TYPE_NAME, - repositoryName, e); + repositoryName, e); } catch (RepositoryNotFoundException ex) { @@ -250,16 +245,15 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook * @param type */ private void onReceive(ReceivePack rpack, - Collection receiveCommands, - RepositoryHookType type) + Collection receiveCommands, RepositoryHookType type) { for (ReceiveCommand rc : receiveCommands) { if (((RepositoryHookType.PRE_RECEIVE == type) - && (rc.getResult() - == ReceiveCommand.Result.NOT_ATTEMPTED)) || ((RepositoryHookType - .POST_RECEIVE == type) && (rc.getResult() - == ReceiveCommand.Result.OK))) + && (rc.getResult() + == ReceiveCommand.Result.NOT_ATTEMPTED)) || ((RepositoryHookType + .POST_RECEIVE == type) && (rc.getResult() + == ReceiveCommand.Result.OK))) { ObjectId newId = rc.getNewId(); ObjectId oldId = null; @@ -288,7 +282,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook if (hookScript != null) { executeFileHook(rpack, rc, directory, hookScript, oldId, newId, - rc.getRefName()); + rc.getRefName()); } } @@ -325,9 +319,8 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook */ private File getHookScript(File directory, String name) { - File baseFile = - new File(directory, - FILE_HOOKDIRECTORY.concat(File.separator).concat(name)); + File baseFile = new File(directory, + FILE_HOOKDIRECTORY.concat(File.separator).concat(name)); return IOUtil.getScript(baseFile); } @@ -363,7 +356,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook private boolean isUpdateCommand(ReceiveCommand rc) { return (rc.getType() == ReceiveCommand.Type.UPDATE) - || (rc.getType() == ReceiveCommand.Type.UPDATE_NONFASTFORWARD); + || (rc.getType() == ReceiveCommand.Type.UPDATE_NONFASTFORWARD); } //~--- fields ---------------------------------------------------------------