Example usage for org.eclipse.jgit.lib PersonIdent PersonIdent

List of usage examples for org.eclipse.jgit.lib PersonIdent PersonIdent

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib PersonIdent PersonIdent.

Prototype

public PersonIdent(PersonIdent pi, Date aWhen) 

Source Link

Document

Copy a org.eclipse.jgit.lib.PersonIdent , but alter the clone's time stamp

Usage

From source file:at.bitandart.zoubek.mervin.gerrit.GerritReviewRepositoryService.java

License:Open Source License

@Override
public void saveReview(URI uri, ModelReview modelReview, User currentReviewer, IProgressMonitor monitor)
        throws InvalidReviewRepositoryException, InvalidReviewException, RepositoryIOException {

    monitor.beginTask("Connecting to repository", IProgressMonitor.UNKNOWN);

    String repoFileURI = COMMENTS_FILE_URI;

    try {/*from w w w  . ja va 2 s  .com*/
        Git git = Git.open(new File(uri));
        Repository repository = git.getRepository();
        ObjectInserter objectInserter = repository.newObjectInserter();

        String commentRefName = getCommentRefName(modelReview);
        Ref commentRef = repository.exactRef(commentRefName);

        DirCache index = DirCache.newInCore();
        DirCacheBuilder dirCacheBuilder = index.builder();

        monitor.beginTask("Preparing commit...", IProgressMonitor.UNKNOWN);

        if (commentRef != null) {

            /*
             * The ref already exists so we have to copy the previous
             * RevTree to keep all already attached files
             */

            RevWalk revWalk = new RevWalk(repository);
            RevCommit prevCommit = revWalk.parseCommit(commentRef.getObjectId());
            RevTree tree = prevCommit.getTree();

            List<String> ignoredFiles = new ArrayList<>();
            /*
             * add file path of the new file to the ignored file paths, as
             * we don't want any already existing old file in our new tree
             */
            ignoredFiles.add(repoFileURI);
            buildDirCacheFromTree(tree, repository, dirCacheBuilder, ignoredFiles);

            revWalk.close();
        }

        monitor.beginTask("Writing comments file...", IProgressMonitor.UNKNOWN);

        ResourceSet resourceSet = new ResourceSetImpl();
        Resource resource = resourceSet.createResource(org.eclipse.emf.common.util.URI.createURI(repoFileURI));

        addCommentsToResource(modelReview, resource);

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        resource.save(outputStream, null);

        // insert file as object
        byte[] content = outputStream.toByteArray();
        long length = content.length;
        InputStream inputStream = new ByteArrayInputStream(content);
        ObjectId objectId = objectInserter.insert(Constants.OBJ_BLOB, length, inputStream);
        inputStream.close();

        // create tree entry
        DirCacheEntry entry = new DirCacheEntry(repoFileURI);
        entry.setFileMode(FileMode.REGULAR_FILE);
        entry.setLastModified(System.currentTimeMillis());
        entry.setLength(length);
        entry.setObjectId(objectId);
        dirCacheBuilder.add(entry);

        dirCacheBuilder.finish();

        // write new tree in database
        ObjectId indexTreeId = index.writeTree(objectInserter);

        monitor.beginTask("Commiting comments...", IProgressMonitor.UNKNOWN);

        // create commit
        CommitBuilder commitBuilder = new CommitBuilder();
        PersonIdent personIdent = new PersonIdent("Mervin", "mervin@mervin.modelreview");
        commitBuilder.setCommitter(personIdent);
        commitBuilder.setAuthor(personIdent);
        commitBuilder.setMessage(
                MessageFormat.format("Updated comments by user \"{0}\"", currentReviewer.getName()));

        if (commentRef != null) {
            commitBuilder.setParentId(commentRef.getObjectId());
        }
        commitBuilder.setTreeId(indexTreeId);

        // commit
        ObjectId commitId = objectInserter.insert(commitBuilder);
        objectInserter.flush();

        RefUpdate refUpdate = repository.updateRef(commentRefName);
        refUpdate.setNewObjectId(commitId);
        if (commentRef != null)
            refUpdate.setExpectedOldObjectId(commentRef.getObjectId());
        else
            refUpdate.setExpectedOldObjectId(ObjectId.zeroId());

        /*
         * TODO the result handling below is copied from the CommitCommand
         * class, I don't know if this is really necessary in our case
         */
        Result result = refUpdate.forceUpdate();
        switch (result) {
        case NEW:
        case FORCED:
        case FAST_FORWARD: {
            if (repository.getRepositoryState() == RepositoryState.MERGING_RESOLVED) {
                /*
                 * Commit was successful. Now delete the files used for
                 * merge commits
                 */
                repository.writeMergeCommitMsg(null);
                repository.writeMergeHeads(null);
            } else if (repository.getRepositoryState() == RepositoryState.CHERRY_PICKING_RESOLVED) {
                repository.writeMergeCommitMsg(null);
                repository.writeCherryPickHead(null);
            } else if (repository.getRepositoryState() == RepositoryState.REVERTING_RESOLVED) {
                repository.writeMergeCommitMsg(null);
                repository.writeRevertHead(null);
            }
            break;
        }
        case REJECTED:
        case LOCK_FAILURE:
            throw new RepositoryIOException("Error occured during writing to the git repository",
                    new ConcurrentRefUpdateException("Could not lock ref " + refUpdate.getRef().getName(),
                            refUpdate.getRef(), result));
        default:
            throw new RepositoryIOException("Error occured during writing to the git repository",
                    new JGitInternalException(MessageFormat.format(JGitText.get().updatingRefFailed,
                            refUpdate.getRef().getName(), commitId.toString(), result)));
        }

    } catch (IOException e) {
        throw new InvalidReviewRepositoryException("Could not open local git repository", e);
    } finally {
        monitor.done();
    }

}

From source file:br.com.riselabs.cotonet.test.helpers.ConflictBasedRepositoryTestCase.java

License:Open Source License

private Map<String, PersonIdent> getDevs() {
    Map<String, PersonIdent> devs = new HashMap<String, PersonIdent>();
    devs.put("devY", new PersonIdent("Dev Y", "devy@project.com"));
    devs.put("devX", new PersonIdent("Dev X", "devx@project.com"));
    devs.put("devA", new PersonIdent("Dev A", "deva@project.com"));
    devs.put("devB", new PersonIdent("Dev B", "devb@project.com"));
    devs.put("devC", new PersonIdent("Dev C", "devc@project.com"));
    devs.put("devD", new PersonIdent("Dev D", "devd@project.com"));
    devs.put("devE", new PersonIdent("Dev E", "deve@project.com"));
    return devs;/*from  w w  w  .  jav a2 s.c o m*/
}

From source file:com.amd.gerrit.plugins.manifestsubscription.VersionedManifests.java

License:Open Source License

@Override
protected boolean onSave(CommitBuilder commit) throws IOException {
    StringBuilder commitMsg = new StringBuilder();
    commitMsg.append("Snapshot manifest from " + srcManifestRepo + " updated\n\n");

    if (extraCommitMsg != null && extraCommitMsg.length() > 0) {
        commitMsg.append(extraCommitMsg);
    }/*from w  w  w. j a va  2 s  . co  m*/

    String path;
    Manifest manifest;
    for (Map.Entry<String, Manifest> entry : manifests.entrySet()) {
        path = entry.getKey();
        manifest = entry.getValue();

        try {
            saveManifest(path, manifest);
        } catch (JAXBException e) {
            throw new IOException(e);
        }
    }

    // For some reason the default author and committer date is
    // invalid (always the same date and time)
    Date date = new Date();
    commit.setAuthor(new PersonIdent(commit.getAuthor(), date));
    commit.setCommitter(new PersonIdent(commit.getCommitter(), date));

    if (commit.getMessage() == null || "".equals(commit.getMessage())) {
        commit.setMessage(commitMsg.toString());
    }

    return true;
}

From source file:com.barchart.jenkins.cascade.PluginScm.java

License:BSD License

/**
 * Convert identity from jenkins to jgit.
 *///  w  ww  .j  ava  2 s . c  o  m
public static PersonIdent person(final GitSCM gitScm) {
    final String name = gitScm.getGitConfigNameToUse();
    if (name == null) {
        return null;
    }
    final String mail = gitScm.getGitConfigEmailToUse();
    if (mail == null) {
        return null;
    }
    final PersonIdent person = new PersonIdent(name, mail);
    return person;

}

From source file:com.cisco.step.jenkins.plugins.jenkow.JenkowWorkflowRepository.java

License:Open Source License

/**
 * Requires the admin access to be able to push
 *//*from  w w  w . j a  va 2  s. c  o  m*/
@Override
public ReceivePack createReceivePack(HttpServletRequest context, Repository db)
        throws ServiceNotEnabledException, ServiceNotAuthorizedException {
    Authentication a = Jenkins.getAuthentication();
    ReceivePack rp = createReceivePack(db);
    rp.setRefLogIdent(new PersonIdent(a.getName(), a.getName() + "@" + context.getRemoteAddr()));
    return rp;
}

From source file:com.gitblit.build.BuildGhPages.java

License:Apache License

public static void main(String[] args) {
    Params params = new Params();
    JCommander jc = new JCommander(params);
    try {//from   w w  w.  j  ava2 s .c  o  m
        jc.parse(args);
    } catch (ParameterException t) {
        System.err.println(t.getMessage());
        jc.usage();
    }

    File source = new File(params.sourceFolder);
    String ghpages = "refs/heads/gh-pages";
    try {
        File gitDir = FileKey.resolve(new File(params.repositoryFolder), FS.DETECTED);
        Repository repository = new FileRepository(gitDir);

        RefModel issuesBranch = JGitUtils.getPagesBranch(repository);
        if (issuesBranch == null) {
            JGitUtils.createOrphanBranch(repository, "gh-pages", null);
        }

        System.out.println("Updating gh-pages branch...");
        ObjectId headId = repository.resolve(ghpages + "^{commit}");
        ObjectInserter odi = repository.newObjectInserter();
        try {
            // Create the in-memory index of the new/updated issue.
            DirCache index = createIndex(repository, headId, source, params.obliterate);
            ObjectId indexTreeId = index.writeTree(odi);

            // Create a commit object
            PersonIdent author = new PersonIdent("Gitblit", "gitblit@localhost");
            CommitBuilder commit = new CommitBuilder();
            commit.setAuthor(author);
            commit.setCommitter(author);
            commit.setEncoding(Constants.CHARACTER_ENCODING);
            commit.setMessage("updated pages");
            commit.setParentId(headId);
            commit.setTreeId(indexTreeId);

            // Insert the commit into the repository
            ObjectId commitId = odi.insert(commit);
            odi.flush();

            RevWalk revWalk = new RevWalk(repository);
            try {
                RevCommit revCommit = revWalk.parseCommit(commitId);
                RefUpdate ru = repository.updateRef(ghpages);
                ru.setNewObjectId(commitId);
                ru.setExpectedOldObjectId(headId);
                ru.setRefLogMessage("commit: " + revCommit.getShortMessage(), false);
                Result rc = ru.forceUpdate();
                switch (rc) {
                case NEW:
                case FORCED:
                case FAST_FORWARD:
                    break;
                case REJECTED:
                case LOCK_FAILURE:
                    throw new ConcurrentRefUpdateException(JGitText.get().couldNotLockHEAD, ru.getRef(), rc);
                default:
                    throw new JGitInternalException(MessageFormat.format(JGitText.get().updatingRefFailed,
                            ghpages, commitId.toString(), rc));
                }
            } finally {
                revWalk.release();
            }
        } finally {
            odi.release();
        }
        System.out.println("gh-pages updated.");
    } catch (Throwable t) {
        t.printStackTrace();
    }
}

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

License:Apache License

/**
 * Optionally update the incremental push tags.
 *
 * @param commands//w  w  w . j a  v  a 2s .  c o m
 */
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);
        }
    }
}

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

License:Apache License

@Override
public ReceivePack create(X req, Repository db)
        throws ServiceNotEnabledException, ServiceNotAuthorizedException {

    UserModel user = UserModel.ANONYMOUS;
    String repositoryName = "";
    String origin = "";
    String gitblitUrl = "";
    int timeout = 0;
    Transport transport = null;/*from w w  w.j  a  va  2 s  .  c  om*/

    if (req instanceof HttpServletRequest) {
        // http/https request may or may not be authenticated
        HttpServletRequest client = (HttpServletRequest) req;
        repositoryName = client.getAttribute("gitblitRepositoryName").toString();
        origin = client.getRemoteHost();
        gitblitUrl = HttpUtils.getGitblitURL(client);

        // determine pushing user
        String username = client.getRemoteUser();
        if (!StringUtils.isEmpty(username)) {
            UserModel u = gitblit.getUserModel(username);
            if (u != null) {
                user = u;
            }
        }

        // determine the transport
        if ("http".equals(client.getScheme())) {
            transport = Transport.HTTP;
        } else if ("https".equals(client.getScheme())) {
            transport = Transport.HTTPS;
        }
    } else if (req instanceof GitDaemonClient) {
        // git daemon request is always anonymous
        GitDaemonClient client = (GitDaemonClient) req;
        repositoryName = client.getRepositoryName();
        origin = client.getRemoteAddress().getHostAddress();

        // set timeout from Git daemon
        timeout = client.getDaemon().getTimeout();

        transport = Transport.GIT;
    } else if (req instanceof SshDaemonClient) {
        // SSH request is always authenticated
        SshDaemonClient client = (SshDaemonClient) req;
        repositoryName = client.getRepositoryName();
        origin = client.getRemoteAddress().toString();
        user = client.getUser();

        transport = Transport.SSH;
    }

    if (!acceptPush(transport)) {
        throw new ServiceNotAuthorizedException();
    }

    boolean allowAnonymousPushes = settings.getBoolean(Keys.git.allowAnonymousPushes, false);
    if (!allowAnonymousPushes && UserModel.ANONYMOUS.equals(user)) {
        // prohibit anonymous pushes
        throw new ServiceNotEnabledException();
    }

    String url = settings.getString(Keys.web.canonicalUrl, null);
    if (StringUtils.isEmpty(url)) {
        url = gitblitUrl;
    }

    final RepositoryModel repository = gitblit.getRepositoryModel(repositoryName);

    // Determine which receive pack to use for pushes
    final GitblitReceivePack rp;
    if (gitblit.getTicketService().isAcceptingNewPatchsets(repository)) {
        rp = new PatchsetReceivePack(gitblit, db, repository, user);
    } else {
        rp = new GitblitReceivePack(gitblit, db, repository, user);
    }

    rp.setGitblitUrl(url);
    rp.setRefLogIdent(new PersonIdent(user.username, user.username + "@" + origin));
    rp.setTimeout(timeout);

    return rp;
}

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

License:Apache License

/**
 * Merge the specified patchset to the integration branch.
 *
 * @param ticket//from  w w w .ja v  a  2 s . c  o  m
 * @param patchset
 * @return true, if successful
 */
public MergeStatus merge(TicketModel ticket) {
    PersonIdent committer = new PersonIdent(user.getDisplayName(),
            StringUtils.isEmpty(user.emailAddress) ? (user.username + "@gitblit") : user.emailAddress);
    Patchset patchset = ticket.getCurrentPatchset();
    String message = MessageFormat.format("Merged #{0,number,0} \"{1}\"", ticket.number, ticket.title);
    Ref oldRef = null;
    try {
        oldRef = getRepository().findRef(ticket.mergeTo);
    } catch (IOException e) {
        LOGGER.error("failed to get ref for " + ticket.mergeTo, e);
    }
    MergeResult mergeResult = JGitUtils.merge(getRepository(), patchset.tip, ticket.mergeTo,
            getRepositoryModel().mergeType, committer, message);

    if (StringUtils.isEmpty(mergeResult.sha)) {
        LOGGER.error("FAILED to merge {} to {} ({})",
                new Object[] { patchset, ticket.mergeTo, mergeResult.status.name() });
        return mergeResult.status;
    }
    Change change = new Change(user.username);
    change.setField(Field.status, Status.Merged);
    change.setField(Field.mergeSha, mergeResult.sha);
    change.setField(Field.mergeTo, ticket.mergeTo);

    if (StringUtils.isEmpty(ticket.responsible)) {
        // unassigned tickets are assigned to the closer
        change.setField(Field.responsible, user.username);
    }

    long ticketId = ticket.number;
    ticket = ticketService.updateTicket(repository, ticket.number, change);
    if (ticket != null) {
        ticketNotifier.queueMailing(ticket);

        if (oldRef != null) {
            ReceiveCommand cmd = new ReceiveCommand(oldRef.getObjectId(), ObjectId.fromString(mergeResult.sha),
                    oldRef.getName());
            cmd.setResult(Result.OK);
            List<ReceiveCommand> commands = Arrays.asList(cmd);

            logRefChange(commands);
            updateIncrementalPushTags(commands);
            updateGitblitRefLog(commands);
        }

        // call patchset hooks
        for (PatchsetHook hook : gitblit.getExtensions(PatchsetHook.class)) {
            try {
                hook.onMergePatchset(ticket);
            } catch (Exception e) {
                LOGGER.error("Failed to execute extension", e);
            }
        }
        return mergeResult.status;
    } else {
        LOGGER.error("FAILED to resolve ticket {} by merge from web ui", ticketId);
    }
    return mergeResult.status;
}

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./*from  w ww .j a  v  a 2  s. co m*/
 */
@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);
}