Example usage for org.eclipse.jgit.transport ReceivePack getRefLogIdent

List of usage examples for org.eclipse.jgit.transport ReceivePack getRefLogIdent

Introduction

In this page you can find the example usage for org.eclipse.jgit.transport ReceivePack getRefLogIdent.

Prototype

public PersonIdent getRefLogIdent() 

Source Link

Document

Get identity of the user making the changes in the reflog.

Usage

From source file:com.gitblit.git.ReceiveHook.java

License:Apache License

/**
 * Instrumentation point where the incoming push has been applied to the
 * repository. This is the point where we would trigger a Jenkins build
 * or send an email./*  ww  w  .j  ava2 s  . c om*/
 */
@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");
        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("refs/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("refs/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 = GitBlit.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);
    }

    // run Groovy hook scripts 
    Set<String> scripts = new LinkedHashSet<String>();
    scripts.addAll(GitBlit.self().getPostReceiveScriptsInherited(repository));
    if (!ArrayUtils.isEmpty(repository.postReceiveScripts)) {
        scripts.addAll(repository.postReceiveScripts);
    }
    runGroovy(repository, user, commands, rp, scripts);
}