Example usage for org.eclipse.jgit.lib ObjectId name

List of usage examples for org.eclipse.jgit.lib ObjectId name

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib ObjectId name.

Prototype

public final String name() 

Source Link

Document

name.

Usage

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