Example usage for org.eclipse.jgit.util ChangeIdUtil insertId

List of usage examples for org.eclipse.jgit.util ChangeIdUtil insertId

Introduction

In this page you can find the example usage for org.eclipse.jgit.util ChangeIdUtil insertId.

Prototype

public static String insertId(String message, ObjectId changeId, boolean replaceExisting) 

Source Link

Document

Find the right place to insert a Change-Id and return it.

Usage

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);
        }
    }
}