mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-02 19:45:51 +01:00
retrieve branch informations from receive command
This commit is contained in:
@@ -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<Changeset> changesets;
|
||||
|
||||
/** Field description */
|
||||
private String defaultBranch;
|
||||
|
||||
/** Field description */
|
||||
private File directory;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<ReceiveCommand> receiveCommands)
|
||||
Collection<ReceiveCommand> receiveCommands)
|
||||
{
|
||||
onReceive(rpack, receiveCommands, RepositoryHookType.POST_RECEIVE);
|
||||
}
|
||||
@@ -128,7 +128,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
|
||||
*/
|
||||
@Override
|
||||
public void onPreReceive(ReceivePack rpack,
|
||||
Collection<ReceiveCommand> receiveCommands)
|
||||
Collection<ReceiveCommand> 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<ReceiveCommand> receiveCommands,
|
||||
RepositoryHookType type)
|
||||
Collection<ReceiveCommand> 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 ---------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user