Example usage for org.eclipse.jgit.lib Constants HEAD

List of usage examples for org.eclipse.jgit.lib Constants HEAD

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib Constants HEAD.

Prototype

String HEAD

To view the source code for org.eclipse.jgit.lib Constants HEAD.

Click Source Link

Document

Special name for the "HEAD" symbolic-ref.

Usage

From source file:org.jboss.forge.addon.git.GitUtilsImpl.java

License:Open Source License

@Override
public CherryPickResult cherryPickNoMerge(final Git git, Ref src)
        throws GitAPIException, CantMergeCommitException {
    // Does the same as the original git-cherryPick
    // except commiting after running merger
    Repository repo = git.getRepository();

    RevCommit newHead = null;/*from   w ww . j a v a 2  s  .c  o m*/
    List<Ref> cherryPickedRefs = new LinkedList<Ref>();

    try (RevWalk revWalk = new RevWalk(repo)) {
        // get the head commit
        Ref headRef = repo.findRef(Constants.HEAD);
        if (headRef == null)
            throw new NoHeadException(JGitText.get().commitOnRepoWithoutHEADCurrentlyNotSupported);
        RevCommit headCommit = revWalk.parseCommit(headRef.getObjectId());

        newHead = headCommit;

        // get the commit to be cherry-picked
        // handle annotated tags
        ObjectId srcObjectId = src.getPeeledObjectId();
        if (srcObjectId == null)
            srcObjectId = src.getObjectId();
        RevCommit srcCommit = revWalk.parseCommit(srcObjectId);

        // get the parent of the commit to cherry-pick
        if (srcCommit.getParentCount() == 0)
            throw new CantMergeCommitException("Commit with zero parents cannot be merged");

        if (srcCommit.getParentCount() > 1)
            throw new MultipleParentsNotAllowedException(
                    MessageFormat.format(JGitText.get().canOnlyCherryPickCommitsWithOneParent, srcCommit.name(),
                            Integer.valueOf(srcCommit.getParentCount())));

        RevCommit srcParent = srcCommit.getParent(0);
        revWalk.parseHeaders(srcParent);

        ResolveMerger merger = (ResolveMerger) MergeStrategy.RESOLVE.newMerger(repo);
        merger.setWorkingTreeIterator(new FileTreeIterator(repo));
        merger.setBase(srcParent.getTree());
        if (merger.merge(headCommit, srcCommit)) {
            DirCacheCheckout dco = new DirCacheCheckout(repo, headCommit.getTree(), repo.lockDirCache(),
                    merger.getResultTreeId());
            dco.setFailOnConflict(true);
            dco.checkout();

            cherryPickedRefs.add(src);
        } else {
            if (merger.failed())
                return new CherryPickResult(merger.getFailingPaths());

            // there are merge conflicts
            String message = new MergeMessageFormatter().formatWithConflicts(srcCommit.getFullMessage(),
                    merger.getUnmergedPaths());

            repo.writeCherryPickHead(srcCommit.getId());
            repo.writeMergeCommitMsg(message);

            return CherryPickResult.CONFLICT;
        }
    } catch (IOException e) {
        throw new JGitInternalException(
                MessageFormat.format(JGitText.get().exceptionCaughtDuringExecutionOfCherryPickCommand, e), e);
    }
    return new CherryPickResult(newHead, cherryPickedRefs);
}

From source file:org.jboss.forge.git.Clone.java

License:Eclipse Distribution License

private void doCheckout(final Ref branch) throws IOException {
    if (branch == null)
        throw new Die(CLIText.get().cannotChekoutNoHeadsAdvertisedByRemote);
    if (!Constants.HEAD.equals(branch.getName())) {
        RefUpdate u = db.updateRef(Constants.HEAD);
        u.disableRefLog();/*from   ww  w . j  a  v  a 2s .  c  o  m*/
        u.link(branch.getName());
    }

    final RevCommit commit = parseCommit(branch);
    final RefUpdate u = db.updateRef(Constants.HEAD);
    u.setNewObjectId(commit);
    u.forceUpdate();

    DirCache dc = db.lockDirCache();
    DirCacheCheckout co = new DirCacheCheckout(db, dc, commit.getTree());
    co.checkout();
}

From source file:org.jboss.forge.git.GitUtils.java

License:Open Source License

public static CherryPickResult cherryPickNoMerge(final Git git, Ref src)
        throws GitAPIException, CantMergeCommitWithZeroParentsException {
    // Does the same as the original git-cherryPick
    // except commiting after running merger
    Repository repo = git.getRepository();

    RevCommit newHead = null;//ww w .  jav  a 2 s .  c om
    List<Ref> cherryPickedRefs = new LinkedList<Ref>();

    RevWalk revWalk = new RevWalk(repo);
    try {
        // get the head commit
        Ref headRef = repo.getRef(Constants.HEAD);
        if (headRef == null)
            throw new NoHeadException(JGitText.get().commitOnRepoWithoutHEADCurrentlyNotSupported);
        RevCommit headCommit = revWalk.parseCommit(headRef.getObjectId());

        newHead = headCommit;

        // get the commit to be cherry-picked
        // handle annotated tags
        ObjectId srcObjectId = src.getPeeledObjectId();
        if (srcObjectId == null)
            srcObjectId = src.getObjectId();
        RevCommit srcCommit = revWalk.parseCommit(srcObjectId);

        // get the parent of the commit to cherry-pick
        if (srcCommit.getParentCount() == 0)
            throw new CantMergeCommitWithZeroParentsException("Commit with zero parents cannot be merged");

        if (srcCommit.getParentCount() > 1)
            throw new MultipleParentsNotAllowedException(
                    MessageFormat.format(JGitText.get().canOnlyCherryPickCommitsWithOneParent, srcCommit.name(),
                            Integer.valueOf(srcCommit.getParentCount())));

        RevCommit srcParent = srcCommit.getParent(0);
        revWalk.parseHeaders(srcParent);

        ResolveMerger merger = (ResolveMerger) MergeStrategy.RESOLVE.newMerger(repo);
        merger.setWorkingTreeIterator(new FileTreeIterator(repo));
        merger.setBase(srcParent.getTree());
        if (merger.merge(headCommit, srcCommit)) {
            DirCacheCheckout dco = new DirCacheCheckout(repo, headCommit.getTree(), repo.lockDirCache(),
                    merger.getResultTreeId());
            dco.setFailOnConflict(true);
            dco.checkout();

            cherryPickedRefs.add(src);
        } else {
            if (merger.failed())
                return new CherryPickResult(merger.getFailingPaths());

            // there are merge conflicts
            String message = new MergeMessageFormatter().formatWithConflicts(srcCommit.getFullMessage(),
                    merger.getUnmergedPaths());

            repo.writeCherryPickHead(srcCommit.getId());
            repo.writeMergeCommitMsg(message);

            return CherryPickResult.CONFLICT;
        }
    } catch (IOException e) {
        throw new JGitInternalException(
                MessageFormat.format(JGitText.get().exceptionCaughtDuringExecutionOfCherryPickCommand, e), e);
    } finally {
        revWalk.release();
    }

    return new CherryPickResult(newHead, cherryPickedRefs);
}

From source file:org.jboss.tools.openshift.egit.core.EGitUtils.java

License:Open Source License

public static void cloneRepository(String uri, String remoteName, File destination, PostCloneTask postCloneTask,
        IProgressMonitor monitor) throws URISyntaxException, InvocationTargetException, InterruptedException {
    URIish gitUri = new URIish(uri);
    CloneOperation cloneOperation = new CloneOperation(gitUri, true, null, destination, Constants.HEAD,
            remoteName, DEFAULT_TIMEOUT);
    if (postCloneTask != null) {
        cloneOperation.addPostCloneTask(postCloneTask);
    }/*  w  ww. j  av  a 2  s  .  c om*/
    cloneOperation.run(monitor);
    // RepositoryUtil repositoryUtil =
    // Activator.getDefault().getRepositoryUtil();
    // repositoryUtil.addConfiguredRepository(new File(destination,
    // Constants.DOT_GIT));
}

From source file:org.jboss.tools.openshift.egit.core.EGitUtils.java

License:Open Source License

/**
 * Merges the given uri to HEAD in the given repository. The given branch is
 * the branch in the local repo the fetched HEAD is fetched to.
 * /*from w w  w.  j a v  a  2s.  c o m*/
 * @param branch
 * @param uri
 * @param repository
 * @param monitor
 * @throws CoreException
 * @throws InvocationTargetException
 */
public static void mergeWithRemote(URIish uri, String branch, Repository repository, IProgressMonitor monitor)
        throws CoreException, InvocationTargetException {
    RefSpec ref = new RefSpec().setSource(Constants.HEAD).setDestination(branch);
    fetch(uri, Collections.singletonList(ref), repository, monitor);
    merge(branch, repository, monitor);
}

From source file:org.jboss.tools.openshift.egit.core.EGitUtils.java

License:Open Source License

/**
 * Returns the changes in the index of the HEAD branch in the given
 * repository. Returns the index diff if there are changes,
 * <code>null</code> otherwise.
 * //from  w ww . j a va 2 s  . c o m
 * @param repo
 *            the repository to get index changes for
 * @param monitor
 *            the monitor to report progress to
 * @return the changes in the index or null;
 * @throws IOException
 */
public static IndexDiff getIndexChanges(Repository repo, IProgressMonitor monitor) throws IOException {
    EclipseGitProgressTransformer jgitMonitor = new EclipseGitProgressTransformer(monitor);

    IndexDiff indexDiff = new IndexDiff(repo, Constants.HEAD, IteratorService.createInitialIterator(repo));
    if (!indexDiff.diff(jgitMonitor, 0, 0, NLS.bind("Repository: {0}", repo.getDirectory().getPath()))) {
        return null;
    }
    return indexDiff;
}

From source file:org.jboss.tools.openshift.egit.core.EGitUtils.java

License:Open Source License

private static boolean isNonTrackingBranchAhead(Repository repo, String remote, IProgressMonitor monitor)
        throws URISyntaxException, InvocationTargetException, IOException {
    RemoteConfig remoteConfig = new RemoteConfig(repo.getConfig(), remote);
    FetchResult fetchResult = fetch(remoteConfig, repo, monitor);
    Ref ref = fetchResult.getAdvertisedRef(Constants.HEAD);
    if (ref == null) {
        return false;
    }/*from   w ww.j a  va2s  .c o m*/
    Ref currentBranchRef = repo.getRef(repo.getBranch());

    RevWalk walk = new RevWalk(repo);
    RevCommit localCommit = walk.parseCommit(currentBranchRef.getObjectId());
    RevCommit trackingCommit = walk.parseCommit(ref.getObjectId());
    walk.setRevFilter(RevFilter.MERGE_BASE);
    walk.markStart(localCommit);
    walk.markStart(trackingCommit);
    RevCommit mergeBase = walk.next();
    walk.reset();
    walk.setRevFilter(RevFilter.ALL);
    int aheadCount = RevWalkUtils.count(walk, localCommit, mergeBase);

    return aheadCount > 0;
}

From source file:org.jboss.tools.openshift.egit.internal.test.util.TestRepository.java

License:Open Source License

public boolean removedFromIndex(String path) throws IOException {
    DirCacheEntry dc = getDirCacheEntry(path);
    if (dc == null)
        return true;

    Ref ref = repository.getRef(Constants.HEAD);
    RevCommit c = new RevWalk(repository).parseCommit(ref.getObjectId());
    TreeWalk tw = TreeWalk.forPath(repository, path, c.getTree());

    return tw == null || dc.getObjectId().equals(tw.getObjectId(0));
}

From source file:org.jboss.tools.openshift.express.internal.ui.server.CommitDialog.java

License:Open Source License

/** Retrieve file status
 * @param path/*ww  w. ja va2  s .c om*/
 * @return file status
 * @throws IOException
 */
private Status getFileStatus(String path) throws IOException {
    FileTreeIterator fileTreeIterator = new FileTreeIterator(repository);
    IndexDiff indexDiff = new IndexDiff(repository, Constants.HEAD, fileTreeIterator);
    Set<String> repositoryPaths = Collections.singleton(path);
    indexDiff.setFilter(PathFilterGroup.createFromStrings(repositoryPaths));
    indexDiff.diff(null, 0, 0, ""); //$NON-NLS-1$
    return getFileStatus(path, indexDiff);
}

From source file:org.jboss.tools.tycho.sitegenerator.GenerateRepositoryFacadeMojo.java

License:Open Source License

private ModelNode createRevisionObject() throws IOException, FileNotFoundException {
    ModelNode res = new ModelNode();
    File repoRoot = findRepoRoot(this.project.getBasedir());
    FileRepositoryBuilder builder = new FileRepositoryBuilder();
    Repository gitRepo = builder.setGitDir(new File(repoRoot, ".git")).readEnvironment() // scan environment GIT_* variables
            .findGitDir() // scan up the file system tree
            .build();/* ww w  .j  a  v a2 s. com*/
    Ref head = gitRepo.getRef(Constants.HEAD);
    res.get("HEAD").set(head.getObjectId().getName());
    if (head.getTarget() != null && head.getTarget().getName() != null) {
        res.get("currentBranch").set(head.getTarget().getName());
    }
    ModelNode knownReferences = new ModelNode();
    for (Entry<String, Ref> entry : gitRepo.getAllRefs().entrySet()) {
        if (entry.getKey().startsWith(Constants.R_REMOTES)
                && entry.getValue().getObjectId().getName().equals(head.getObjectId().getName())) {
            ModelNode reference = new ModelNode();
            String remoteName = entry.getKey().substring(Constants.R_REMOTES.length());
            remoteName = remoteName.substring(0, remoteName.indexOf('/'));
            String remoteUrl = gitRepo.getConfig().getString("remote", remoteName, "url");
            String branchName = entry.getKey()
                    .substring(Constants.R_REMOTES.length() + 1 + remoteName.length());
            reference.get("name").set(remoteName);
            reference.get("url").set(remoteUrl);
            reference.get("ref").set(branchName);
            knownReferences.add(reference);
        }
    }
    res.get("knownReferences").set(knownReferences);
    return res;
}