List of usage examples for org.eclipse.jgit.lib ObjectId name
public final String name()
name.
From source file:com.google.gerrit.server.change.WalkSorterTest.java
License:Apache License
private ChangeData newChange(TestRepository<Repo> tr, ObjectId id) throws Exception { Project.NameKey project = tr.getRepository().getDescription().getProject(); Change c = TestChanges.newChange(project, userId); ChangeData cd = ChangeData.createForTest(c.getId(), 1); cd.setChange(c);/*from w w w .j a va 2s . c o m*/ cd.currentPatchSet().setRevision(new RevId(id.name())); cd.setPatchSets(ImmutableList.of(cd.currentPatchSet())); return cd; }
From source file:com.google.gerrit.server.change.WalkSorterTest.java
License:Apache License
private PatchSet addPatchSet(ChangeData cd, ObjectId id) throws Exception { TestChanges.incrementPatchSet(cd.change()); PatchSet ps = new PatchSet(cd.change().currentPatchSetId()); ps.setRevision(new RevId(id.name())); List<PatchSet> patchSets = new ArrayList<>(cd.patchSets()); patchSets.add(ps);/*from www .ja v a 2 s . co m*/ cd.setPatchSets(patchSets); return ps; }
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 w w . j av a 2s.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.extensions.events.GitReferenceUpdated.java
License:Apache License
public void fire(Project.NameKey project, String ref, ObjectId oldObjectId, ObjectId newObjectId, ReceiveCommand.Type type) { ObjectId o = oldObjectId != null ? oldObjectId : ObjectId.zeroId(); ObjectId n = newObjectId != null ? newObjectId : ObjectId.zeroId(); Event event = new Event(project, ref, o.name(), n.name(), type); for (GitReferenceUpdatedListener l : listeners) { try {//from ww w . java 2 s.co m l.onGitReferenceUpdated(event); } catch (RuntimeException e) { log.warn("Failure in GitReferenceUpdatedListener", e); } } }
From source file:com.google.gerrit.server.git.GroupCollector.java
License:Apache License
private ObjectId parseGroup(ObjectId forCommit, String group) { try {/*from w ww . j a v a 2 s.com*/ return ObjectId.fromString(group); } catch (IllegalArgumentException e) { // Shouldn't happen; some sort of corruption or manual tinkering? log.warn("group for commit {} is not a SHA-1: {}", forCommit.name(), group); return null; } }
From source file:com.google.gerrit.server.git.MergeOp.java
License:Apache License
private void setMerged(Change c, ChangeMessage msg, ObjectId mergeResultRev) throws OrmException, IOException { logDebug("Setting change {} merged", c.getId()); ChangeUpdate update = null;//from ww w.j av a 2 s.c o m final PatchSetApproval submitter; PatchSet merged; try { db.changes().beginTransaction(c.getId()); // We must pull the patchset out of commits, because the patchset ID is // modified when using the cherry-pick merge strategy. CodeReviewCommit commit = commits.get(c.getId()); PatchSet.Id mergedId = commit.change().currentPatchSetId(); merged = db.patchSets().get(mergedId); c = setMergedPatchSet(c.getId(), mergedId); submitter = approvalsUtil.getSubmitter(db, commit.notes(), mergedId); ChangeControl control = commit.getControl(); update = updateFactory.create(control, c.getLastUpdatedOn()); // TODO(yyonas): we need to be able to change the author of the message // is not the person for whom the change was made. addMergedMessage // did this in the past. if (msg != null) { cmUtil.addChangeMessage(db, update, msg); } db.commit(); } finally { db.rollback(); } update.commit(); indexer.index(db, c); try { mergedSenderFactory.create(c.getId(), submitter != null ? submitter.getAccountId() : null).sendAsync(); } catch (Exception e) { log.error("Cannot email merged notification for " + c.getId(), e); } if (submitter != null && mergeResultRev != null) { try { hooks.doChangeMergedHook(c, accountCache.get(submitter.getAccountId()).getAccount(), merged, db, mergeResultRev.name()); } catch (OrmException ex) { logError("Cannot run hook for submitted patch set " + c.getId(), ex); } } }
From source file:com.google.gerrit.server.git.ReceiveCommits.java
License:Apache License
private void parseMagicBranch(final ReceiveCommand cmd) { // Permit exactly one new change request per push. if (magicBranch != null) { reject(cmd, "duplicate request"); return;/*from ww w . j a v a 2 s . com*/ } magicBranch = new MagicBranchInput(cmd, labelTypes, notesMigration); magicBranch.reviewer.addAll(reviewersFromCommandLine); magicBranch.cc.addAll(ccFromCommandLine); String ref; CmdLineParser clp = optionParserFactory.create(magicBranch); magicBranch.clp = clp; try { ref = magicBranch.parse(clp, repo, rp.getAdvertisedRefs().keySet()); } catch (CmdLineException e) { if (!clp.wasHelpRequestedByOption()) { reject(cmd, e.getMessage()); return; } ref = null; // never happen } if (clp.wasHelpRequestedByOption()) { StringWriter w = new StringWriter(); w.write("\nHelp for refs/for/branch:\n\n"); clp.printUsage(w, null); addMessage(w.toString()); reject(cmd, "see help"); return; } if (!rp.getAdvertisedRefs().containsKey(ref) && !ref.equals(readHEAD(repo))) { if (ref.startsWith(Constants.R_HEADS)) { String n = ref.substring(Constants.R_HEADS.length()); reject(cmd, "branch " + n + " not found"); } else { reject(cmd, ref + " not found"); } return; } magicBranch.dest = new Branch.NameKey(project.getNameKey(), ref); magicBranch.ctl = projectControl.controlForRef(ref); if (!magicBranch.ctl.canWrite()) { reject(cmd, "project is read only"); return; } if (magicBranch.draft) { if (!receiveConfig.allowDrafts) { errors.put(Error.CODE_REVIEW, ref); reject(cmd, "draft workflow is disabled"); return; } else if (projectControl.controlForRef("refs/drafts/" + ref).isBlocked(Permission.PUSH)) { errors.put(Error.CODE_REVIEW, ref); reject(cmd, "cannot upload drafts"); return; } } if (!magicBranch.ctl.canUpload()) { errors.put(Error.CODE_REVIEW, ref); reject(cmd, "cannot upload review"); return; } if (magicBranch.draft && magicBranch.submit) { reject(cmd, "cannot submit draft"); return; } if (magicBranch.submit && !projectControl.controlForRef(MagicBranch.NEW_CHANGE + ref).canSubmit()) { reject(cmd, "submit not allowed"); return; } RevWalk walk = rp.getRevWalk(); RevCommit tip; try { tip = walk.parseCommit(magicBranch.cmd.getNewId()); } catch (IOException ex) { magicBranch.cmd.setResult(REJECTED_MISSING_OBJECT); log.error("Invalid pack upload; one or more objects weren't sent", ex); return; } // If tip is a merge commit, or the root commit or // if %base was specified, ignore newChangeForAllNotInTarget if (tip.getParentCount() > 1 || magicBranch.base != null || tip.getParentCount() == 0) { newChangeForAllNotInTarget = false; } if (magicBranch.base != null) { magicBranch.baseCommit = Lists.newArrayListWithCapacity(magicBranch.base.size()); for (ObjectId id : magicBranch.base) { try { magicBranch.baseCommit.add(walk.parseCommit(id)); } catch (IncorrectObjectTypeException notCommit) { reject(cmd, "base must be a commit"); return; } catch (MissingObjectException e) { reject(cmd, "base not found"); return; } catch (IOException e) { log.warn(String.format("Project %s cannot read %s", project.getName(), id.name()), e); reject(cmd, "internal server error"); return; } } } else if (newChangeForAllNotInTarget) { String destBranch = magicBranch.dest.get(); try { Ref r = repo.getRefDatabase().exactRef(destBranch); if (r == null) { reject(cmd, destBranch + " not found"); return; } ObjectId baseHead = r.getObjectId(); magicBranch.baseCommit = Collections.singletonList(walk.parseCommit(baseHead)); } catch (IOException ex) { log.warn(String.format("Project %s cannot read %s", project.getName(), destBranch), ex); reject(cmd, "internal server error"); return; } } // Validate that the new commits are connected with the target // branch. If they aren't, we want to abort. We do this check by // looking to see if we can compute a merge base between the new // commits and the target branch head. // try { Ref targetRef = rp.getAdvertisedRefs().get(magicBranch.ctl.getRefName()); if (targetRef == null || targetRef.getObjectId() == null) { // The destination branch does not yet exist. Assume the // history being sent for review will start it and thus // is "connected" to the branch. return; } final RevCommit h = walk.parseCommit(targetRef.getObjectId()); final RevFilter oldRevFilter = walk.getRevFilter(); try { walk.reset(); walk.setRevFilter(RevFilter.MERGE_BASE); walk.markStart(tip); walk.markStart(h); if (walk.next() == null) { reject(magicBranch.cmd, "no common ancestry"); } } finally { walk.reset(); walk.setRevFilter(oldRevFilter); } } catch (IOException e) { magicBranch.cmd.setResult(REJECTED_MISSING_OBJECT); log.error("Invalid pack upload; one or more objects weren't sent", e); } }
From source file:com.google.gerrit.server.index.change.StalenessCheckerTest.java
License:Apache License
@Test public void isStaleRefStatesOnly() throws Exception { String ref1 = "refs/heads/foo"; ObjectId id1 = tr1.update(ref1, tr1.commit().message("commit 1")); String ref2 = "refs/heads/bar"; ObjectId id2 = tr2.update(ref2, tr2.commit().message("commit 2")); // Not stale. assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name()), P2, RefState.create(ref2, id2.name())), ImmutableListMultimap.of())).isFalse(); // Wrong ref value. assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, SHA1), P2, RefState.create(ref2, id2.name())), ImmutableListMultimap.of())).isTrue(); // Swapped repos. assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id2.name()), P2, RefState.create(ref2, id1.name())), ImmutableListMultimap.of())).isTrue(); // Two refs in same repo, not stale. String ref3 = "refs/heads/baz"; ObjectId id3 = tr1.update(ref3, tr1.commit().message("commit 3")); tr1.update(ref3, id3);//from w w w.ja v a2 s.co m assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref3, id3.name())), ImmutableListMultimap.of())).isFalse(); // Ignore ref not mentioned. assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name())), ImmutableListMultimap.of())).isFalse(); // One ref wrong. assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref3, SHA1)), ImmutableListMultimap.of())).isTrue(); }
From source file:com.google.gerrit.server.index.change.StalenessCheckerTest.java
License:Apache License
@Test public void isStaleWithRefStatePatterns() throws Exception { String ref1 = "refs/heads/foo"; ObjectId id1 = tr1.update(ref1, tr1.commit().message("commit 1")); // ref1 is only ref matching pattern. assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name())), ImmutableListMultimap.of(P1, RefStatePattern.create("refs/heads/*")))).isFalse(); // Now ref2 matches pattern, so stale unless ref2 is present in state map. String ref2 = "refs/heads/bar"; ObjectId id2 = tr1.update(ref2, tr1.commit().message("commit 2")); assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name())), ImmutableListMultimap.of(P1, RefStatePattern.create("refs/heads/*")))).isTrue(); assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref2, id2.name())), ImmutableListMultimap.of(P1, RefStatePattern.create("refs/heads/*")))).isFalse(); }
From source file:com.google.gerrit.server.index.change.StalenessCheckerTest.java
License:Apache License
@Test public void isStaleWithNonPrefixPattern() throws Exception { String ref1 = "refs/heads/foo"; ObjectId id1 = tr1.update(ref1, tr1.commit().message("commit 1")); tr1.update("refs/heads/bar", tr1.commit().message("commit 2")); // ref1 is only ref matching pattern. assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name())), ImmutableListMultimap.of(P1, RefStatePattern.create("refs/*/foo")))).isFalse(); // Now ref2 matches pattern, so stale unless ref2 is present in state map. String ref3 = "refs/other/foo";//w w w .j a v a 2 s .c o m ObjectId id3 = tr1.update(ref3, tr1.commit().message("commit 3")); assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name())), ImmutableListMultimap.of(P1, RefStatePattern.create("refs/*/foo")))).isTrue(); assertThat(refsAreStale(repoManager, C, ImmutableSetMultimap.of(P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref3, id3.name())), ImmutableListMultimap.of(P1, RefStatePattern.create("refs/*/foo")))).isFalse(); }