List of usage examples for org.eclipse.jgit.treewalk TreeWalk reset
public void reset(AnyObjectId... ids) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException
From source file:com.gitblit.utils.JGitUtils.java
License:Apache License
/** * Retrieves the raw byte content of a file in the specified tree. * * @param repository/* w w w.j a va 2 s .c om*/ * @param tree * if null, the RevTree from HEAD is assumed. * @param path * @return content as a byte [] */ public static byte[] getByteContent(Repository repository, RevTree tree, final String path, boolean throwError) { RevWalk rw = new RevWalk(repository); TreeWalk tw = new TreeWalk(repository); tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path))); byte[] content = null; try { if (tree == null) { ObjectId object = getDefaultBranch(repository); if (object == null) return null; RevCommit commit = rw.parseCommit(object); tree = commit.getTree(); } tw.reset(tree); while (tw.next()) { if (tw.isSubtree() && !path.equals(tw.getPathString())) { tw.enterSubtree(); continue; } ObjectId entid = tw.getObjectId(0); FileMode entmode = tw.getFileMode(0); if (entmode != FileMode.GITLINK) { ObjectLoader ldr = repository.open(entid, Constants.OBJ_BLOB); content = ldr.getCachedBytes(); } } } catch (Throwable t) { if (throwError) { error(t, repository, "{0} can't find {1} in tree {2}", path, tree.name()); } } finally { rw.dispose(); tw.close(); } return content; }
From source file:com.gitblit.utils.JGitUtils.java
License:Apache License
public static String getSubmoduleCommitId(Repository repository, String path, RevCommit commit) { String commitId = null;/*from w ww . j ava2 s .c o m*/ RevWalk rw = new RevWalk(repository); TreeWalk tw = new TreeWalk(repository); tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path))); try { tw.reset(commit.getTree()); while (tw.next()) { if (tw.isSubtree() && !path.equals(tw.getPathString())) { tw.enterSubtree(); continue; } if (FileMode.GITLINK == tw.getFileMode(0)) { commitId = tw.getObjectId(0).getName(); break; } } } catch (Throwable t) { error(t, repository, "{0} can't find {1} in commit {2}", path, commit.name()); } finally { rw.dispose(); tw.close(); } return commitId; }
From source file:com.mpdeimos.ct_tests.vcs.GitFileDiff.java
License:Apache License
/** * Computer file diffs for specified tree walk and commit * * @param walk/*from w w w .jav a 2s.c o m*/ * @param commit * @return non-null but possibly empty array of file diffs * @throws MissingObjectException * @throws IncorrectObjectTypeException * @throws CorruptObjectException * @throws IOException */ public static GitFileDiff[] compute(final TreeWalk walk, final RevCommit commit) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { final ArrayList<GitFileDiff> r = new ArrayList<GitFileDiff>(); if (commit.getParentCount() > 0) walk.reset(trees(commit)); else { walk.reset(); walk.addTree(new EmptyTreeIterator()); walk.addTree(commit.getTree()); } if (walk.getTreeCount() <= 2) { List<DiffEntry> entries = DiffEntry.scan(walk); for (DiffEntry entry : entries) { final GitFileDiff d = new GitFileDiff(commit, entry); r.add(d); } } else { // DiffEntry does not support walks with more than two trees final int nTree = walk.getTreeCount(); final int myTree = nTree - 1; while (walk.next()) { if (matchAnyParent(walk, myTree)) continue; final GitFileDiffForMerges d = new GitFileDiffForMerges(commit); d.path = walk.getPathString(); int m0 = 0; for (int i = 0; i < myTree; i++) m0 |= walk.getRawMode(i); final int m1 = walk.getRawMode(myTree); d.change = ChangeType.MODIFY; if (m0 == 0 && m1 != 0) d.change = ChangeType.ADD; else if (m0 != 0 && m1 == 0) d.change = ChangeType.DELETE; else if (m0 != m1 && walk.idEqual(0, myTree)) d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged d.blobs = new ObjectId[nTree]; d.modes = new FileMode[nTree]; for (int i = 0; i < nTree; i++) { d.blobs[i] = walk.getObjectId(i); d.modes[i] = walk.getFileMode(i); } r.add(d); } } final GitFileDiff[] tmp = new GitFileDiff[r.size()]; r.toArray(tmp); return tmp; }
From source file:com.netbeetle.reboot.git.CachedRepository.java
License:Apache License
public TreeWalk openTree(ObjectId treeId, boolean recursive) throws IOException { TreeWalk treeWalk = new TreeWalk(repository.getObjectDatabase().newReader()); treeWalk.reset(treeId); treeWalk.setRecursive(recursive);/*from w w w . ja v a 2 s .c o m*/ return treeWalk; }
From source file:com.smartitengineering.version.impl.jgit.JGitImpl.java
License:Open Source License
protected Set<ObjectId> getGraphForResourceId(String resourceId) throws MissingObjectException, IncorrectObjectTypeException, IOException { final Set<ObjectId> versions = new LinkedHashSet<ObjectId>(); final RevWalk rw = new RevWalk(getReadRepository()); final TreeWalk tw = new TreeWalk(getReadRepository()); rw.markStart(rw.parseCommit(getReadRepository().resolve(Constants.HEAD))); tw.setFilter(TreeFilter.ANY_DIFF);//from ww w . j av a2 s .c o m RevCommit c; while ((c = rw.next()) != null) { final ObjectId[] p = new ObjectId[c.getParentCount() + 1]; for (int i = 0; i < c.getParentCount(); i++) { rw.parseAny(c.getParent(i)); p[i] = c.getParent(i).getTree(); } final int me = p.length - 1; p[me] = c.getTree(); tw.reset(p); while (tw.next()) { if (tw.getFileMode(me).getObjectType() == Constants.OBJ_BLOB) { // This path was modified relative to the ancestor(s) String s = tw.getPathString(); if (s != null && s.equals(resourceId)) { versions.add(tw.getObjectId(me)); } } if (tw.isSubtree()) { // make sure we recurse into modified directories tw.enterSubtree(); } } } return versions; }
From source file:com.tasktop.c2c.server.scm.service.GitBrowseUtil.java
License:Open Source License
private static TreeWalk getTreeOnPath(MutableObjectId id, Repository repo, ObjectId rev, String path) throws MissingObjectException, IOException { RevTree tree = new RevWalk(repo).parseTree(rev); TreeWalk tw = new TreeWalk(repo); tw.reset(tree); tw.setRecursive(false);/*from w w w . ja v a2 s. c o m*/ if (path == null || path.isEmpty() || "/".equals(path)) { id.fromObjectId(tree.getId()); return tw; } PathFilter f = PathFilter.create(path); tw.setFilter(f); while (tw.next()) { if (f.isDone(tw)) { id.fromObjectId(tw.getObjectId(0)); if (tw.isSubtree()) { tw.enterSubtree(); return tw; } else { throw new MissingObjectException(tw.getObjectId(0), Constants.OBJ_TREE); } } else if (tw.isSubtree()) { tw.enterSubtree(); } } return null; }
From source file:com.xiplink.jira.git.FileDiff.java
License:Open Source License
static FileDiff[] compute(final TreeWalk walk, final RevCommit commit) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { final ArrayList<FileDiff> r = new ArrayList<FileDiff>(); if (commit.getParentCount() > 0) { walk.reset(trees(commit)); } else {/*w w w .j a v a 2 s.c om*/ walk.reset(); walk.addTree(new EmptyTreeIterator()); walk.addTree(commit.getTree()); } if (walk.getTreeCount() <= 2) { List<DiffEntry> entries = DiffEntry.scan(walk); int number = 0; for (DiffEntry entry : entries) { final FileDiff d = new FileDiff(commit, entry, number); r.add(d); number++; } } else { // DiffEntry does not support walks with more than two trees final int nTree = walk.getTreeCount(); final int myTree = nTree - 1; while (walk.next()) { if (matchAnyParent(walk, myTree)) { continue; } final FileDiffForMerges d = new FileDiffForMerges(commit); d.path = walk.getPathString(); int m0 = 0; for (int i = 0; i < myTree; i++) { m0 |= walk.getRawMode(i); } final int m1 = walk.getRawMode(myTree); d.change = ChangeType.MODIFY; if (m0 == 0 && m1 != 0) { d.change = ChangeType.ADD; } else if (m0 != 0 && m1 == 0) { d.change = ChangeType.DELETE; } else if (m0 != m1 && walk.idEqual(0, myTree)) { d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged } d.blobs = new ObjectId[nTree]; d.modes = new FileMode[nTree]; for (int i = 0; i < nTree; i++) { d.blobs[i] = walk.getObjectId(i); d.modes[i] = walk.getFileMode(i); } r.add(d); } } final FileDiff[] tmp = new FileDiff[r.size()]; r.toArray(tmp); return tmp; }
From source file:org.eclipse.egit.ui.internal.history.FileDiff.java
License:Open Source License
static FileDiff[] compute(final TreeWalk walk, final RevCommit commit) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { final ArrayList<FileDiff> r = new ArrayList<FileDiff>(); if (commit.getParentCount() > 0) walk.reset(trees(commit)); else {// w w w. j a v a2s . c om walk.reset(); walk.addTree(new EmptyTreeIterator()); walk.addTree(commit.getTree()); } if (walk.getTreeCount() <= 2) { List<DiffEntry> entries = DiffEntry.scan(walk); for (DiffEntry entry : entries) { final FileDiff d = new FileDiff(commit, entry); r.add(d); } } else { // DiffEntry does not support walks with more than two trees final int nTree = walk.getTreeCount(); final int myTree = nTree - 1; while (walk.next()) { if (matchAnyParent(walk, myTree)) continue; final FileDiffForMerges d = new FileDiffForMerges(commit); d.path = walk.getPathString(); int m0 = 0; for (int i = 0; i < myTree; i++) m0 |= walk.getRawMode(i); final int m1 = walk.getRawMode(myTree); d.change = ChangeType.MODIFY; if (m0 == 0 && m1 != 0) d.change = ChangeType.ADD; else if (m0 != 0 && m1 == 0) d.change = ChangeType.DELETE; else if (m0 != m1 && walk.idEqual(0, myTree)) d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged d.blobs = new ObjectId[nTree]; d.modes = new FileMode[nTree]; for (int i = 0; i < nTree; i++) { d.blobs[i] = walk.getObjectId(i); d.modes[i] = walk.getFileMode(i); } r.add(d); } } final FileDiff[] tmp = new FileDiff[r.size()]; r.toArray(tmp); return tmp; }
From source file:org.flowerplatform.web.git.history.internal.FileDiff.java
License:Open Source License
/** * Computer file diffs for specified tree walk and commit * * @param walk//from ww w .j a v a2s . com * @param commit * @param markTreeFilters optional filters for marking entries, see {@link #isMarked(int)} * @return non-null but possibly empty array of file diffs * @throws MissingObjectException * @throws IncorrectObjectTypeException * @throws CorruptObjectException * @throws IOException */ public static FileDiff[] compute(final TreeWalk walk, final RevCommit commit, final TreeFilter... markTreeFilters) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { final ArrayList<FileDiff> r = new ArrayList<FileDiff>(); if (commit.getParentCount() > 0) walk.reset(trees(commit)); else { walk.reset(); walk.addTree(new EmptyTreeIterator()); walk.addTree(commit.getTree()); } if (walk.getTreeCount() <= 2) { List<DiffEntry> entries = DiffEntry.scan(walk, false, markTreeFilters); for (DiffEntry entry : entries) { final FileDiff d = new FileDiff(commit, entry); r.add(d); } } else { // DiffEntry does not support walks with more than two trees final int nTree = walk.getTreeCount(); final int myTree = nTree - 1; TreeFilterMarker treeFilterMarker = new TreeFilterMarker(markTreeFilters); while (walk.next()) { if (matchAnyParent(walk, myTree)) continue; int treeFilterMarks = treeFilterMarker.getMarks(walk); final FileDiffForMerges d = new FileDiffForMerges(commit, treeFilterMarks); d.path = walk.getPathString(); int m0 = 0; for (int i = 0; i < myTree; i++) m0 |= walk.getRawMode(i); final int m1 = walk.getRawMode(myTree); d.change = ChangeType.MODIFY; if (m0 == 0 && m1 != 0) d.change = ChangeType.ADD; else if (m0 != 0 && m1 == 0) d.change = ChangeType.DELETE; else if (m0 != m1 && walk.idEqual(0, myTree)) d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged d.blobs = new ObjectId[nTree]; d.modes = new FileMode[nTree]; for (int i = 0; i < nTree; i++) { d.blobs[i] = walk.getObjectId(i); d.modes[i] = walk.getFileMode(i); } r.add(d); } } final FileDiff[] tmp = new FileDiff[r.size()]; r.toArray(tmp); return tmp; }
From source file:org.kie.commons.java.nio.fs.jgit.util.JGitUtil.java
License:Apache License
public static InputStream resolveInputStream(final Git git, final String treeRef, final String path) { checkNotNull("git", git); checkNotEmpty("treeRef", treeRef); checkNotEmpty("path", path); final String gitPath = fixPath(path); RevWalk rw = null;//from ww w .ja v a 2 s . c o m TreeWalk tw = null; try { final ObjectId tree = git.getRepository().resolve(treeRef + "^{tree}"); rw = new RevWalk(git.getRepository()); tw = new TreeWalk(git.getRepository()); tw.setFilter(createFromStrings(singleton(gitPath))); tw.reset(tree); while (tw.next()) { if (tw.isSubtree() && !gitPath.equals(tw.getPathString())) { tw.enterSubtree(); continue; } final ObjectId entid = tw.getObjectId(0); final FileMode entmode = tw.getFileMode(0); final RevObject ro = rw.lookupAny(entid, entmode.getObjectType()); rw.parseBody(ro); final ObjectLoader ldr = git.getRepository().open(ro.getId(), Constants.OBJ_BLOB); return ldr.openStream(); } } catch (final Throwable t) { throw new NoSuchFileException("Can't find '" + gitPath + "' in tree '" + treeRef + "'"); } finally { if (rw != null) { rw.dispose(); } if (tw != null) { tw.release(); } } throw new NoSuchFileException(""); }