List of usage examples for org.eclipse.jgit.lib PersonIdent getWhen
public Date getWhen()
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; }