retrieve branch informations from receive command

This commit is contained in:
Sebastian Sdorra
2012-08-29 11:08:04 +02:00
parent 4ca0d820e7
commit 33a6645ce3
3 changed files with 57 additions and 36 deletions

View File

@@ -36,6 +36,7 @@ package sonia.scm.repository;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevSort; import org.eclipse.jgit.revwalk.RevSort;
import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.RevWalk;
@@ -44,6 +45,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.util.IOUtil; import sonia.scm.util.IOUtil;
import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
@@ -72,14 +74,16 @@ public class GitRepositoryHookEvent extends AbstractRepositoryHookEvent
* *
* *
* @param directory * @param directory
* @param ref
* @param newId * @param newId
* @param oldId * @param oldId
* @param type * @param type
*/ */
public GitRepositoryHookEvent(File directory, ObjectId newId, ObjectId oldId, public GitRepositoryHookEvent(File directory, Ref ref, ObjectId newId,
RepositoryHookType type) ObjectId oldId, RepositoryHookType type)
{ {
this.directory = directory; this.directory = directory;
this.defaultBranch = GitUtil.getBranch(ref);
this.newId = newId; this.newId = newId;
this.oldId = oldId; this.oldId = oldId;
this.type = type; this.type = type;
@@ -152,7 +156,21 @@ public class GitRepositoryHookEvent extends AbstractRepositoryHookEvent
while (commit != null) 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(); commit = walk.next();
} }
} }
@@ -176,6 +194,9 @@ public class GitRepositoryHookEvent extends AbstractRepositoryHookEvent
/** Field description */ /** Field description */
private List<Changeset> changesets; private List<Changeset> changesets;
/** Field description */
private String defaultBranch;
/** Field description */ /** Field description */
private File directory; private File directory;

View File

@@ -224,11 +224,16 @@ public class GitUtil
{ {
String branch = null; String branch = null;
String name = ref.getName(); if (ref != null)
if (name.startsWith(PREFIX_HEADS))
{ {
branch = name.substring(PREFIX_HEADS.length());
String name = ref.getName();
if (name.startsWith(PREFIX_HEADS))
{
branch = name.substring(PREFIX_HEADS.length());
}
} }
return branch; return branch;
@@ -250,7 +255,9 @@ public class GitUtil
throws IOException throws IOException
{ {
ObjectId branchId = null; ObjectId branchId = null;
if ( ! branchName.startsWith(REF_HEAD) ){
if (!branchName.startsWith(REF_HEAD))
{
branchName = PREFIX_HEADS.concat(branchName); branchName = PREFIX_HEADS.concat(branchName);
} }

View File

@@ -96,7 +96,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
* @param handler * @param handler
*/ */
public GitReceiveHook(RepositoryManager repositoryManager, public GitReceiveHook(RepositoryManager repositoryManager,
GitRepositoryHandler handler) GitRepositoryHandler handler)
{ {
this.repositoryManager = repositoryManager; this.repositoryManager = repositoryManager;
this.handler = handler; this.handler = handler;
@@ -113,7 +113,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
*/ */
@Override @Override
public void onPostReceive(ReceivePack rpack, public void onPostReceive(ReceivePack rpack,
Collection<ReceiveCommand> receiveCommands) Collection<ReceiveCommand> receiveCommands)
{ {
onReceive(rpack, receiveCommands, RepositoryHookType.POST_RECEIVE); onReceive(rpack, receiveCommands, RepositoryHookType.POST_RECEIVE);
} }
@@ -128,7 +128,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
*/ */
@Override @Override
public void onPreReceive(ReceivePack rpack, public void onPreReceive(ReceivePack rpack,
Collection<ReceiveCommand> receiveCommands) Collection<ReceiveCommand> receiveCommands)
{ {
onReceive(rpack, receiveCommands, RepositoryHookType.PRE_RECEIVE); onReceive(rpack, receiveCommands, RepositoryHookType.PRE_RECEIVE);
} }
@@ -145,8 +145,8 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
* @param refName * @param refName
*/ */
private void executeFileHook(ReceivePack rpack, ReceiveCommand rc, private void executeFileHook(ReceivePack rpack, ReceiveCommand rc,
File repositoryDirectory, File hook, File repositoryDirectory, File hook, ObjectId oldId, ObjectId newId,
ObjectId oldId, ObjectId newId, String refName) String refName)
{ {
final Command cmd = new SimpleCommand(hook.getAbsolutePath(), getId(oldId), final Command cmd = new SimpleCommand(hook.getAbsolutePath(), getId(oldId),
getId(newId), Util.nonNull(refName)); getId(newId), Util.nonNull(refName));
@@ -199,11 +199,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
} }
/** /**
* Method description, ccurred * Method description, occurred
*
*
*
*
* *
* @param rpack * @param rpack
* @param rc * @param rc
@@ -213,18 +209,17 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
* @param type * @param type
*/ */
private void fireHookEvent(ReceivePack rpack, ReceiveCommand rc, private void fireHookEvent(ReceivePack rpack, ReceiveCommand rc,
File directory, ObjectId oldId, ObjectId newId, File directory, ObjectId oldId, ObjectId newId, RepositoryHookType type)
RepositoryHookType type)
{ {
try try
{ {
String repositoryName = RepositoryUtil.getRepositoryName(handler, String repositoryName = RepositoryUtil.getRepositoryName(handler,
directory); directory);
GitRepositoryHookEvent e = new GitRepositoryHookEvent(directory, newId, GitRepositoryHookEvent e = new GitRepositoryHookEvent(directory,
oldId, type); rc.getRef(), newId, oldId, type);
repositoryManager.fireHookEvent(GitRepositoryHandler.TYPE_NAME, repositoryManager.fireHookEvent(GitRepositoryHandler.TYPE_NAME,
repositoryName, e); repositoryName, e);
} }
catch (RepositoryNotFoundException ex) catch (RepositoryNotFoundException ex)
{ {
@@ -250,16 +245,15 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
* @param type * @param type
*/ */
private void onReceive(ReceivePack rpack, private void onReceive(ReceivePack rpack,
Collection<ReceiveCommand> receiveCommands, Collection<ReceiveCommand> receiveCommands, RepositoryHookType type)
RepositoryHookType type)
{ {
for (ReceiveCommand rc : receiveCommands) for (ReceiveCommand rc : receiveCommands)
{ {
if (((RepositoryHookType.PRE_RECEIVE == type) if (((RepositoryHookType.PRE_RECEIVE == type)
&& (rc.getResult() && (rc.getResult()
== ReceiveCommand.Result.NOT_ATTEMPTED)) || ((RepositoryHookType == ReceiveCommand.Result.NOT_ATTEMPTED)) || ((RepositoryHookType
.POST_RECEIVE == type) && (rc.getResult() .POST_RECEIVE == type) && (rc.getResult()
== ReceiveCommand.Result.OK))) == ReceiveCommand.Result.OK)))
{ {
ObjectId newId = rc.getNewId(); ObjectId newId = rc.getNewId();
ObjectId oldId = null; ObjectId oldId = null;
@@ -288,7 +282,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
if (hookScript != null) if (hookScript != null)
{ {
executeFileHook(rpack, rc, directory, hookScript, oldId, newId, 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) private File getHookScript(File directory, String name)
{ {
File baseFile = File baseFile = new File(directory,
new File(directory, FILE_HOOKDIRECTORY.concat(File.separator).concat(name));
FILE_HOOKDIRECTORY.concat(File.separator).concat(name));
return IOUtil.getScript(baseFile); return IOUtil.getScript(baseFile);
} }
@@ -363,7 +356,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
private boolean isUpdateCommand(ReceiveCommand rc) private boolean isUpdateCommand(ReceiveCommand rc)
{ {
return (rc.getType() == ReceiveCommand.Type.UPDATE) return (rc.getType() == ReceiveCommand.Type.UPDATE)
|| (rc.getType() == ReceiveCommand.Type.UPDATE_NONFASTFORWARD); || (rc.getType() == ReceiveCommand.Type.UPDATE_NONFASTFORWARD);
} }
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------