Example usage for org.eclipse.jgit.api Git getRepository

List of usage examples for org.eclipse.jgit.api Git getRepository

Introduction

In this page you can find the example usage for org.eclipse.jgit.api Git getRepository.

Prototype

public Repository getRepository() 

Source Link

Document

Get repository

Usage

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

public static boolean commit(final Git git, final String branchName, final CommitInfo commitInfo,
        final boolean amend, final ObjectId _originId, final CommitContent content) {
    boolean hadEffecitiveCommit = true;
    final PersonIdent author = buildPersonIdent(git, commitInfo.getName(), commitInfo.getEmail(),
            commitInfo.getTimeZone(), commitInfo.getWhen());

    try {//from www .j a  v  a2  s . c om
        final ObjectInserter odi = git.getRepository().newObjectInserter();
        try {
            // Create the in-memory index of the new/updated issue.
            final ObjectId headId = git.getRepository().resolve(branchName + "^{commit}");

            final ObjectId originId;
            if (_originId == null) {
                originId = git.getRepository().resolve(branchName + "^{commit}");
            } else {
                originId = _originId;
            }

            final DirCache index;
            if (content instanceof DefaultCommitContent) {
                index = createTemporaryIndex(git, originId, (DefaultCommitContent) content);
            } else if (content instanceof MoveCommitContent) {
                index = createTemporaryIndex(git, originId, (MoveCommitContent) content);
            } else if (content instanceof CopyCommitContent) {
                index = createTemporaryIndex(git, originId, (CopyCommitContent) content);
            } else if (content instanceof RevertCommitContent) {
                index = createTemporaryIndex(git, originId);
            } else {
                index = null;
            }

            if (index != null) {
                final ObjectId indexTreeId = index.writeTree(odi);

                // Create a commit object
                final CommitBuilder commit = new CommitBuilder();
                commit.setAuthor(author);
                commit.setCommitter(author);
                commit.setEncoding(Constants.CHARACTER_ENCODING);
                commit.setMessage(commitInfo.getMessage());
                //headId can be null if the repository has no commit yet
                if (headId != null) {
                    if (amend) {
                        final List<ObjectId> parents = new LinkedList<ObjectId>();
                        final RevCommit previousCommit = new RevWalk(git.getRepository()).parseCommit(headId);
                        final RevCommit[] p = previousCommit.getParents();
                        for (final RevCommit revCommit : p) {
                            parents.add(0, revCommit.getId());
                        }
                        commit.setParentIds(parents);
                    } else {
                        commit.setParentId(headId);
                    }
                }
                commit.setTreeId(indexTreeId);

                // Insert the commit into the repository
                final ObjectId commitId = odi.insert(commit);
                odi.flush();

                final RevWalk revWalk = new RevWalk(git.getRepository());
                try {
                    final RevCommit revCommit = revWalk.parseCommit(commitId);
                    final RefUpdate ru = git.getRepository().updateRef("refs/heads/" + branchName);
                    if (headId == null) {
                        ru.setExpectedOldObjectId(ObjectId.zeroId());
                    } else {
                        ru.setExpectedOldObjectId(headId);
                    }
                    ru.setNewObjectId(commitId);
                    ru.setRefLogMessage("commit: " + revCommit.getShortMessage(), false);
                    final RefUpdate.Result rc = ru.forceUpdate();
                    switch (rc) {
                    case NEW:
                    case FORCED:
                    case FAST_FORWARD:
                        break;
                    case REJECTED:
                    case LOCK_FAILURE:
                        throw new ConcurrentRefUpdateException(JGitText.get().couldNotLockHEAD, ru.getRef(),
                                rc);
                    default:
                        throw new JGitInternalException(MessageFormat.format(JGitText.get().updatingRefFailed,
                                Constants.HEAD, commitId.toString(), rc));
                    }

                } finally {
                    revWalk.release();
                }
            } else {
                hadEffecitiveCommit = false;
            }
        } finally {
            odi.release();
        }
    } catch (final Throwable t) {
        throw new RuntimeException(t);
    }
    return hadEffecitiveCommit;
}

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

private static PersonIdent buildPersonIdent(final Git git, final String name, final String _email,
        final TimeZone timeZone, final Date when) {
    final TimeZone tz = timeZone == null ? TimeZone.getDefault() : timeZone;
    final String email = _email == null ? "" : _email;

    if (name != null) {
        if (when != null) {
            return new PersonIdent(name, email, when, tz);
        } else {/*from   w w  w  .j  a va2 s  .co  m*/
            return new PersonIdent(name, email);
        }
    }
    return new PersonIdent(git.getRepository());
}

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

/**
 * Creates an in-memory index of the issue change.
 *///  www .j  av a  2  s .  c o  m
private static DirCache createTemporaryIndex(final Git git, final ObjectId headId,
        final DefaultCommitContent commitContent) {

    final Map<String, File> content = commitContent.getContent();

    final Map<String, Pair<File, ObjectId>> paths = new HashMap<String, Pair<File, ObjectId>>(content.size());
    final Set<String> path2delete = new HashSet<String>();

    final DirCache inCoreIndex = DirCache.newInCore();
    final ObjectInserter inserter = git.getRepository().newObjectInserter();
    final DirCacheEditor editor = inCoreIndex.editor();

    try {
        for (final Map.Entry<String, File> pathAndContent : content.entrySet()) {
            final String gPath = fixPath(pathAndContent.getKey());
            if (pathAndContent.getValue() == null) {
                final TreeWalk treeWalk = new TreeWalk(git.getRepository());
                treeWalk.addTree(new RevWalk(git.getRepository()).parseTree(headId));
                treeWalk.setRecursive(true);
                treeWalk.setFilter(PathFilter.create(gPath));

                while (treeWalk.next()) {
                    path2delete.add(treeWalk.getPathString());
                }
                treeWalk.release();
            } else {
                try {
                    final InputStream inputStream = new FileInputStream(pathAndContent.getValue());
                    try {
                        final ObjectId objectId = inserter.insert(Constants.OBJ_BLOB,
                                pathAndContent.getValue().length(), inputStream);
                        paths.put(gPath, Pair.newPair(pathAndContent.getValue(), objectId));
                    } finally {
                        inputStream.close();
                    }
                } catch (final Exception ex) {
                    throw new RuntimeException(ex);
                }
            }
        }

        if (headId != null) {
            final TreeWalk treeWalk = new TreeWalk(git.getRepository());
            final int hIdx = treeWalk.addTree(new RevWalk(git.getRepository()).parseTree(headId));
            treeWalk.setRecursive(true);

            while (treeWalk.next()) {
                final String walkPath = treeWalk.getPathString();
                final CanonicalTreeParser hTree = treeWalk.getTree(hIdx, CanonicalTreeParser.class);

                if (paths.containsKey(walkPath)
                        && paths.get(walkPath).getK2().equals(hTree.getEntryObjectId())) {
                    paths.remove(walkPath);
                }

                if (paths.get(walkPath) == null && !path2delete.contains(walkPath)) {
                    final DirCacheEntry dcEntry = new DirCacheEntry(walkPath);
                    final ObjectId _objectId = hTree.getEntryObjectId();
                    final FileMode _fileMode = hTree.getEntryFileMode();

                    // add to temporary in-core index
                    editor.add(new DirCacheEditor.PathEdit(dcEntry) {
                        @Override
                        public void apply(final DirCacheEntry ent) {
                            ent.setObjectId(_objectId);
                            ent.setFileMode(_fileMode);
                        }
                    });
                }
            }
            treeWalk.release();
        }

        for (final Map.Entry<String, Pair<File, ObjectId>> pathAndContent : paths.entrySet()) {
            if (pathAndContent.getValue().getK1() != null) {
                editor.add(new DirCacheEditor.PathEdit(new DirCacheEntry(pathAndContent.getKey())) {
                    @Override
                    public void apply(final DirCacheEntry ent) {
                        ent.setLength(pathAndContent.getValue().getK1().length());
                        ent.setLastModified(pathAndContent.getValue().getK1().lastModified());
                        ent.setFileMode(REGULAR_FILE);
                        ent.setObjectId(pathAndContent.getValue().getK2());
                    }
                });
            }
        }

        editor.finish();
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        inserter.release();
    }

    if (path2delete.isEmpty() && paths.isEmpty()) {
        //no changes!
        return null;
    }

    return inCoreIndex;
}

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

private static DirCache createTemporaryIndex(final Git git, final ObjectId headId,
        final MoveCommitContent commitContent) {
    final Map<String, String> content = commitContent.getContent();

    final DirCache inCoreIndex = DirCache.newInCore();
    final DirCacheEditor editor = inCoreIndex.editor();

    try {//  w w w .j  a  va2  s.  c om
        if (headId != null) {
            final TreeWalk treeWalk = new TreeWalk(git.getRepository());
            final int hIdx = treeWalk.addTree(new RevWalk(git.getRepository()).parseTree(headId));
            treeWalk.setRecursive(true);

            while (treeWalk.next()) {
                final String walkPath = treeWalk.getPathString();
                final CanonicalTreeParser hTree = treeWalk.getTree(hIdx, CanonicalTreeParser.class);

                final String toPath = content.get(walkPath);

                if (toPath == null) {
                    final DirCacheEntry dcEntry = new DirCacheEntry(walkPath);
                    final ObjectId _objectId = hTree.getEntryObjectId();
                    final FileMode _fileMode = hTree.getEntryFileMode();

                    // add to temporary in-core index
                    editor.add(new DirCacheEditor.PathEdit(dcEntry) {
                        @Override
                        public void apply(final DirCacheEntry ent) {
                            ent.setObjectId(_objectId);
                            ent.setFileMode(_fileMode);
                        }
                    });
                } else {
                    final DirCacheEntry dcEntry = new DirCacheEntry(toPath);
                    final ObjectId _objectId = hTree.getEntryObjectId();
                    final FileMode _fileMode = hTree.getEntryFileMode();

                    editor.add(new DirCacheEditor.PathEdit(dcEntry) {
                        @Override
                        public void apply(final DirCacheEntry ent) {
                            ent.setFileMode(_fileMode);
                            ent.setObjectId(_objectId);
                        }
                    });
                }
            }
            treeWalk.release();
        }

        editor.finish();
    } catch (final Exception e) {
        throw new RuntimeException(e);
    }

    return inCoreIndex;
}

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

private static DirCache createTemporaryIndex(final Git git, final ObjectId headId,
        final CopyCommitContent commitContent) {
    final Map<String, String> content = commitContent.getContent();

    final DirCache inCoreIndex = DirCache.newInCore();
    final DirCacheEditor editor = inCoreIndex.editor();

    try {//w  w w  .  j a v  a2 s . c o  m
        if (headId != null) {
            final TreeWalk treeWalk = new TreeWalk(git.getRepository());
            final int hIdx = treeWalk.addTree(new RevWalk(git.getRepository()).parseTree(headId));
            treeWalk.setRecursive(true);

            while (treeWalk.next()) {
                final String walkPath = treeWalk.getPathString();
                final CanonicalTreeParser hTree = treeWalk.getTree(hIdx, CanonicalTreeParser.class);

                final String toPath = content.get(walkPath);

                final DirCacheEntry dcEntry = new DirCacheEntry(walkPath);
                final ObjectId _objectId = hTree.getEntryObjectId();
                final FileMode _fileMode = hTree.getEntryFileMode();

                // add to temporary in-core index
                editor.add(new DirCacheEditor.PathEdit(dcEntry) {
                    @Override
                    public void apply(final DirCacheEntry ent) {
                        ent.setObjectId(_objectId);
                        ent.setFileMode(_fileMode);
                    }
                });

                if (toPath != null) {
                    final DirCacheEntry newdcEntry = new DirCacheEntry(toPath);
                    final ObjectId newObjectId = hTree.getEntryObjectId();
                    final FileMode newFileMode = hTree.getEntryFileMode();

                    editor.add(new DirCacheEditor.PathEdit(newdcEntry) {
                        @Override
                        public void apply(final DirCacheEntry ent) {
                            ent.setFileMode(newFileMode);
                            ent.setObjectId(newObjectId);
                        }
                    });
                }
            }
            treeWalk.release();
        }

        editor.finish();
    } catch (final Exception e) {
        throw new RuntimeException(e);
    }

    return inCoreIndex;
}

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

private static DirCache createTemporaryIndex(final Git git, final ObjectId headId) {

    final DirCache inCoreIndex = DirCache.newInCore();
    final DirCacheEditor editor = inCoreIndex.editor();

    try {//from   w ww  . ja va 2s. c  om
        if (headId != null) {
            final TreeWalk treeWalk = new TreeWalk(git.getRepository());
            final int hIdx = treeWalk.addTree(new RevWalk(git.getRepository()).parseTree(headId));
            treeWalk.setRecursive(true);

            while (treeWalk.next()) {
                final String walkPath = treeWalk.getPathString();
                final CanonicalTreeParser hTree = treeWalk.getTree(hIdx, CanonicalTreeParser.class);

                final DirCacheEntry dcEntry = new DirCacheEntry(walkPath);
                final ObjectId _objectId = hTree.getEntryObjectId();
                final FileMode _fileMode = hTree.getEntryFileMode();

                // add to temporary in-core index
                editor.add(new DirCacheEditor.PathEdit(dcEntry) {
                    @Override
                    public void apply(final DirCacheEntry ent) {
                        ent.setObjectId(_objectId);
                        ent.setFileMode(_fileMode);
                    }
                });
            }
            treeWalk.release();
        }

        editor.finish();
    } catch (final Exception e) {
        throw new RuntimeException(e);
    }

    return inCoreIndex;
}

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

public static Pair<PathType, ObjectId> checkPath(final Git git, final String branchName, final String path) {
    checkNotNull("git", git);
    checkNotNull("path", path);
    checkNotEmpty("branchName", branchName);

    final String gitPath = fixPath(path);

    if (gitPath.isEmpty()) {
        return newPair(PathType.DIRECTORY, null);
    }/*from   ww w  . jav  a2s. com*/

    TreeWalk tw = null;
    try {
        final ObjectId tree = git.getRepository().resolve(branchName + "^{tree}");
        tw = new TreeWalk(git.getRepository());
        tw.setFilter(PathFilter.create(gitPath));
        tw.reset(tree);
        while (tw.next()) {
            if (tw.getPathString().equals(gitPath)) {
                if (tw.getFileMode(0).equals(FileMode.TYPE_TREE)) {
                    return newPair(PathType.DIRECTORY, tw.getObjectId(0));
                } else if (tw.getFileMode(0).equals(FileMode.TYPE_FILE)
                        || tw.getFileMode(0).equals(FileMode.EXECUTABLE_FILE)
                        || tw.getFileMode(0).equals(FileMode.REGULAR_FILE)) {
                    return newPair(PathType.FILE, tw.getObjectId(0));
                }
            }
            if (tw.isSubtree()) {
                tw.enterSubtree();
            }
        }
    } catch (final Throwable ignored) {
    } finally {
        if (tw != null) {
            tw.release();
        }
    }
    return newPair(PathType.NOT_FOUND, null);
}

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

public static JGitPathInfo resolvePath(final Git git, final String branchName, final String path) {
    checkNotNull("git", git);
    checkNotNull("path", path);
    checkNotEmpty("branchName", branchName);

    final String gitPath = fixPath(path);

    if (gitPath.isEmpty()) {
        return new JGitPathInfo(null, "/", TREE);
    }/*www  .j a  v a  2 s . c  o  m*/

    TreeWalk tw = null;
    try {
        final ObjectId tree = git.getRepository().resolve(branchName + "^{tree}");
        tw = new TreeWalk(git.getRepository());
        tw.setFilter(PathFilter.create(gitPath));
        tw.reset(tree);
        while (tw.next()) {
            if (tw.getPathString().equals(gitPath)) {
                if (tw.getFileMode(0).equals(TREE)) {
                    return new JGitPathInfo(tw.getObjectId(0), tw.getPathString(), TREE);
                } else if (tw.getFileMode(0).equals(REGULAR_FILE)
                        || tw.getFileMode(0).equals(EXECUTABLE_FILE)) {
                    final long size = tw.getObjectReader().getObjectSize(tw.getObjectId(0), OBJ_BLOB);
                    return new JGitPathInfo(tw.getObjectId(0), tw.getPathString(), REGULAR_FILE, size);
                }
            }
            if (tw.isSubtree()) {
                tw.enterSubtree();
            }
        }
    } catch (final Throwable ignored) {
    } finally {
        if (tw != null) {
            tw.release();
        }
    }

    return null;
}

From source file:org.uberfire.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

public static List<JGitPathInfo> listPathContent(final Git git, final String branchName, final String path) {
    checkNotNull("git", git);
    checkNotNull("path", path);
    checkNotEmpty("branchName", branchName);

    final String gitPath = fixPath(path);

    TreeWalk tw = null;//w ww .  jav a  2  s .  c o  m
    final List<JGitPathInfo> result = new ArrayList<JGitPathInfo>();
    try {
        final ObjectId tree = git.getRepository().resolve(branchName + "^{tree}");
        tw = new TreeWalk(git.getRepository());
        boolean found = false;
        if (gitPath.isEmpty()) {
            found = true;
        } else {
            tw.setFilter(PathFilter.create(gitPath));
        }
        tw.reset(tree);
        while (tw.next()) {
            if (!found && tw.isSubtree()) {
                tw.enterSubtree();
            }
            if (tw.getPathString().equals(gitPath)) {
                found = true;
                continue;
            }
            if (found) {
                result.add(new JGitPathInfo(tw.getObjectId(0), tw.getPathString(), tw.getFileMode(0)));
            }
        }
    } catch (final Throwable ignored) {
    } finally {
        if (tw != null) {
            tw.release();
        }
    }

    return result;
}

From source file:org.uberfire.provisioning.source.git.CloneTestJUnitTest.java

License:Apache License

@Test
public void hello() throws Exception {
    final String repoName = "drools-workshop-build";
    final Optional<Source> source = new GitConfigExecutor(new InMemorySourceRegistry())
            .apply(new GitConfigImpl(tempPath.getAbsolutePath(), "master", gitUrl, repoName, "true"));
    assertTrue(source.isPresent());//  w w w. ja  v  a  2s .c om

    final String targetRepoDir = tempPath.getAbsolutePath() + "/" + repoName + ".git";
    Git git = Git.open(new File(targetRepoDir));

    assertNotNull(git.getRepository().exactRef(Constants.HEAD));
}