From 03d5ee0bcc4b9d7b6814d7212d19d1126638810d Mon Sep 17 00:00:00 2001 From: manisha <manisha@wso2.com> Date: Thu, 08 May 2014 09:00:11 -0400 Subject: [PATCH] Implement FORK RPC request type --- src/main/java/com/gitblit/git/GitblitReceivePack.java | 70 ++++++++++++++++++++++++++++++++--- 1 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gitblit/git/GitblitReceivePack.java b/src/main/java/com/gitblit/git/GitblitReceivePack.java index 73da3d3..b4449f0 100644 --- a/src/main/java/com/gitblit/git/GitblitReceivePack.java +++ b/src/main/java/com/gitblit/git/GitblitReceivePack.java @@ -47,6 +47,7 @@ import com.gitblit.IStoredSettings; import com.gitblit.Keys; import com.gitblit.client.Translation; +import com.gitblit.extensions.ReceiveHook; import com.gitblit.manager.IGitblit; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; @@ -118,6 +119,17 @@ setAllowDeletes(user.canDeleteRef(repository)); setAllowNonFastForwards(user.canRewindRef(repository)); + int maxObjectSz = settings.getInteger(Keys.git.maxObjectSizeLimit, -1); + if (maxObjectSz >= 0) { + setMaxObjectSizeLimit(maxObjectSz); + } + int maxPackSz = settings.getInteger(Keys.git.maxPackSizeLimit, -1); + if (maxPackSz >= 0) { + setMaxPackSizeLimit(maxPackSz); + } + setCheckReceivedObjects(settings.getBoolean(Keys.git.checkReceivedObjects, true)); + setCheckReferencedObjectsAreReachable(settings.getBoolean(Keys.git.checkReferencedObjectsAreReachable, true)); + // setup pre and post receive hook setPreReceiveHook(this); setPostReceiveHook(this); @@ -156,6 +168,14 @@ */ @Override public void onPreReceive(ReceivePack rp, Collection<ReceiveCommand> commands) { + + if (commands.size() == 0) { + // no receive commands to process + // this can happen if receive pack subclasses intercept and filter + // the commands + LOGGER.debug("skipping pre-receive processing, no refs created, updated, or removed"); + return; + } if (repository.isMirror) { // repository is a mirror @@ -276,6 +296,15 @@ } } + // call pre-receive plugins + for (ReceiveHook hook : gitblit.getExtensions(ReceiveHook.class)) { + try { + hook.onPreReceive(this, commands); + } catch (Exception e) { + LOGGER.error("Failed to execute extension", e); + } + } + Set<String> scripts = new LinkedHashSet<String>(); scripts.addAll(gitblit.getPreReceiveScriptsInherited(repository)); if (!ArrayUtils.isEmpty(repository.preReceiveScripts)) { @@ -298,9 +327,11 @@ @Override public void onPostReceive(ReceivePack rp, Collection<ReceiveCommand> commands) { if (commands.size() == 0) { - LOGGER.debug("skipping post-receive hooks, no refs created, updated, or removed"); + LOGGER.debug("skipping post-receive processing, no refs created, updated, or removed"); return; } + + boolean isRefCreationOrDeletion = false; // log ref changes for (ReceiveCommand cmd : commands) { @@ -310,9 +341,11 @@ switch (cmd.getType()) { case DELETE: LOGGER.info(MessageFormat.format("{0} DELETED {1} in {2} ({3})", user.username, cmd.getRefName(), repository.name, cmd.getOldId().name())); + isRefCreationOrDeletion = true; break; case CREATE: LOGGER.info(MessageFormat.format("{0} CREATED {1} in {2}", user.username, cmd.getRefName(), repository.name)); + isRefCreationOrDeletion = true; break; case UPDATE: LOGGER.info(MessageFormat.format("{0} UPDATED {1} in {2} (from {3} to {4})", user.username, cmd.getRefName(), repository.name, cmd.getOldId().name(), cmd.getNewId().name())); @@ -324,6 +357,10 @@ break; } } + } + + if (isRefCreationOrDeletion) { + gitblit.resetRepositoryCache(repository.name); } if (repository.useIncrementalPushTags) { @@ -376,6 +413,15 @@ if (Result.OK.equals(cmd.getResult()) && BranchTicketService.BRANCH.equals(cmd.getRefName())) { rp.getRepository().fireEvent(new ReceiveCommandEvent(repository, cmd)); + } + } + + // call post-receive plugins + for (ReceiveHook hook : gitblit.getExtensions(ReceiveHook.class)) { + try { + hook.onPostReceive(this, commands); + } catch (Exception e) { + LOGGER.error("Failed to execute extension", e); } } @@ -434,7 +480,7 @@ this.gitblitUrl = url; } - protected void sendRejection(final ReceiveCommand cmd, final String why, Object... objects) { + public void sendRejection(final ReceiveCommand cmd, final String why, Object... objects) { String text; if (ArrayUtils.isEmpty(objects)) { text = why; @@ -445,15 +491,15 @@ LOGGER.error(text + " (" + user.username + ")"); } - protected void sendHeader(String msg, Object... objects) { + public void sendHeader(String msg, Object... objects) { sendInfo("--> ", msg, objects); } - protected void sendInfo(String msg, Object... objects) { + public void sendInfo(String msg, Object... objects) { sendInfo(" ", msg, objects); } - protected void sendInfo(String prefix, String msg, Object... objects) { + private void sendInfo(String prefix, String msg, Object... objects) { String text; if (ArrayUtils.isEmpty(objects)) { text = msg; @@ -467,7 +513,7 @@ } } - protected void sendError(String msg, Object... objects) { + public void sendError(String msg, Object... objects) { String text; if (ArrayUtils.isEmpty(objects)) { text = msg; @@ -532,4 +578,16 @@ } } } + + public IGitblit getGitblit() { + return gitblit; + } + + public RepositoryModel getRepositoryModel() { + return repository; + } + + public UserModel getUserModel() { + return user; + } } -- Gitblit v1.9.1