List of usage examples for org.eclipse.jgit.util ChangeIdUtil insertId
public static String insertId(String message, ObjectId changeId, boolean replaceExisting)
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 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:org.eclipse.egit.ui.internal.dialogs.CommitDialog.java
License:Open Source License
private void refreshChangeIdText() { createChangeId = changeIdButton.getSelection(); String text = commitText.getText().replaceAll(Text.DELIMITER, "\n"); //$NON-NLS-1$ if (createChangeId) { String changedText = ChangeIdUtil.insertId(text, originalChangeId != null ? originalChangeId : ObjectId.zeroId(), true); if (!text.equals(changedText)) { changedText = changedText.replaceAll("\n", Text.DELIMITER); //$NON-NLS-1$ commitText.setText(changedText); }/*from ww w .j a v a 2 s .co m*/ } else { int changeIdOffset = findOffsetOfChangeIdLine(text); if (changeIdOffset > 0) { int endOfChangeId = findNextEOL(changeIdOffset, text); String cleanedText = text.substring(0, changeIdOffset) + text.substring(endOfChangeId); cleanedText = cleanedText.replaceAll("\n", Text.DELIMITER); //$NON-NLS-1$ commitText.setText(cleanedText); } } }
From source file:org.eclipse.egit.ui.internal.dialogs.CommitMessageComponent.java
License:Open Source License
private void refreshChangeIdText() { if (createChangeId) { // ChangeIdUtil uses \n line endings String text = commitText.getText().replaceAll(Text.DELIMITER, "\n"); //$NON-NLS-1$ String changedText = ChangeIdUtil.insertId(text, originalChangeId != null ? originalChangeId : ObjectId.zeroId(), true); if (!text.equals(changedText)) { changedText = changedText.replaceAll("\n", Text.DELIMITER); //$NON-NLS-1$ commitText.setText(changedText); }/*from w ww .j a va2 s .c o m*/ } else { String text = commitText.getText(); int changeIdOffset = findOffsetOfChangeIdLine(text); if (changeIdOffset > 0) { String cleanedText; int endOfChangeId = findNextEOL(changeIdOffset, text); if (endOfChangeId == -1) cleanedText = text.substring(0, changeIdOffset); else cleanedText = text.substring(0, changeIdOffset) + text.substring(endOfChangeId + 1); commitText.setText(cleanedText); } } }