Browse Source

Tag server-side merges when incremental push tags are enabled

tags/v1.6.0
James Moger 10 years ago
parent
commit
d62d883423

+ 2
- 0
releases.moxie View File

@@ -34,6 +34,7 @@ r24: {
- Add object type (ot) parameter for RSS queries to retrieve tag details (pr-165, ticket-66)
- Add setting to allow STARTTLS without requiring SMTPS (pr-183)
- Added an extension point for monitoring onStartup and onShutdown (ticket-79)
- Tag server-side merges when incremental push tags are enabled (issue-432, ticket-85)
dependencyChanges:
- Update to javax.mail 1.5.1 (issue-417, ticket-58)
contributors:
@@ -45,6 +46,7 @@ r24: {
- Berke Viktor
- Marcus Hunger
- Matthias Cullmann
- Emmeran Seehuber
settings:
- { name: 'web.allowDeletingNonEmptyRepositories', defaultValue: 'true' }
- { name: 'mail.starttls', defaultValue: 'false' }

+ 85
- 59
src/main/java/com/gitblit/git/GitblitReceivePack.java View File

@@ -331,6 +331,43 @@ public class GitblitReceivePack extends ReceivePack implements PreReceiveHook, P
return;
}
logRefChange(commands);
updateIncrementalPushTags(commands);
updateGitblitRefLog(commands);
// check for updates pushed to the BranchTicketService branch
// if the BranchTicketService is active it will reindex, as appropriate
for (ReceiveCommand cmd : commands) {
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);
}
}
// run Groovy hook scripts
Set<String> scripts = new LinkedHashSet<String>();
scripts.addAll(gitblit.getPostReceiveScriptsInherited(repository));
if (!ArrayUtils.isEmpty(repository.postReceiveScripts)) {
scripts.addAll(repository.postReceiveScripts);
}
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
@@ -362,76 +399,65 @@ public class GitblitReceivePack extends ReceivePack implements PreReceiveHook, P
if (isRefCreationOrDeletion) {
gitblit.resetRepositoryCache(repository.name);
}
}
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);
}
}
/**
* Optionally update the incremental push tags.
*
* @param commands
*/
protected void updateIncrementalPushTags(Collection<ReceiveCommand> commands) {
if (!repository.useIncrementalPushTags) {
return;
}
// 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);
}
// tag each pushed branch tip
String emailAddress = user.emailAddress == null ? getRefLogIdent().getEmailAddress() : user.emailAddress;
PersonIdent userIdent = new PersonIdent(user.getDisplayName(), emailAddress);
// check for updates pushed to the BranchTicketService branch
// if the BranchTicketService is active it will reindex, as appropriate
for (ReceiveCommand cmd : commands) {
if (Result.OK.equals(cmd.getResult())
&& BranchTicketService.BRANCH.equals(cmd.getRefName())) {
rp.getRepository().fireEvent(new ReceiveCommandEvent(repository, cmd));
if (!cmd.getRefName().startsWith(Constants.R_HEADS)) {
// only tag branch ref changes
continue;
}
}
// 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);
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);
}
}
}
// run Groovy hook scripts
Set<String> scripts = new LinkedHashSet<String>();
scripts.addAll(gitblit.getPostReceiveScriptsInherited(repository));
if (!ArrayUtils.isEmpty(repository.postReceiveScripts)) {
scripts.addAll(repository.postReceiveScripts);
/**
* 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);
}
runGroovy(commands, scripts);
}
/** Execute commands to update references. */

+ 6
- 2
src/main/java/com/gitblit/git/PatchsetReceivePack.java View File

@@ -1202,11 +1202,15 @@ public class PatchsetReceivePack extends GitblitReceivePack {
if (ticket != null) {
ticketNotifier.queueMailing(ticket);
// update the reflog with the merge
if (oldRef != null) {
ReceiveCommand cmd = new ReceiveCommand(oldRef.getObjectId(),
ObjectId.fromString(mergeResult.sha), oldRef.getName());
RefLogUtils.updateRefLog(user, getRepository(), Arrays.asList(cmd));
cmd.setResult(Result.OK);
List<ReceiveCommand> commands = Arrays.asList(cmd);
logRefChange(commands);
updateIncrementalPushTags(commands);
updateGitblitRefLog(commands);
}
// call patchset hooks

Loading…
Cancel
Save