Browse Source
This has been deprecated for some time now. Applications should instead use DirCache within a TreeWalk. Change-Id: I8099d93f07139c33fe09bdeef8d739782397da17 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>stable-0.12
Shawn O. Pearce
14 years ago
4 changed files with 0 additions and 606 deletions
@ -1,162 +0,0 @@
|
||||
/* |
||||
* Copyright (C) 2007, Dave Watson <dwatson@mimvista.com> |
||||
* Copyright (C) 2006, Shawn O. Pearce <spearce@spearce.org> |
||||
* and other copyright owners as documented in the project's IP log. |
||||
* |
||||
* This program and the accompanying materials are made available |
||||
* under the terms of the Eclipse Distribution License v1.0 which |
||||
* accompanies this distribution, is reproduced below, and is |
||||
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or |
||||
* without modification, are permitted provided that the following |
||||
* conditions are met: |
||||
* |
||||
* - Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* - Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following |
||||
* disclaimer in the documentation and/or other materials provided |
||||
* with the distribution. |
||||
* |
||||
* - Neither the name of the Eclipse Foundation, Inc. nor the |
||||
* names of its contributors may be used to endorse or promote |
||||
* products derived from this software without specific prior |
||||
* written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
*/ |
||||
|
||||
package org.eclipse.jgit.lib; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
import static org.junit.Assert.assertTrue; |
||||
import static org.junit.Assert.fail; |
||||
|
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
import java.util.ArrayList; |
||||
|
||||
import org.eclipse.jgit.lib.GitIndex.Entry; |
||||
import org.junit.Test; |
||||
|
||||
public class IndexTreeWalkerTest extends RepositoryTestCase { |
||||
private ArrayList<String> treeOnlyEntriesVisited = new ArrayList<String>(); |
||||
private ArrayList<String> bothVisited = new ArrayList<String>(); |
||||
private ArrayList<String> indexOnlyEntriesVisited = new ArrayList<String>(); |
||||
|
||||
private class TestIndexTreeVisitor extends AbstractIndexTreeVisitor { |
||||
public void visitEntry(TreeEntry treeEntry, Entry indexEntry, File file) { |
||||
if (treeEntry == null) |
||||
indexOnlyEntriesVisited.add(indexEntry.getName()); |
||||
else if (indexEntry == null) |
||||
treeOnlyEntriesVisited.add(treeEntry.getFullName()); |
||||
else bothVisited.add(indexEntry.getName()); |
||||
} |
||||
} |
||||
|
||||
/* |
||||
* Need to think about what I really need to be able to do.... |
||||
* |
||||
* 1) Visit all entries in index and tree |
||||
* 2) Get all directories that exist in the index, but not in the tree |
||||
* -- I'm pretty sure that I don't need to do the other way around |
||||
* because I already |
||||
*/ |
||||
|
||||
@Test |
||||
public void testTreeOnlyOneLevel() throws IOException { |
||||
GitIndex index = new GitIndex(db); |
||||
Tree tree = new Tree(db); |
||||
tree.addFile("foo"); |
||||
tree.addFile("bar"); |
||||
|
||||
new IndexTreeWalker(index, tree, trash, new TestIndexTreeVisitor()).walk(); |
||||
|
||||
assertTrue(treeOnlyEntriesVisited.get(0).equals("bar")); |
||||
assertTrue(treeOnlyEntriesVisited.get(1).equals("foo")); |
||||
} |
||||
|
||||
@Test |
||||
public void testIndexOnlyOneLevel() throws IOException { |
||||
GitIndex index = new GitIndex(db); |
||||
Tree tree = new Tree(db); |
||||
|
||||
index.add(trash, writeTrashFile("foo", "foo")); |
||||
index.add(trash, writeTrashFile("bar", "bar")); |
||||
new IndexTreeWalker(index, tree, trash, new TestIndexTreeVisitor()).walk(); |
||||
|
||||
assertTrue(indexOnlyEntriesVisited.get(0).equals("bar")); |
||||
assertTrue(indexOnlyEntriesVisited.get(1).equals("foo")); |
||||
} |
||||
|
||||
@Test |
||||
public void testBoth() throws IOException { |
||||
GitIndex index = new GitIndex(db); |
||||
Tree tree = new Tree(db); |
||||
|
||||
index.add(trash, writeTrashFile("a", "a")); |
||||
tree.addFile("b/b"); |
||||
index.add(trash, writeTrashFile("c", "c")); |
||||
tree.addFile("c"); |
||||
|
||||
new IndexTreeWalker(index, tree, trash, new TestIndexTreeVisitor()).walk(); |
||||
assertTrue(indexOnlyEntriesVisited.contains("a")); |
||||
assertTrue(treeOnlyEntriesVisited.contains("b/b")); |
||||
assertTrue(bothVisited.contains("c")); |
||||
|
||||
} |
||||
|
||||
@Test |
||||
public void testIndexOnlySubDirs() throws IOException { |
||||
GitIndex index = new GitIndex(db); |
||||
Tree tree = new Tree(db); |
||||
|
||||
index.add(trash, writeTrashFile("foo/bar/baz", "foobar")); |
||||
index.add(trash, writeTrashFile("asdf", "asdf")); |
||||
new IndexTreeWalker(index, tree, trash, new TestIndexTreeVisitor()).walk(); |
||||
|
||||
assertEquals("asdf", indexOnlyEntriesVisited.get(0)); |
||||
assertEquals("foo/bar/baz", indexOnlyEntriesVisited.get(1)); |
||||
} |
||||
|
||||
@Test |
||||
public void testLeavingTree() throws IOException { |
||||
GitIndex index = new GitIndex(db); |
||||
index.add(trash, writeTrashFile("foo/bar", "foo/bar")); |
||||
index.add(trash, writeTrashFile("foobar", "foobar")); |
||||
|
||||
new IndexTreeWalker(index, db.mapTree(index.writeTree()), trash, new AbstractIndexTreeVisitor() { |
||||
@Override |
||||
public void visitEntry(TreeEntry entry, Entry indexEntry, File f) { |
||||
if (entry == null || indexEntry == null) |
||||
fail(); |
||||
} |
||||
|
||||
@Override |
||||
public void finishVisitTree(Tree tree, int i, String curDir) |
||||
throws IOException { |
||||
if (tree.memberCount() == 0) |
||||
fail(); |
||||
if (i == 0) |
||||
fail(); |
||||
} |
||||
|
||||
}).walk(); |
||||
} |
||||
} |
@ -1,82 +0,0 @@
|
||||
/* |
||||
* Copyright (C) 2007, Dave Watson <dwatson@mimvista.com> |
||||
* Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> |
||||
* Copyright (C) 2006, Shawn O. Pearce <spearce@spearce.org> |
||||
* and other copyright owners as documented in the project's IP log. |
||||
* |
||||
* This program and the accompanying materials are made available |
||||
* under the terms of the Eclipse Distribution License v1.0 which |
||||
* accompanies this distribution, is reproduced below, and is |
||||
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or |
||||
* without modification, are permitted provided that the following |
||||
* conditions are met: |
||||
* |
||||
* - Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* - Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following |
||||
* disclaimer in the documentation and/or other materials provided |
||||
* with the distribution. |
||||
* |
||||
* - Neither the name of the Eclipse Foundation, Inc. nor the |
||||
* names of its contributors may be used to endorse or promote |
||||
* products derived from this software without specific prior |
||||
* written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
*/ |
||||
|
||||
package org.eclipse.jgit.lib; |
||||
|
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
|
||||
import org.eclipse.jgit.lib.GitIndex.Entry; |
||||
|
||||
/** |
||||
* Implementation of IndexTreeVisitor that can be subclassed if you don't |
||||
* case about certain events |
||||
* @author dwatson |
||||
* |
||||
* @deprecated Use {@link org.eclipse.jgit.treewalk.TreeWalk} instead, with a |
||||
* {@link org.eclipse.jgit.dircache.DirCacheIterator} as one of the members. |
||||
*/ |
||||
@Deprecated |
||||
public class AbstractIndexTreeVisitor implements IndexTreeVisitor { |
||||
public void finishVisitTree(Tree tree, Tree auxTree, String curDir) |
||||
throws IOException { |
||||
// Empty
|
||||
} |
||||
|
||||
public void finishVisitTree(Tree tree, int i, String curDir) |
||||
throws IOException { |
||||
// Empty
|
||||
} |
||||
|
||||
public void visitEntry(TreeEntry treeEntry, Entry indexEntry, File file) |
||||
throws IOException { |
||||
// Empty
|
||||
} |
||||
|
||||
public void visitEntry(TreeEntry treeEntry, TreeEntry auxEntry, |
||||
Entry indexEntry, File file) throws IOException { |
||||
// Empty
|
||||
} |
||||
} |
@ -1,107 +0,0 @@
|
||||
/* |
||||
* Copyright (C) 2007, Dave Watson <dwatson@mimvista.com> |
||||
* Copyright (C) 2007-2008, Robin Rosenberg <robin.rosenberg@dewire.com> |
||||
* Copyright (C) 2006, Shawn O. Pearce <spearce@spearce.org> |
||||
* and other copyright owners as documented in the project's IP log. |
||||
* |
||||
* This program and the accompanying materials are made available |
||||
* under the terms of the Eclipse Distribution License v1.0 which |
||||
* accompanies this distribution, is reproduced below, and is |
||||
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or |
||||
* without modification, are permitted provided that the following |
||||
* conditions are met: |
||||
* |
||||
* - Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* - Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following |
||||
* disclaimer in the documentation and/or other materials provided |
||||
* with the distribution. |
||||
* |
||||
* - Neither the name of the Eclipse Foundation, Inc. nor the |
||||
* names of its contributors may be used to endorse or promote |
||||
* products derived from this software without specific prior |
||||
* written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
*/ |
||||
|
||||
package org.eclipse.jgit.lib; |
||||
|
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
|
||||
import org.eclipse.jgit.lib.GitIndex.Entry; |
||||
|
||||
/** |
||||
* Visitor interface for traversing the index and two trees in parallel. |
||||
* |
||||
* When merging we deal with up to two tree nodes and a base node. Then |
||||
* we figure out what to do. |
||||
* |
||||
* A File argument is supplied to allow us to check for modifications in |
||||
* a work tree or update the file. |
||||
* |
||||
* @deprecated Use {@link org.eclipse.jgit.treewalk.TreeWalk} instead, with |
||||
* a {@link org.eclipse.jgit.dircache.DirCacheIterator} as a member. |
||||
*/ |
||||
@Deprecated |
||||
public interface IndexTreeVisitor { |
||||
/** |
||||
* Visit a blob, and corresponding tree and index entries. |
||||
* |
||||
* @param treeEntry |
||||
* @param indexEntry |
||||
* @param file |
||||
* @throws IOException |
||||
*/ |
||||
public void visitEntry(TreeEntry treeEntry, Entry indexEntry, File file) throws IOException; |
||||
|
||||
/** |
||||
* Visit a blob, and corresponding tree nodes and associated index entry. |
||||
* |
||||
* @param treeEntry |
||||
* @param auxEntry |
||||
* @param indexEntry |
||||
* @param file |
||||
* @throws IOException |
||||
*/ |
||||
public void visitEntry(TreeEntry treeEntry, TreeEntry auxEntry, Entry indexEntry, File file) throws IOException; |
||||
|
||||
/** |
||||
* Invoked after handling all child nodes of a tree, during a three way merge |
||||
* |
||||
* @param tree |
||||
* @param auxTree |
||||
* @param curDir |
||||
* @throws IOException |
||||
*/ |
||||
public void finishVisitTree(Tree tree, Tree auxTree, String curDir) throws IOException; |
||||
|
||||
/** |
||||
* Invoked after handling all child nodes of a tree, during two way merge. |
||||
* |
||||
* @param tree |
||||
* @param i |
||||
* @param curDir |
||||
* @throws IOException |
||||
*/ |
||||
public void finishVisitTree(Tree tree, int i, String curDir) throws IOException; |
||||
} |
@ -1,255 +0,0 @@
|
||||
/* |
||||
* Copyright (C) 2007, Dave Watson <dwatson@mimvista.com> |
||||
* Copyright (C) 2007-2009, Robin Rosenberg <robin.rosenberg@dewire.com> |
||||
* Copyright (C) 2006, Shawn O. Pearce <spearce@spearce.org> |
||||
* and other copyright owners as documented in the project's IP log. |
||||
* |
||||
* This program and the accompanying materials are made available |
||||
* under the terms of the Eclipse Distribution License v1.0 which |
||||
* accompanies this distribution, is reproduced below, and is |
||||
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or |
||||
* without modification, are permitted provided that the following |
||||
* conditions are met: |
||||
* |
||||
* - Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* - Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following |
||||
* disclaimer in the documentation and/or other materials provided |
||||
* with the distribution. |
||||
* |
||||
* - Neither the name of the Eclipse Foundation, Inc. nor the |
||||
* names of its contributors may be used to endorse or promote |
||||
* products derived from this software without specific prior |
||||
* written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
*/ |
||||
|
||||
package org.eclipse.jgit.lib; |
||||
|
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
|
||||
import org.eclipse.jgit.JGitText; |
||||
import org.eclipse.jgit.lib.GitIndex.Entry; |
||||
|
||||
/** |
||||
* A class for traversing the index and one or two trees. |
||||
* |
||||
* A visitor is invoked for executing actions, like figuring out how to merge. |
||||
* |
||||
* @deprecated Use {@link org.eclipse.jgit.treewalk.TreeWalk} with multiple |
||||
* iterators, such as {@link org.eclipse.jgit.dircache.DirCacheIterator}, |
||||
* {@link org.eclipse.jgit.treewalk.FileTreeIterator}, and a native tree |
||||
* {@link org.eclipse.jgit.treewalk.TreeWalk#addTree(AnyObjectId)}. |
||||
*/ |
||||
@Deprecated |
||||
public class IndexTreeWalker { |
||||
private final Tree mainTree; |
||||
private final Tree newTree; |
||||
private final File root; |
||||
private final IndexTreeVisitor visitor; |
||||
private boolean threeTrees; |
||||
|
||||
/** |
||||
* Construct a walker for the index and one tree. |
||||
* |
||||
* @param index |
||||
* @param tree |
||||
* @param root |
||||
* @param visitor |
||||
*/ |
||||
public IndexTreeWalker(GitIndex index, Tree tree, File root, IndexTreeVisitor visitor) { |
||||
this.mainTree = tree; |
||||
this.root = root; |
||||
this.visitor = visitor; |
||||
this.newTree = null; |
||||
|
||||
threeTrees = false; |
||||
|
||||
indexMembers = index.getMembers(); |
||||
} |
||||
|
||||
/** |
||||
* Construct a walker for the index and two trees. |
||||
* |
||||
* @param index |
||||
* @param mainTree |
||||
* @param newTree |
||||
* @param root |
||||
* @param visitor |
||||
*/ |
||||
public IndexTreeWalker(GitIndex index, Tree mainTree, Tree newTree, File root, IndexTreeVisitor visitor) { |
||||
this.mainTree = mainTree; |
||||
this.newTree = newTree; |
||||
this.root = root; |
||||
this.visitor = visitor; |
||||
|
||||
threeTrees = true; |
||||
|
||||
indexMembers = index.getMembers(); |
||||
} |
||||
|
||||
Entry[] indexMembers; |
||||
int indexCounter = 0; |
||||
|
||||
/** |
||||
* Actually walk the index tree |
||||
* |
||||
* @throws IOException |
||||
*/ |
||||
public void walk() throws IOException { |
||||
walk(mainTree, newTree); |
||||
} |
||||
|
||||
private void walk(Tree tree, Tree auxTree) throws IOException { |
||||
TreeIterator mi = new TreeIterator(tree, TreeIterator.Order.POSTORDER); |
||||
TreeIterator ai = new TreeIterator(auxTree, TreeIterator.Order.POSTORDER); |
||||
TreeEntry m = mi.hasNext() ? mi.next() : null; |
||||
TreeEntry a = ai.hasNext() ? ai.next() : null; |
||||
int curIndexPos = indexCounter; |
||||
Entry i = indexCounter < indexMembers.length ? indexMembers[indexCounter++] : null; |
||||
while (m != null || a != null || i != null) { |
||||
int cmpma = compare(m, a); |
||||
int cmpmi = compare(m, i); |
||||
int cmpai = compare(a, i); |
||||
|
||||
TreeEntry pm = cmpma <= 0 && cmpmi <= 0 ? m : null; |
||||
TreeEntry pa = cmpma >= 0 && cmpai <= 0 ? a : null; |
||||
Entry pi = cmpmi >= 0 && cmpai >= 0 ? i : null; |
||||
|
||||
if (pi != null) |
||||
visitEntry(pm, pa, pi); |
||||
else |
||||
finishVisitTree(pm, pa, curIndexPos); |
||||
|
||||
if (pm != null) m = mi.hasNext() ? mi.next() : null; |
||||
if (pa != null) a = ai.hasNext() ? ai.next() : null; |
||||
if (pi != null) i = indexCounter < indexMembers.length ? indexMembers[indexCounter++] : null; |
||||
} |
||||
} |
||||
|
||||
private void visitEntry(TreeEntry t1, TreeEntry t2, |
||||
Entry i) throws IOException { |
||||
|
||||
assert t1 != null || t2 != null || i != null : JGitText.get().needsAtLeastOneEntry; |
||||
assert root != null : JGitText.get().needsWorkdir; |
||||
|
||||
if (t1 != null && t1.getParent() == null) |
||||
t1 = null; |
||||
if (t2 != null && t2.getParent() == null) |
||||
t2 = null; |
||||
|
||||
File f = null; |
||||
if (i != null) |
||||
f = new File(root, i.getName()); |
||||
else if (t1 != null) |
||||
f = new File(root, t1.getFullName()); |
||||
else if (t2 != null) |
||||
f = new File(root, t2.getFullName()); |
||||
|
||||
if (t1 != null || t2 != null || i != null) |
||||
if (threeTrees) |
||||
visitor.visitEntry(t1, t2, i, f); |
||||
else |
||||
visitor.visitEntry(t1, i, f); |
||||
} |
||||
|
||||
private void finishVisitTree(TreeEntry t1, TreeEntry t2, int curIndexPos) |
||||
throws IOException { |
||||
|
||||
assert t1 != null || t2 != null : JGitText.get().needsAtLeastOneEntry; |
||||
assert root != null : JGitText.get().needsWorkdir; |
||||
|
||||
if (t1 != null && t1.getParent() == null) |
||||
t1 = null; |
||||
if (t2 != null && t2.getParent() == null) |
||||
t2 = null; |
||||
|
||||
File f = null; |
||||
String c= null; |
||||
if (t1 != null) { |
||||
c = t1.getFullName(); |
||||
f = new File(root, c); |
||||
} else if (t2 != null) { |
||||
c = t2.getFullName(); |
||||
f = new File(root, c); |
||||
} |
||||
if (t1 instanceof Tree || t2 instanceof Tree) |
||||
if (threeTrees) |
||||
visitor.finishVisitTree((Tree)t1, (Tree)t2, c); |
||||
else |
||||
visitor.finishVisitTree((Tree)t1, indexCounter - curIndexPos, c); |
||||
else if (t1 != null || t2 != null) |
||||
if (threeTrees) |
||||
visitor.visitEntry(t1, t2, null, f); |
||||
else |
||||
visitor.visitEntry(t1, null, f); |
||||
} |
||||
|
||||
static boolean lt(TreeEntry h, Entry i) { |
||||
return compare(h, i) < 0; |
||||
} |
||||
|
||||
static boolean lt(Entry i, TreeEntry t) { |
||||
return compare(t, i) > 0; |
||||
} |
||||
|
||||
static boolean lt(TreeEntry h, TreeEntry m) { |
||||
return compare(h, m) < 0; |
||||
} |
||||
|
||||
static boolean eq(TreeEntry t1, TreeEntry t2) { |
||||
return compare(t1, t2) == 0; |
||||
} |
||||
|
||||
static boolean eq(TreeEntry t1, Entry e) { |
||||
return compare(t1, e) == 0; |
||||
} |
||||
|
||||
static int compare(TreeEntry t, Entry i) { |
||||
if (t == null && i == null) |
||||
return 0; |
||||
if (t == null) |
||||
return 1; |
||||
if (i == null) |
||||
return -1; |
||||
return Tree.compareNames(t.getFullNameUTF8(), i.getNameUTF8(), TreeEntry.lastChar(t), TreeEntry.lastChar(i)); |
||||
} |
||||
|
||||
static int compare(TreeEntry t1, TreeEntry t2) { |
||||
if (t1 != null && t1.getParent() == null && t2 != null && t2.getParent() == null) |
||||
return 0; |
||||
if (t1 != null && t1.getParent() == null) |
||||
return -1; |
||||
if (t2 != null && t2.getParent() == null) |
||||
return 1; |
||||
|
||||
if (t1 == null && t2 == null) |
||||
return 0; |
||||
if (t1 == null) |
||||
return 1; |
||||
if (t2 == null) |
||||
return -1; |
||||
return Tree.compareNames(t1.getFullNameUTF8(), t2.getFullNameUTF8(), TreeEntry.lastChar(t1), TreeEntry.lastChar(t2)); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue