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

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

Introduction

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

Prototype

public Date getWhen() 

Source Link

Document

Get timestamp

Usage

From source file:com.binarybirchtree.contributionart.RepositoryTest.java

License:Open Source License

@Test
public void validate_commits()
        throws IOException, Matrix.FileFormatException, Repository.GitException, GitAPIException {
    final int factor = 20;
    final String name = "name";
    final String email = "email";

    /////from ww w  .j a  v  a2  s.c o  m
    /// Encapsulates commit-validation logic.
    ///
    class CommitValidator {
        final ZonedDateTime timestamp;

        ///
        /// @param[in] commit Commit to validate.
        /// @param[in] timestamp Expected timestamp.
        /// @param[in] message Expected message.
        ///
        CommitValidator(RevCommit commit, ZonedDateTime timestamp, String message) {
            this.timestamp = timestamp;

            Assert.assertEquals(timestamp.toInstant(), Instant.ofEpochSecond(commit.getCommitTime()));
            Assert.assertEquals(message, commit.getFullMessage());

            new IdentityValidator(commit.getAuthorIdent());
            new IdentityValidator(commit.getCommitterIdent());
        }

        ///
        /// Contains shared validation logic used for both Author and Committer identities.
        ///
        class IdentityValidator {
            private PersonIdent identity;

            ///
            /// @param[in] identity Identity to validate.
            ///
            public IdentityValidator(PersonIdent identity) {
                this.identity = identity;

                validate_name();
                validate_email();
                validate_timestamp();
            }

            private void validate_name() {
                Assert.assertEquals(name, identity.getName());
            }

            private void validate_email() {
                Assert.assertEquals(email, identity.getEmailAddress());
            }

            private void validate_timestamp() {
                Assert.assertEquals(timestamp.toInstant(), identity.getWhen().toInstant());
            }
        }
    }

    Path repo = folder.newFolder().toPath();
    Matrix matrix = new Matrix(file);
    ZonedDateTime today = ZonedDateTime.now(ZoneOffset.UTC).truncatedTo(ChronoUnit.DAYS);

    // Generate commits in a temporary repository.
    try (Repository repository = new Repository(repo, name, email)) {
        repository.illustrate(matrix, factor);
    }

    // Verify that the state of the repository is as expected.
    try (Git git = Git.open(repo.toFile())) {
        // Start from the earliest date for which commits were generated.
        ZonedDateTime current = today.with(WeekFields.SUNDAY_START.dayOfWeek(), DayOfWeek.values().length)
                .minusDays(Matrix.AREA);

        // Prepare to iterate through the definition matrix alongside the commit log,
        // as the values in the definition matrix affect how many commits should have been generated.
        Iterator<Matrix.Value> values = matrix.iterator();
        Matrix.Value value;
        int cell_iterations = 0;
        int commit_count = 0;

        // Retrieve the list of commits, sorted from earliest to latest.
        List<RevCommit> commits = Lists.reverse(Lists.newArrayList(git.log().call()));
        Assert.assertFalse(commits.isEmpty());

        // Validate the README commit.
        String readme = "README.md";
        new CommitValidator(Iterables.getLast(commits), today, String.format("Added %s.", readme));
        commits.remove(commits.size() - 1);
        Assert.assertEquals(Repository.README, new String(Files.readAllBytes(repo.resolve(readme))));

        // Iterate through the commit log, starting from the earliest commit.
        for (RevCommit commit : commits) {
            if (cell_iterations == 0) {
                Assert.assertTrue(values.hasNext());
                value = values.next();
                cell_iterations = value.weight() * factor;
                current = current.plusDays(1);
            }

            new CommitValidator(commit, current, "");

            ++commit_count;
            --cell_iterations;
        }

        // Determine the expected commit count and compare it with the actual commit count.
        int expected_commit_count = StreamSupport.stream(matrix.spliterator(), false).map(Matrix.Value::weight)
                .reduce(0, (accumulator, element) -> accumulator + element * factor);

        while (values.hasNext()) {
            expected_commit_count -= values.next().weight() * factor;
        }

        Assert.assertEquals(expected_commit_count, commit_count);
    }
}

From source file:com.centurylink.mdw.dataaccess.file.VersionControlGit.java

License:Apache License

/**
 * Does not fetch./*from w  ww .  ja  v  a  2s .c  om*/
 */
public CommitInfo getCommitInfo(String path) throws Exception {
    Iterator<RevCommit> revCommits = git.log().addPath(path).setMaxCount(1).call().iterator();
    if (revCommits.hasNext()) {
        RevCommit revCommit = revCommits.next();
        CommitInfo commitInfo = new CommitInfo(revCommit.getId().name());
        PersonIdent committerIdent = revCommit.getCommitterIdent();
        commitInfo.setCommitter(committerIdent.getName());
        commitInfo.setEmail(committerIdent.getEmailAddress());
        if ((commitInfo.getCommitter() == null || commitInfo.getCommitter().isEmpty())
                && commitInfo.getEmail() != null)
            commitInfo.setCommitter(commitInfo.getEmail());
        commitInfo.setDate(committerIdent.getWhen());
        commitInfo.setMessage(revCommit.getShortMessage());
        return commitInfo;
    }
    return null;
}

From source file:com.gitblit.models.RefModel.java

License:Apache License

public Date getDate() {
    Date date = new Date(0);
    if (referencedObject != null) {
        if (referencedObject instanceof RevTag) {
            RevTag tag = (RevTag) referencedObject;
            PersonIdent tagger = tag.getTaggerIdent();
            if (tagger != null) {
                date = tagger.getWhen();
            }//from w ww  . j a v  a2s  . c o  m
        } else if (referencedObject instanceof RevCommit) {
            RevCommit commit = (RevCommit) referencedObject;
            date = JGitUtils.getAuthorDate(commit);
        }
    }
    return date;
}

From source file:com.gitblit.plugin.flowdock.FlowDockReceiveHook.java

License:Apache License

@Override
public void onPostReceive(GitblitReceivePack receivePack, Collection<ReceiveCommand> commands) {
    if (!shallPost(receivePack, commands)) {
        return;/*from   w  w  w .j a v a2 s  .co  m*/
    }

    IRuntimeManager runtimeManager = GitblitContext.getManager(IRuntimeManager.class);
    try {
        for (ReceiveCommand cmd : commands) {
            if (cmd.getRefName().startsWith(Constants.R_TAGS)) {
                boolean shallPostTag = runtimeManager.getSettings().getBoolean(Plugin.SETTING_POST_TAGS, true);
                if (!shallPostTag) {
                    continue;
                }
            } else if (cmd.getRefName().startsWith(Constants.R_HEADS)) {
                boolean shallPostBranch = runtimeManager.getSettings().getBoolean(Plugin.SETTING_POST_BRANCHES,
                        true);
                if (!shallPostBranch) {
                    continue;
                }
            } else {
                // ignore other refs
                continue;
            }

            RepositoryModel repo = receivePack.getRepositoryModel();

            String repoUrl = getUrl(repo.name, null, null);
            String diffUrl = getUrl(repo.name, cmd.getOldId().getName(), cmd.getNewId().getName());

            GitPayload payload = new GitPayload().pusher(receivePack.getUserModel()).repository(repo.name)
                    .repoUrl(repoUrl).tags(getTags(repo)).ref(cmd.getRefName())
                    .refName(Repository.shortenRefName(cmd.getRefName())).diffUrl(diffUrl)
                    .before(cmd.getOldId().getName()).after(cmd.getNewId().getName());

            List<RevCommit> commits = getCommits(receivePack, cmd.getOldId().name(), cmd.getNewId().name());
            for (RevCommit commit : commits) {
                Commit c = new Commit();
                c.id = commit.getName();
                c.url = getUrl(repo.name, null, commit.getName());
                c.message = commit.getFullMessage().trim();

                PersonIdent author = commit.getAuthorIdent();
                c.author = new Ident(author.getName(), author.getEmailAddress());
                c.timestamp = author.getWhen();
                if (c.timestamp == null) {
                    c.timestamp = commit.getCommitterIdent().getWhen();
                }

                List<PathChangeModel> paths = JGitUtils.getFilesInCommit(receivePack.getRepository(), commit);
                c.added = filter(paths, ChangeType.ADD);
                c.modified = filter(paths, ChangeType.MODIFY);
                c.removed = filter(paths, ChangeType.DELETE);

                payload.add(c);
            }

            flowdock.setFlow(repo, payload);
            flowdock.sendAsync(payload);
        }
    } catch (Exception e) {
        log.error("Failed to notify FlowDock!", e);
    }
}

From source file:com.google.gerrit.acceptance.git.RefAdvertisementIT.java

License:Apache License

@Test
public void receivePackOmitsMissingObject() throws Exception {
    String rev = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef";
    try (Repository repo = repoManager.openRepository(project)) {
        TestRepository<?> tr = new TestRepository<>(repo);
        String subject = "Subject for missing commit";
        Change c = new Change(c3.change());
        PatchSet.Id psId = new PatchSet.Id(c3.getId(), 2);
        c.setCurrentPatchSet(psId, subject, c.getOriginalSubject());

        if (notesMigration.changePrimaryStorage() == PrimaryStorage.REVIEW_DB) {
            PatchSet ps = TestChanges.newPatchSet(psId, rev, admin.getId());
            db.patchSets().insert(Collections.singleton(ps));
            db.changes().update(Collections.singleton(c));
        }/* w  w  w. j a v  a 2  s.c o  m*/

        if (notesMigration.commitChangeWrites()) {
            PersonIdent committer = serverIdent.get();
            PersonIdent author = noteUtil.newIdent(accountCache.get(admin.getId()).getAccount(),
                    committer.getWhen(), committer, anonymousCowardName);
            tr.branch(RefNames.changeMetaRef(c3.getId())).commit().author(author).committer(committer)
                    .message("Update patch set " + psId.get() + "\n" + "\n" + "Patch-set: " + psId.get() + "\n"
                            + "Commit: " + rev + "\n" + "Subject: " + subject + "\n")
                    .create();
        }
        indexer.index(db, c.getProject(), c.getId());
    }

    assertThat(getReceivePackRefs().additionalHaves()).containsExactly(obj(c4, 1));
}

From source file:com.google.gerrit.gpg.server.DeleteGpgKey.java

License:Apache License

@Override
public Response<?> apply(GpgKey rsrc, Input input)
        throws ResourceConflictException, PGPException, OrmException, IOException {
    PGPPublicKey key = rsrc.getKeyRing().getPublicKey();
    AccountExternalId.Key extIdKey = new AccountExternalId.Key(AccountExternalId.SCHEME_GPGKEY,
            BaseEncoding.base16().encode(key.getFingerprint()));
    db.get().accountExternalIds().deleteKeys(Collections.singleton(extIdKey));

    try (PublicKeyStore store = storeProvider.get()) {
        store.remove(rsrc.getKeyRing().getPublicKey().getFingerprint());

        CommitBuilder cb = new CommitBuilder();
        PersonIdent committer = serverIdent.get();
        cb.setAuthor(rsrc.getUser().newCommitterIdent(committer.getWhen(), committer.getTimeZone()));
        cb.setCommitter(committer);//from  ww  w. ja  v  a  2 s.  c  o  m
        cb.setMessage("Delete public key " + keyIdToString(key.getKeyID()));

        RefUpdate.Result saveResult = store.save(cb);
        switch (saveResult) {
        case NO_CHANGE:
        case FAST_FORWARD:
            break;
        default:
            throw new ResourceConflictException("Failed to delete public key: " + saveResult);
        }
    }
    return Response.none();
}

From source file:com.google.gerrit.gpg.server.PostGpgKeys.java

License:Apache License

private void storeKeys(AccountResource rsrc, List<PGPPublicKeyRing> keyRings, Set<Fingerprint> toRemove)
        throws BadRequestException, ResourceConflictException, PGPException, IOException {
    try (PublicKeyStore store = storeProvider.get()) {
        List<String> addedKeys = new ArrayList<>();
        for (PGPPublicKeyRing keyRing : keyRings) {
            PGPPublicKey key = keyRing.getPublicKey();
            // Don't check web of trust; admins can fill in certifications later.
            CheckResult result = checker.check(key);
            if (!result.isOk()) {
                throw new BadRequestException(String.format("Problems with public key %s:\n%s",
                        keyToString(key), Joiner.on('\n').join(result.getProblems())));
            }//from   www.ja v a  2 s  .  c  om
            addedKeys.add(PublicKeyStore.keyToString(key));
            store.add(keyRing);
        }
        for (Fingerprint fp : toRemove) {
            store.remove(fp.get());
        }
        CommitBuilder cb = new CommitBuilder();
        PersonIdent committer = serverIdent.get();
        cb.setAuthor(rsrc.getUser().newCommitterIdent(committer.getWhen(), committer.getTimeZone()));
        cb.setCommitter(committer);

        RefUpdate.Result saveResult = store.save(cb);
        switch (saveResult) {
        case NEW:
        case FAST_FORWARD:
        case FORCED:
            try {
                addKeyFactory.create(rsrc.getUser(), addedKeys).send();
            } catch (EmailException e) {
                log.error("Cannot send GPG key added message to "
                        + rsrc.getUser().getAccount().getPreferredEmail(), e);
            }
            break;
        case NO_CHANGE:
            break;
        default:
            // TODO(dborowitz): Backoff and retry on LOCK_FAILURE.
            throw new ResourceConflictException("Failed to save public keys: " + saveResult);
        }
    }
}

From source file:com.google.gerrit.server.change.GetPatch.java

License:Apache License

private static String formatDate(PersonIdent author) {
    SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
    df.setCalendar(Calendar.getInstance(author.getTimeZone(), Locale.US));
    return df.format(author.getWhen());
}

From source file:com.google.gerrit.server.ChangeUtil.java

License:Apache License

public Change.Id revert(ChangeControl ctl, PatchSet.Id patchSetId, String message, PersonIdent myIdent,
        SshInfo sshInfo) throws NoSuchChangeException, OrmException, MissingObjectException,
        IncorrectObjectTypeException, IOException, InvalidChangeOperationException {
    Change.Id changeId = patchSetId.getParentKey();
    PatchSet patch = db.get().patchSets().get(patchSetId);
    if (patch == null) {
        throw new NoSuchChangeException(changeId);
    }//from w ww  .j  av  a  2 s  .  c o  m
    Change changeToRevert = db.get().changes().get(changeId);

    Project.NameKey project = ctl.getChange().getProject();
    try (Repository git = gitManager.openRepository(project); RevWalk revWalk = new RevWalk(git)) {
        RevCommit commitToRevert = revWalk.parseCommit(ObjectId.fromString(patch.getRevision().get()));

        PersonIdent authorIdent = user().newCommitterIdent(myIdent.getWhen(), myIdent.getTimeZone());

        RevCommit parentToCommitToRevert = commitToRevert.getParent(0);
        revWalk.parseHeaders(parentToCommitToRevert);

        CommitBuilder revertCommitBuilder = new CommitBuilder();
        revertCommitBuilder.addParentId(commitToRevert);
        revertCommitBuilder.setTreeId(parentToCommitToRevert.getTree());
        revertCommitBuilder.setAuthor(authorIdent);
        revertCommitBuilder.setCommitter(authorIdent);

        if (message == null) {
            message = MessageFormat.format(ChangeMessages.get().revertChangeDefaultMessage,
                    changeToRevert.getSubject(), patch.getRevision().get());
        }

        ObjectId computedChangeId = ChangeIdUtil.computeChangeId(parentToCommitToRevert.getTree(),
                commitToRevert, authorIdent, myIdent, message);
        revertCommitBuilder.setMessage(ChangeIdUtil.insertId(message, computedChangeId, true));

        RevCommit revertCommit;
        try (ObjectInserter oi = git.newObjectInserter()) {
            ObjectId id = oi.insert(revertCommitBuilder);
            oi.flush();
            revertCommit = revWalk.parseCommit(id);
        }

        RefControl refControl = ctl.getRefControl();
        Change change = new Change(new Change.Key("I" + computedChangeId.name()),
                new Change.Id(db.get().nextChangeId()), user().getAccountId(), changeToRevert.getDest(),
                TimeUtil.nowTs());
        change.setTopic(changeToRevert.getTopic());
        ChangeInserter ins = changeInserterFactory.create(refControl.getProjectControl(), change, revertCommit);
        PatchSet ps = ins.getPatchSet();

        String ref = refControl.getRefName();
        String cmdRef = MagicBranch.NEW_PUBLISH_CHANGE + ref.substring(ref.lastIndexOf('/') + 1);
        CommitReceivedEvent commitReceivedEvent = new CommitReceivedEvent(
                new ReceiveCommand(ObjectId.zeroId(), revertCommit.getId(), cmdRef),
                refControl.getProjectControl().getProject(), refControl.getRefName(), revertCommit, user());

        try {
            commitValidatorsFactory.create(refControl, sshInfo, git)
                    .validateForGerritCommits(commitReceivedEvent);
        } catch (CommitValidationException e) {
            throw new InvalidChangeOperationException(e.getMessage());
        }

        RefUpdate ru = git.updateRef(ps.getRefName());
        ru.setExpectedOldObjectId(ObjectId.zeroId());
        ru.setNewObjectId(revertCommit);
        ru.disableRefLog();
        if (ru.update(revWalk) != RefUpdate.Result.NEW) {
            throw new IOException(String.format("Failed to create ref %s in %s: %s", ps.getRefName(),
                    change.getDest().getParentKey().get(), ru.getResult()));
        }

        ChangeMessage cmsg = new ChangeMessage(new ChangeMessage.Key(changeId, messageUUID(db.get())),
                user().getAccountId(), TimeUtil.nowTs(), patchSetId);
        StringBuilder msgBuf = new StringBuilder();
        msgBuf.append("Patch Set ").append(patchSetId.get()).append(": Reverted");
        msgBuf.append("\n\n");
        msgBuf.append("This patchset was reverted in change: ").append(change.getKey().get());
        cmsg.setMessage(msgBuf.toString());

        ins.setMessage(cmsg).insert();

        try {
            RevertedSender cm = revertedSenderFactory.create(change.getId());
            cm.setFrom(user().getAccountId());
            cm.setChangeMessage(cmsg);
            cm.send();
        } catch (Exception err) {
            log.error("Cannot send email for revert change " + change.getId(), err);
        }

        return change.getId();
    } catch (RepositoryNotFoundException e) {
        throw new NoSuchChangeException(changeId, e);
    }
}

From source file:com.google.gerrit.server.CommonConverters.java

License:Apache License

public static GitPerson toGitPerson(PersonIdent ident) {
    GitPerson result = new GitPerson();
    result.name = ident.getName();//  w  w w  . j a v  a2  s  .  c  o m
    result.email = ident.getEmailAddress();
    result.date = new Timestamp(ident.getWhen().getTime());
    result.tz = ident.getTimeZoneOffset();
    return result;
}