Example usage for org.eclipse.jgit.lib RefUpdate link

List of usage examples for org.eclipse.jgit.lib RefUpdate link

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib RefUpdate link.

Prototype

public Result link(String target) throws IOException 

Source Link

Document

Replace this reference with a symbolic reference to another reference.

Usage

From source file:com.gitblit.utils.JGitUtils.java

License:Apache License

/**
 * Sets the symbolic ref HEAD to the specified target ref. The
 * HEAD will be detached if the target ref is not a branch.
 *
 * @param repository/*from   w  w w  .  j av  a  2  s  .co m*/
 * @param targetRef
 * @return true if successful
 */
public static boolean setHEADtoRef(Repository repository, String targetRef) {
    try {
        // detach HEAD if target ref is not a branch
        boolean detach = !targetRef.startsWith(Constants.R_HEADS);
        RefUpdate.Result result;
        RefUpdate head = repository.updateRef(Constants.HEAD, detach);
        if (detach) { // Tag
            RevCommit commit = getCommit(repository, targetRef);
            head.setNewObjectId(commit.getId());
            result = head.forceUpdate();
        } else {
            result = head.link(targetRef);
        }
        switch (result) {
        case NEW:
        case FORCED:
        case NO_CHANGE:
        case FAST_FORWARD:
            return true;
        default:
            LOGGER.error(MessageFormat.format("{0} HEAD update to {1} returned result {2}",
                    repository.getDirectory().getAbsolutePath(), targetRef, result));
        }
    } catch (Throwable t) {
        error(t, repository, "{0} failed to set HEAD to {1}", targetRef);
    }
    return false;
}

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

License:Apache License

public Project createProject(CreateProjectArgs args)
        throws BadRequestException, ResourceConflictException, IOException, ConfigInvalidException {
    final Project.NameKey nameKey = args.getProject();
    try {//www .  java2  s  . c om
        final String head = args.permissionsOnly ? RefNames.REFS_CONFIG : args.branch.get(0);
        try (Repository repo = repoManager.openRepository(nameKey)) {
            if (repo.getObjectDatabase().exists()) {
                throw new ResourceConflictException("project \"" + nameKey + "\" exists");
            }
        } catch (RepositoryNotFoundException e) {
            // It does not exist, safe to ignore.
        }
        try (Repository repo = repoManager.createRepository(nameKey)) {
            RefUpdate u = repo.updateRef(Constants.HEAD);
            u.disableRefLog();
            u.link(head);

            createProjectConfig(args);

            if (!args.permissionsOnly && args.createEmptyCommit) {
                createEmptyCommits(repo, nameKey, args.branch);
            }

            NewProjectCreatedListener.Event event = new NewProjectCreatedListener.Event() {
                @Override
                public String getProjectName() {
                    return nameKey.get();
                }

                @Override
                public String getHeadName() {
                    return head;
                }
            };
            for (NewProjectCreatedListener l : createdListener) {
                try {
                    l.onNewProjectCreated(event);
                } catch (RuntimeException e) {
                    log.warn("Failure in NewProjectCreatedListener", e);
                }
            }

            return projectCache.get(nameKey).getProject();
        }
    } catch (RepositoryCaseMismatchException e) {
        throw new ResourceConflictException(
                "Cannot create " + nameKey.get() + " because the name is already occupied by another project."
                        + " The other project has the same name, only spelled in a" + " different case.");
    } catch (RepositoryNotFoundException badName) {
        throw new BadRequestException("invalid project name: " + nameKey);
    } catch (ConfigInvalidException e) {
        String msg = "Cannot create " + nameKey;
        log.error(msg, e);
        throw e;
    }
}

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

License:Apache License

public Project createProject() throws ProjectCreationFailedException {
    validateParameters();/*ww  w  .j a v  a 2 s. c  o  m*/
    final Project.NameKey nameKey = createProjectArgs.getProject();
    try {
        final String head = createProjectArgs.permissionsOnly ? RefNames.REFS_CONFIG
                : createProjectArgs.branch.get(0);
        final Repository repo = repoManager.createRepository(nameKey);
        try {
            NewProjectCreatedListener.Event event = new NewProjectCreatedListener.Event() {
                @Override
                public String getProjectName() {
                    return nameKey.get();
                }

                @Override
                public String getHeadName() {
                    return head;
                }
            };
            for (NewProjectCreatedListener l : createdListener) {
                try {
                    l.onNewProjectCreated(event);
                } catch (RuntimeException e) {
                    log.warn("Failure in NewProjectCreatedListener", e);
                }
            }

            final RefUpdate u = repo.updateRef(Constants.HEAD);
            u.disableRefLog();
            u.link(head);

            createProjectConfig();

            if (!createProjectArgs.permissionsOnly && createProjectArgs.createEmptyCommit) {
                createEmptyCommits(repo, nameKey, createProjectArgs.branch);
            }

            return projectCache.get(nameKey).getProject();
        } finally {
            repo.close();
        }
    } catch (RepositoryCaseMismatchException e) {
        throw new ProjectCreationFailedException(
                "Cannot create " + nameKey.get() + " because the name is already occupied by another project."
                        + " The other project has the same name, only spelled in a" + " different case.",
                e);
    } catch (RepositoryNotFoundException badName) {
        throw new ProjectCreationFailedException("Cannot create " + nameKey, badName);
    } catch (IllegalStateException err) {
        try {
            final Repository repo = repoManager.openRepository(nameKey);
            try {
                if (repo.getObjectDatabase().exists()) {
                    throw new ProjectCreationFailedException("project \"" + nameKey + "\" exists");
                }
                throw err;
            } finally {
                repo.close();
            }
        } catch (IOException ioErr) {
            final String msg = "Cannot create " + nameKey;
            log.error(msg, err);
            throw new ProjectCreationFailedException(msg, ioErr);
        }
    } catch (Exception e) {
        final String msg = "Cannot create " + nameKey;
        log.error(msg, e);
        throw new ProjectCreationFailedException(msg, e);
    }
}

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

License:Apache License

@Override
public String apply(final ProjectResource rsrc, Input input) throws AuthException, ResourceNotFoundException,
        BadRequestException, UnprocessableEntityException, IOException {
    if (!rsrc.getControl().isOwner()) {
        throw new AuthException("restricted to project owner");
    }/*from   w  w  w.j  a va  2 s.c  o m*/
    if (input == null || Strings.isNullOrEmpty(input.ref)) {
        throw new BadRequestException("ref required");
    }
    String ref = RefNames.fullName(input.ref);

    try (Repository repo = repoManager.openRepository(rsrc.getNameKey())) {
        Map<String, Ref> cur = repo.getRefDatabase().exactRef(Constants.HEAD, ref);
        if (!cur.containsKey(ref)) {
            throw new UnprocessableEntityException(String.format("Ref Not Found: %s", ref));
        }

        final String oldHead = cur.get(Constants.HEAD).getTarget().getName();
        final String newHead = ref;
        if (!oldHead.equals(newHead)) {
            final RefUpdate u = repo.updateRef(Constants.HEAD, true);
            u.setRefLogIdent(identifiedUser.get().newRefLogIdent());
            RefUpdate.Result res = u.link(newHead);
            switch (res) {
            case NO_CHANGE:
            case RENAMED:
            case FORCED:
            case NEW:
                break;
            default:
                throw new IOException("Setting HEAD failed with " + res);
            }

            HeadUpdatedListener.Event event = new HeadUpdatedListener.Event() {
                @Override
                public String getProjectName() {
                    return rsrc.getNameKey().get();
                }

                @Override
                public String getOldHeadName() {
                    return oldHead;
                }

                @Override
                public String getNewHeadName() {
                    return newHead;
                }
            };
            for (HeadUpdatedListener l : headUpdatedListener) {
                try {
                    l.onHeadUpdated(event);
                } catch (RuntimeException e) {
                    log.warn("Failure in HeadUpdatedListener", e);
                }
            }
        }
        return ref;
    } catch (RepositoryNotFoundException e) {
        throw new ResourceNotFoundException(rsrc.getName());
    }
}

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

License:Apache License

public void create() throws IOException, ConfigInvalidException {
    try (Repository git = mgr.openRepository(allProjectsName)) {
        initAllProjects(git);/* ww w. j  a va 2s.c om*/
    } catch (RepositoryNotFoundException notFound) {
        // A repository may be missing if this project existed only to store
        // inheritable permissions. For example 'All-Projects'.
        try (Repository git = mgr.createRepository(allProjectsName)) {
            initAllProjects(git);
            RefUpdate u = git.updateRef(Constants.HEAD);
            u.link(RefNames.REFS_CONFIG);
        } catch (RepositoryNotFoundException err) {
            String name = allProjectsName.get();
            throw new IOException("Cannot create repository " + name, err);
        }
    }
}

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;/*  w  w  w  . j  a  v a  2  s  .  c  o  m*/
        try {
            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.sshd.commands.CreateProject.java

License:Apache License

@Override
public void start(final Environment env) {
    startThread(new CommandRunnable() {
        @Override/*from  w  ww.j av  a 2 s . c om*/
        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.googlesource.gerrit.plugins.replication.ReplicationQueue.java

License:Apache License

private static void createLocally(URIish uri, String head) {
    try (Repository repo = new FileRepository(uri.getPath())) {
        repo.create(true /* bare */);

        if (head != null) {
            RefUpdate u = repo.updateRef(Constants.HEAD);
            u.disableRefLog();//  w w w.j  a  v a  2 s.c o m
            u.link(head);
        }
    } catch (IOException e) {
        repLog.error(String.format("Error creating local repository %s:\n", uri.getPath()), e);
    }
}

From source file:com.googlesource.gerrit.plugins.replication.ReplicationQueue.java

License:Apache License

private static void updateHeadLocally(URIish uri, String newHead) {
    try (Repository repo = new FileRepository(uri.getPath())) {
        if (newHead != null) {
            RefUpdate u = repo.updateRef(Constants.HEAD);
            u.link(newHead);
        }/*w  w  w .j  a va2s.c o m*/
    } catch (IOException e) {
        repLog.error(String.format("Failed to update HEAD of repository %s to %s", uri.getPath(), newHead), e);
    }
}

From source file:com.peergreen.configuration.git.GitRepository.java

License:Apache License

@Override
public void setProductionVersion(Version version) throws RepositoryException {

    // Check version exists
    if (!gitManager.existRef(version.getName())) {
        throw new RepositoryException(
                "Want to set new version to '" + version.getName() + "' but it doesn't exists.");
    }// w  w  w.j  av a  2  s  .c o m

    // Now, add the symbolic-ref for the current-version
    RefUpdate newHead = null;
    try {
        newHead = gitManager.repository().updateRef(Constants.R_TAGS + "current-version");
    } catch (IOException e) {
        throw new RepositoryException("Unable to set the production version", e);
    }

    newHead.disableRefLog();
    try {
        newHead.link(Constants.R_TAGS + version.getName());
    } catch (IOException e) {
        throw new RepositoryException("Unable to set the production version", e);
    }

}