Example usage for org.eclipse.jgit.lib Repository updateRef

List of usage examples for org.eclipse.jgit.lib Repository updateRef

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib Repository updateRef.

Prototype

@NonNull
public RefUpdate updateRef(String ref) throws IOException 

Source Link

Document

Create a command to update, create or delete a ref in this repository.

Usage

From source file:com.google.gerrit.server.project.PerformCreateProject.java

License:Apache License

private void createEmptyCommits(final Repository repo, final Project.NameKey project, final List<String> refs)
        throws IOException {
    ObjectInserter oi = repo.newObjectInserter();
    try {/* w w  w.j av  a  2 s  .co  m*/
        CommitBuilder cb = new CommitBuilder();
        cb.setTreeId(oi.insert(Constants.OBJ_TREE, new byte[] {}));
        cb.setAuthor(metaDataUpdateFactory.getUserPersonIdent());
        cb.setCommitter(serverIdent);
        cb.setMessage("Initial empty repository\n");

        ObjectId id = oi.insert(cb);
        oi.flush();

        for (String ref : refs) {
            RefUpdate ru = repo.updateRef(ref);
            ru.setNewObjectId(id);
            final Result result = ru.update();
            switch (result) {
            case NEW:
                referenceUpdated.fire(project, ru);
                break;
            default: {
                throw new IOException(String.format("Failed to create ref \"%s\": %s", ref, result.name()));
            }
            }
        }
    } catch (IOException e) {
        log.error("Cannot create empty commit for " + createProjectArgs.getProjectName(), e);
        throw e;
    } finally {
        oi.release();
    }
}

From source file:com.google.gerrit.server.schema.Schema_146.java

License:Apache License

private void rewriteUserBranch(Repository repo, RevWalk rw, ObjectInserter oi, ObjectId emptyTree, Ref ref,
        Account account) throws IOException {
    ObjectId current = createInitialEmptyCommit(oi, emptyTree, account.getRegisteredOn());

    rw.reset();/*from www.  j  a va  2s . c  om*/
    rw.sort(RevSort.TOPO);
    rw.sort(RevSort.REVERSE, true);
    rw.markStart(rw.parseCommit(ref.getObjectId()));

    RevCommit c;
    while ((c = rw.next()) != null) {
        if (isInitialEmptyCommit(emptyTree, c)) {
            return;
        }

        CommitBuilder cb = new CommitBuilder();
        cb.setParentId(current);
        cb.setTreeId(c.getTree());
        cb.setAuthor(c.getAuthorIdent());
        cb.setCommitter(c.getCommitterIdent());
        cb.setMessage(c.getFullMessage());
        cb.setEncoding(c.getEncoding());
        current = oi.insert(cb);
    }

    oi.flush();

    RefUpdate ru = repo.updateRef(ref.getName());
    ru.setExpectedOldObjectId(ref.getObjectId());
    ru.setNewObjectId(current);
    ru.setForceUpdate(true);
    ru.setRefLogIdent(serverIdent);
    ru.setRefLogMessage(getClass().getSimpleName(), true);
    Result result = ru.update();
    if (result != Result.FORCED) {
        throw new IOException(String.format("Failed to update ref %s: %s", ref.getName(), result.name()));
    }
}

From source file:com.google.gerrit.server.schema.Schema_56.java

License:Apache License

@Override
protected void migrateData(ReviewDb db, UpdateUI ui) {
    for (Project.NameKey name : mgr.list()) {
        Repository git;
        try {//from w  w w. j a  va 2s  .co  m
            git = mgr.openRepository(name);
        } catch (RepositoryNotFoundException e) {
            ui.message("warning: Cannot open " + name.get());
            continue;
        }
        try {
            Map<String, Ref> all = git.getAllRefs();
            if (all.keySet().equals(keysOne) || all.keySet().equals(keysTwo)) {
                try {
                    RefUpdate update = git.updateRef(Constants.HEAD);
                    update.disableRefLog();
                    update.link(GitRepositoryManager.REF_CONFIG);
                } catch (IOException err) {
                    ui.message("warning: " + name.get() + ": Cannot update HEAD to "
                            + GitRepositoryManager.REF_CONFIG + ": " + err.getMessage());
                }
            }
        } finally {
            git.close();
        }
    }
}

From source file:com.google.gerrit.server.StarredChangesUtil.java

License:Apache License

private void updateLabels(Repository repo, String refName, ObjectId oldObjectId, SortedSet<String> labels)
        throws IOException, OrmException {
    try (RevWalk rw = new RevWalk(repo)) {
        RefUpdate u = repo.updateRef(refName);
        u.setExpectedOldObjectId(oldObjectId);
        u.setForceUpdate(true);/*from   w w w  .  j av a  2  s. c  o  m*/
        u.setNewObjectId(writeLabels(repo, labels));
        u.setRefLogIdent(serverIdent);
        u.setRefLogMessage("Update star labels", true);
        RefUpdate.Result result = u.update(rw);
        switch (result) {
        case NEW:
        case FORCED:
        case NO_CHANGE:
        case FAST_FORWARD:
            return;
        case IO_FAILURE:
        case LOCK_FAILURE:
        case NOT_ATTEMPTED:
        case REJECTED:
        case REJECTED_CURRENT_BRANCH:
        case RENAMED:
            throw new OrmException(
                    String.format("Update star labels on ref %s failed: %s", refName, result.name()));
        }
    }
}

From source file:com.google.gerrit.sshd.commands.CreateProject.java

License:Apache License

@Override
public void start(final Environment env) {
    startThread(new CommandRunnable() {
        @Override//from  w  ww.  j av a2 s.  c o  m
        public void run() throws Exception {
            PrintWriter p = toPrintWriter(out);

            parseCommandLine();

            try {
                validateParameters();
                nameKey = new Project.NameKey(projectName);

                final Repository repo = repoManager.createRepository(nameKey);
                try {
                    RefUpdate u = repo.updateRef(Constants.HEAD);
                    u.disableRefLog();
                    u.link(branch);

                    createProject();
                    repoManager.setProjectDescription(nameKey, projectDescription);

                    if (createEmptyCommit) {
                        createEmptyCommit(repo, nameKey, branch);
                    }

                    rq.replicateNewProject(nameKey, branch);
                } finally {
                    repo.close();
                }
            } catch (Exception e) {
                p.print("Error when trying to create project: " + e.getMessage() + "\n");
                p.flush();
            }
        }
    });
}

From source file:com.google.gerrit.sshd.commands.CreateProject.java

License:Apache License

private void createEmptyCommit(final Repository repo, final Project.NameKey project, final String ref)
        throws IOException {
    ObjectInserter oi = repo.newObjectInserter();
    try {//from ww w.ja  v  a  2  s .  co  m
        CommitBuilder cb = new CommitBuilder();
        cb.setTreeId(oi.insert(Constants.OBJ_TREE, new byte[] {}));
        cb.setAuthor(metaDataUpdateFactory.getUserPersonIdent());
        cb.setCommitter(serverIdent);
        cb.setMessage("Initial empty repository\n");

        ObjectId id = oi.insert(cb);
        oi.flush();

        RefUpdate ru = repo.updateRef(Constants.HEAD);
        ru.setNewObjectId(id);
        final Result result = ru.update();
        switch (result) {
        case NEW:
            rq.scheduleUpdate(project, ref);
            break;
        default: {
            throw new IOException(result.name());
        }
        }
    } catch (IOException e) {
        log.error("Cannot create empty commit for " + projectName, e);
        throw e;
    } finally {
        oi.release();
    }
}

From source file:com.googlesource.gerrit.plugins.changefabricator.ChangeFabricator.java

License:Apache License

private Change.Id createNewChange(Repository git, RevWalk revWalk, Change.Key changeKey,
        Project.NameKey project, Ref destRef, RevCommit emptyCommit, RefControl refControl)
        throws OrmException, InvalidChangeOperationException, IOException {
    IdentifiedUser me = (IdentifiedUser) userProvider.get();
    Change change = new Change(changeKey, new Change.Id(db.nextChangeId()), me.getAccountId(),
            new Branch.NameKey(project, destRef.getName()), TimeUtil.nowTs());
    ChangeInserter ins = changeInserterFactory.create(refControl, change, emptyCommit);
    PatchSet newPatchSet = ins.getPatchSet();

    CommitValidators commitValidators = commitValidatorsFactory.create(refControl, new NoSshInfo(), git);
    CommitReceivedEvent commitReceivedEvent = new CommitReceivedEvent(
            new ReceiveCommand(ObjectId.zeroId(), emptyCommit.getId(), newPatchSet.getRefName()),
            refControl.getProjectControl().getProject(), refControl.getRefName(), emptyCommit, me);

    try {/* w  w  w. j ava  2  s .c  o  m*/
        commitValidators.validateForGerritCommits(commitReceivedEvent);
    } catch (CommitValidationException e) {
        throw new InvalidChangeOperationException(e.getMessage());
    }

    final RefUpdate ru = git.updateRef(newPatchSet.getRefName());
    ru.setExpectedOldObjectId(ObjectId.zeroId());
    ru.setNewObjectId(emptyCommit);
    ru.disableRefLog();
    if (ru.update(revWalk) != RefUpdate.Result.NEW) {
        throw new IOException(String.format("Failed to create ref %s in %s: %s", newPatchSet.getRefName(),
                change.getDest().getParentKey().get(), ru.getResult()));
    }

    ins.insert();
    return change.getId();
}

From source file:com.googlesource.gerrit.plugins.github.git.PullRequestCreateChange.java

License:Apache License

private Change.Id createNewChange(ReviewDb db, Repository git, RevWalk revWalk, Change.Key changeKey,
        Project.NameKey project, Ref destRef, Account.Id pullRequestOwner, RevCommit pullRequestCommit,
        RefControl refControl, String pullRequestMessage, String topic, boolean doValidation)
        throws OrmException, InvalidChangeOperationException, IOException {
    Change change = new Change(changeKey, new Change.Id(db.nextChangeId()), pullRequestOwner,
            new Branch.NameKey(project, destRef.getName()), TimeUtil.nowTs());
    if (topic != null) {
        change.setTopic(topic);// w  w  w  .  j a v  a 2s. c o m
    }
    ChangeInserter ins = changeInserterFactory.create(refControl, change, pullRequestCommit);
    PatchSet newPatchSet = ins.getPatchSet();

    if (doValidation) {
        validate(git, pullRequestCommit, refControl, newPatchSet);
    }

    final RefUpdate ru = git.updateRef(newPatchSet.getRefName());
    ru.setExpectedOldObjectId(ObjectId.zeroId());
    ru.setNewObjectId(pullRequestCommit);
    ru.disableRefLog();
    if (ru.update(revWalk) != RefUpdate.Result.NEW) {
        throw new IOException(String.format("Failed to create ref %s in %s: %s", newPatchSet.getRefName(),
                change.getDest().getParentKey().get(), ru.getResult()));
    }

    ins.setMessage(buildChangeMessage(db, change, newPatchSet, pullRequestOwner, pullRequestMessage)).insert();

    return change.getId();
}

From source file:com.googlesource.gerrit.plugins.manifest.TempRef.java

License:Apache License

@Inject
public TempRef(GitRepositoryManager repoManager, @Assisted Branch.NameKey branch) throws IOException {
    this.repoManager = repoManager;

    Project.NameKey project = branch.getParentKey();
    tempRef = new Branch.NameKey(project, "refs/temp/" + UUID.randomUUID().toString());

    Repository repo = repoManager.openRepository(project);
    try {//ww  w  .  j  av  a2 s .  com
        RefUpdate refUpdate = repo.updateRef(tempRef.get());
        refUpdate.setNewObjectId(repo.getRef(branch.get()).getObjectId());
        refUpdate.setForceUpdate(true);
        refUpdate.update();
    } finally {
        repo.close();
    }
}

From source file:com.googlesource.gerrit.plugins.manifest.TempRef.java

License:Apache License

public void close() throws IOException {
    Repository repo = repoManager.openRepository(tempRef.getParentKey());
    try {/*w w  w . ja v  a2s.c om*/
        RefUpdate refUpdate = repo.updateRef(tempRef.get());
        refUpdate.setNewObjectId(ObjectId.zeroId());
        refUpdate.setForceUpdate(true);
        refUpdate.delete();
    } finally {
        tempRef = null;
        repo.close();
    }
}