Browse Source

Merge branch 'stable-2.2'

* stable-2.2:
  DirCacheIterator: Fix reset() and back()
  Cleanup unused import and Java 6 syntax in Archive

Change-Id: Icc59b28a4066c4781ea8d6270dfe20eb63b4185e
stable-2.3
Robin Rosenberg 12 years ago
parent
commit
fbdf76d1cc
  1. 5
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Archive.java
  2. 128
      org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheIteratorTest.java
  3. 18
      org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheIterator.java
  4. 5
      org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java

5
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Archive.java

@ -51,7 +51,6 @@ import java.util.EnumMap;
import java.util.Map; import java.util.Map;
import java.text.MessageFormat; import java.text.MessageFormat;
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
@ -129,12 +128,10 @@ class Archive extends TextBuiltin {
static { static {
Map<Format, Archiver> fmts = new EnumMap<Format, Archiver>(Format.class); Map<Format, Archiver> fmts = new EnumMap<Format, Archiver>(Format.class);
fmts.put(Format.ZIP, new Archiver() { fmts.put(Format.ZIP, new Archiver() {
@Override
public ArchiveOutputStream createArchiveOutputStream(OutputStream s) { public ArchiveOutputStream createArchiveOutputStream(OutputStream s) {
return new ZipArchiveOutputStream(s); return new ZipArchiveOutputStream(s);
} }
@Override
public void putEntry(String path, FileMode mode, // public void putEntry(String path, FileMode mode, //
ObjectLoader loader, ArchiveOutputStream out) // ObjectLoader loader, ArchiveOutputStream out) //
throws IOException { throws IOException {
@ -154,12 +151,10 @@ class Archive extends TextBuiltin {
} }
}); });
fmts.put(Format.TAR, new Archiver() { fmts.put(Format.TAR, new Archiver() {
@Override
public ArchiveOutputStream createArchiveOutputStream(OutputStream s) { public ArchiveOutputStream createArchiveOutputStream(OutputStream s) {
return new TarArchiveOutputStream(s); return new TarArchiveOutputStream(s);
} }
@Override
public void putEntry(String path, FileMode mode, // public void putEntry(String path, FileMode mode, //
ObjectLoader loader, ArchiveOutputStream out) // ObjectLoader loader, ArchiveOutputStream out) //
throws IOException { throws IOException {

128
org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheIteratorTest.java vendored

@ -55,6 +55,7 @@ import java.util.Collections;
import org.eclipse.jgit.junit.JGitTestUtil; import org.eclipse.jgit.junit.JGitTestUtil;
import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.RepositoryTestCase; import org.eclipse.jgit.lib.RepositoryTestCase;
import org.eclipse.jgit.treewalk.AbstractTreeIterator;
import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.TreeWalk;
import org.eclipse.jgit.treewalk.filter.PathFilterGroup; import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.FS;
@ -252,6 +253,133 @@ public class DirCacheIteratorTest extends RepositoryTestCase {
assertEquals(paths.length, pathIdx); assertEquals(paths.length, pathIdx);
} }
@Test
public void testReset() throws Exception {
final DirCache dc = DirCache.newInCore();
final FileMode mode = FileMode.REGULAR_FILE;
final String[] paths = { "a.", "a/b", "a/c/e", "a/c/f", "a/d", "a0b" };
final DirCacheEntry[] ents = new DirCacheEntry[paths.length];
for (int i = 0; i < paths.length; i++) {
ents[i] = new DirCacheEntry(paths[i]);
ents[i].setFileMode(mode);
}
final DirCacheBuilder b = dc.builder();
for (int i = 0; i < ents.length; i++)
b.add(ents[i]);
b.finish();
DirCacheIterator dci = new DirCacheIterator(dc);
assertFalse(dci.eof());
assertEquals("a.", dci.getEntryPathString());
dci.next(1);
assertFalse(dci.eof());
assertEquals("a", dci.getEntryPathString());
dci.next(1);
assertFalse(dci.eof());
assertEquals("a0b", dci.getEntryPathString());
dci.next(1);
assertTrue(dci.eof());
// same entries the second time
dci.reset();
assertFalse(dci.eof());
assertEquals("a.", dci.getEntryPathString());
dci.next(1);
assertFalse(dci.eof());
assertEquals("a", dci.getEntryPathString());
dci.next(1);
assertFalse(dci.eof());
assertEquals("a0b", dci.getEntryPathString());
dci.next(1);
assertTrue(dci.eof());
// Step backwards
dci.back(1);
assertFalse(dci.eof());
assertEquals("a0b", dci.getEntryPathString());
dci.back(1);
assertFalse(dci.eof());
assertEquals("a", dci.getEntryPathString());
dci.back(1);
assertFalse(dci.eof());
assertEquals("a.", dci.getEntryPathString());
assertTrue(dci.first());
// forward
assertFalse(dci.eof());
assertEquals("a.", dci.getEntryPathString());
dci.next(1);
assertFalse(dci.eof());
assertEquals("a", dci.getEntryPathString());
dci.next(1);
assertFalse(dci.eof());
assertEquals("a0b", dci.getEntryPathString());
dci.next(1);
assertTrue(dci.eof());
// backwqrd halways, and forward again
dci.back(1);
assertFalse(dci.eof());
assertEquals("a0b", dci.getEntryPathString());
dci.back(1);
assertFalse(dci.eof());
assertEquals("a", dci.getEntryPathString());
dci.next(1);
assertFalse(dci.eof());
assertEquals("a0b", dci.getEntryPathString());
dci.next(1);
assertTrue(dci.eof());
dci.reset(); // a.
dci.next(1); // a
AbstractTreeIterator sti = dci.createSubtreeIterator(null);
assertEquals("a/b", sti.getEntryPathString());
sti.next(1);
assertEquals("a/c", sti.getEntryPathString());
sti.next(1);
assertEquals("a/d", sti.getEntryPathString());
sti.back(2);
assertEquals("a/b", sti.getEntryPathString());
}
@Test
public void testBackBug396127() throws Exception {
final DirCache dc = DirCache.newInCore();
final FileMode mode = FileMode.REGULAR_FILE;
final String[] paths = { "git-gui/po/fr.po",
"git_remote_helpers/git/repo.py" };
final DirCacheEntry[] ents = new DirCacheEntry[paths.length];
for (int i = 0; i < paths.length; i++) {
ents[i] = new DirCacheEntry(paths[i]);
ents[i].setFileMode(mode);
}
final DirCacheBuilder b = dc.builder();
for (int i = 0; i < ents.length; i++)
b.add(ents[i]);
b.finish();
DirCacheIterator dci = new DirCacheIterator(dc);
assertFalse(dci.eof());
assertEquals("git-gui", dci.getEntryPathString());
dci.next(1);
assertFalse(dci.eof());
assertEquals("git_remote_helpers", dci.getEntryPathString());
dci.back(1);
assertFalse(dci.eof());
assertEquals("git-gui", dci.getEntryPathString());
dci.next(1);
assertEquals("git_remote_helpers", dci.getEntryPathString());
dci.next(1);
assertTrue(dci.eof());
}
@Test @Test
public void testTwoLevelSubtree_FilterPath() throws Exception { public void testTwoLevelSubtree_FilterPath() throws Exception {
final DirCache dc = DirCache.newInCore(); final DirCache dc = DirCache.newInCore();

18
org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheIterator.java vendored

@ -169,6 +169,9 @@ public class DirCacheIterator extends AbstractTreeIterator {
public void reset() { public void reset() {
if (!first()) { if (!first()) {
ptr = treeStart; ptr = treeStart;
nextSubtreePos = 0;
currentEntry = null;
currentSubtree = null;
if (!eof()) if (!eof())
parseEntry(); parseEntry();
} }
@ -203,16 +206,29 @@ public class DirCacheIterator extends AbstractTreeIterator {
if (currentSubtree != null) if (currentSubtree != null)
nextSubtreePos--; nextSubtreePos--;
ptr--; ptr--;
parseEntry(); parseEntry(false);
if (currentSubtree != null) if (currentSubtree != null)
ptr -= currentSubtree.getEntrySpan() - 1; ptr -= currentSubtree.getEntrySpan() - 1;
} }
} }
private void parseEntry() { private void parseEntry() {
parseEntry(true);
}
private void parseEntry(boolean forward) {
currentEntry = cache.getEntry(ptr); currentEntry = cache.getEntry(ptr);
final byte[] cep = currentEntry.path; final byte[] cep = currentEntry.path;
if (!forward) {
if (nextSubtreePos > 0) {
final DirCacheTree p = tree.getChild(nextSubtreePos - 1);
if (p.contains(cep, pathOffset, cep.length)) {
nextSubtreePos--;
currentSubtree = p;
}
}
}
if (nextSubtreePos != tree.getChildCount()) { if (nextSubtreePos != tree.getChildCount()) {
final DirCacheTree s = tree.getChild(nextSubtreePos); final DirCacheTree s = tree.getChild(nextSubtreePos);
if (s.contains(cep, pathOffset, cep.length)) { if (s.contains(cep, pathOffset, cep.length)) {

5
org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java vendored

@ -552,4 +552,9 @@ public class DirCacheTree {
return aPos; return aPos;
return -1; return -1;
} }
@Override
public String toString() {
return getNameString();
}
} }

Loading…
Cancel
Save