From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001 From: Paul Martin <paul@paulsputer.com> Date: Sat, 30 Apr 2016 04:19:14 -0400 Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates --- src/main/java/com/gitblit/git/GitblitReceivePack.java | 179 +++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 112 insertions(+), 67 deletions(-) diff --git a/src/main/java/com/gitblit/git/GitblitReceivePack.java b/src/main/java/com/gitblit/git/GitblitReceivePack.java index 0cc4198..34bbea2 100644 --- a/src/main/java/com/gitblit/git/GitblitReceivePack.java +++ b/src/main/java/com/gitblit/git/GitblitReceivePack.java @@ -119,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); @@ -320,73 +331,9 @@ return; } - // log ref changes - for (ReceiveCommand cmd : commands) { - - if (Result.OK.equals(cmd.getResult())) { - // add some logging for important ref changes - switch (cmd.getType()) { - case DELETE: - LOGGER.info(MessageFormat.format("{0} DELETED {1} in {2} ({3})", user.username, cmd.getRefName(), repository.name, cmd.getOldId().name())); - break; - case CREATE: - LOGGER.info(MessageFormat.format("{0} CREATED {1} in {2}", user.username, cmd.getRefName(), repository.name)); - 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())); - break; - case UPDATE_NONFASTFORWARD: - LOGGER.info(MessageFormat.format("{0} UPDATED NON-FAST-FORWARD {1} in {2} (from {3} to {4})", user.username, cmd.getRefName(), repository.name, cmd.getOldId().name(), cmd.getNewId().name())); - break; - default: - break; - } - } - } - - if (repository.useIncrementalPushTags) { - // tag each pushed branch tip - String emailAddress = user.emailAddress == null ? rp.getRefLogIdent().getEmailAddress() : user.emailAddress; - PersonIdent userIdent = new PersonIdent(user.getDisplayName(), emailAddress); - - for (ReceiveCommand cmd : commands) { - if (!cmd.getRefName().startsWith(Constants.R_HEADS)) { - // only tag branch ref changes - continue; - } - - if (!ReceiveCommand.Type.DELETE.equals(cmd.getType()) - && ReceiveCommand.Result.OK.equals(cmd.getResult())) { - String objectId = cmd.getNewId().getName(); - String branch = cmd.getRefName().substring(Constants.R_HEADS.length()); - // get translation based on the server's locale setting - String template = Translation.get("gb.incrementalPushTagMessage"); - String msg = MessageFormat.format(template, branch); - String prefix; - if (StringUtils.isEmpty(repository.incrementalPushTagPrefix)) { - prefix = settings.getString(Keys.git.defaultIncrementalPushTagPrefix, "r"); - } else { - prefix = repository.incrementalPushTagPrefix; - } - - JGitUtils.createIncrementalRevisionTag( - rp.getRepository(), - objectId, - userIdent, - prefix, - "0", - msg); - } - } - } - - // update push log - try { - RefLogUtils.updateRefLog(user, rp.getRepository(), commands); - LOGGER.debug(MessageFormat.format("{0} push log updated", repository.name)); - } catch (Exception e) { - LOGGER.error(MessageFormat.format("Failed to update {0} pushlog", repository.name), e); - } + logRefChange(commands); + updateIncrementalPushTags(commands); + updateGitblitRefLog(commands); // check for updates pushed to the BranchTicketService branch // if the BranchTicketService is active it will reindex, as appropriate @@ -415,6 +362,104 @@ runGroovy(commands, scripts); } + /** + * Log the ref changes in the container log. + * + * @param commands + */ + protected void logRefChange(Collection<ReceiveCommand> commands) { + boolean isRefCreationOrDeletion = false; + + // log ref changes + for (ReceiveCommand cmd : commands) { + + if (Result.OK.equals(cmd.getResult())) { + // add some logging for important ref changes + 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())); + break; + case UPDATE_NONFASTFORWARD: + LOGGER.info(MessageFormat.format("{0} UPDATED NON-FAST-FORWARD {1} in {2} (from {3} to {4})", user.username, cmd.getRefName(), repository.name, cmd.getOldId().name(), cmd.getNewId().name())); + break; + default: + break; + } + } + } + + if (isRefCreationOrDeletion) { + gitblit.resetRepositoryCache(repository.name); + } + } + + /** + * Optionally update the incremental push tags. + * + * @param commands + */ + protected void updateIncrementalPushTags(Collection<ReceiveCommand> commands) { + if (!repository.useIncrementalPushTags) { + return; + } + + // tag each pushed branch tip + String emailAddress = user.emailAddress == null ? getRefLogIdent().getEmailAddress() : user.emailAddress; + PersonIdent userIdent = new PersonIdent(user.getDisplayName(), emailAddress); + + for (ReceiveCommand cmd : commands) { + if (!cmd.getRefName().startsWith(Constants.R_HEADS)) { + // only tag branch ref changes + continue; + } + + if (!ReceiveCommand.Type.DELETE.equals(cmd.getType()) + && ReceiveCommand.Result.OK.equals(cmd.getResult())) { + String objectId = cmd.getNewId().getName(); + String branch = cmd.getRefName().substring(Constants.R_HEADS.length()); + // get translation based on the server's locale setting + String template = Translation.get("gb.incrementalPushTagMessage"); + String msg = MessageFormat.format(template, branch); + String prefix; + if (StringUtils.isEmpty(repository.incrementalPushTagPrefix)) { + prefix = settings.getString(Keys.git.defaultIncrementalPushTagPrefix, "r"); + } else { + prefix = repository.incrementalPushTagPrefix; + } + + JGitUtils.createIncrementalRevisionTag( + getRepository(), + objectId, + userIdent, + prefix, + "0", + msg); + } + } + } + + /** + * Update Gitblit's internal reflog. + * + * @param commands + */ + protected void updateGitblitRefLog(Collection<ReceiveCommand> commands) { + try { + RefLogUtils.updateRefLog(user, getRepository(), commands); + LOGGER.debug(MessageFormat.format("{0} reflog updated", repository.name)); + } catch (Exception e) { + LOGGER.error(MessageFormat.format("Failed to update {0} reflog", repository.name), e); + } + } + /** Execute commands to update references. */ @Override protected void executeCommands() { -- Gitblit v1.9.1