From c64412e1f908d054cbd0198c0ac12397aab14c9f Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Thu, 26 Jan 2017 13:38:50 +0900 Subject: [PATCH] Merge FileTreeIteratorJava7Test into FileTreeIteratorTest JGit now requires Java 8, so it is no longer necessary to have a separate class for Java 7 specific tests. Remove it and merge its tests into the existing FileTreeIteratorTest. FileTreeIteratorTest has an @Before annotated method that sets up some files in the git, which breaks the tests which have assumptions on the file names. Add adjustments. Change-Id: I14f88d8e079e1677c8dfbc1fcbf4444ea8265365 Signed-off-by: David Pursehouse Signed-off-by: Matthias Sohn --- .../treewalk/FileTreeIteratorJava7Test.java | 207 ------------------ .../jgit/treewalk/FileTreeIteratorTest.java | 155 ++++++++++++- 2 files changed, 154 insertions(+), 208 deletions(-) delete mode 100644 org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorJava7Test.java diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorJava7Test.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorJava7Test.java deleted file mode 100644 index cd55cbae7a..0000000000 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorJava7Test.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (C) 2012-2013, Robin Rosenberg - * 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.treewalk; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.io.File; -import java.io.IOException; - -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.ResetCommand.ResetType; -import org.eclipse.jgit.dircache.DirCache; -import org.eclipse.jgit.dircache.DirCacheEditor; -import org.eclipse.jgit.dircache.DirCacheEntry; -import org.eclipse.jgit.dircache.DirCacheIterator; -import org.eclipse.jgit.junit.RepositoryTestCase; -import org.eclipse.jgit.lib.Constants; -import org.eclipse.jgit.lib.FileMode; -import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.ObjectInserter; -import org.eclipse.jgit.util.FS; -import org.eclipse.jgit.util.FileUtils; -import org.junit.Test; - -public class FileTreeIteratorJava7Test extends RepositoryTestCase { - @Test - public void testFileModeSymLinkIsNotATree() throws IOException { - org.junit.Assume.assumeTrue(FS.DETECTED.supportsSymlinks()); - FS fs = db.getFS(); - // mål = target in swedish, just to get som unicode in here - writeTrashFile("mål/data", "targetdata"); - fs.createSymLink(new File(trash, "länk"), "mål"); - FileTreeIterator fti = new FileTreeIterator(db); - assertFalse(fti.eof()); - assertEquals("länk", fti.getEntryPathString()); - assertEquals(FileMode.SYMLINK, fti.getEntryFileMode()); - fti.next(1); - assertFalse(fti.eof()); - assertEquals("mål", fti.getEntryPathString()); - assertEquals(FileMode.TREE, fti.getEntryFileMode()); - fti.next(1); - assertTrue(fti.eof()); - } - - @Test - public void testSymlinkNotModifiedThoughNormalized() throws Exception { - DirCache dc = db.lockDirCache(); - DirCacheEditor dce = dc.editor(); - final String UNNORMALIZED = "target/"; - final byte[] UNNORMALIZED_BYTES = Constants.encode(UNNORMALIZED); - try (ObjectInserter oi = db.newObjectInserter()) { - final ObjectId linkid = oi.insert(Constants.OBJ_BLOB, - UNNORMALIZED_BYTES, 0, UNNORMALIZED_BYTES.length); - dce.add(new DirCacheEditor.PathEdit("link") { - @Override - public void apply(DirCacheEntry ent) { - ent.setFileMode(FileMode.SYMLINK); - ent.setObjectId(linkid); - ent.setLength(UNNORMALIZED_BYTES.length); - } - }); - assertTrue(dce.commit()); - } - try (Git git = new Git(db)) { - git.commit().setMessage("Adding link").call(); - git.reset().setMode(ResetType.HARD).call(); - DirCacheIterator dci = new DirCacheIterator(db.readDirCache()); - FileTreeIterator fti = new FileTreeIterator(db); - - // self-check - assertEquals("link", fti.getEntryPathString()); - assertEquals("link", dci.getEntryPathString()); - - // test - assertFalse(fti.isModified(dci.getDirCacheEntry(), true, - db.newObjectReader())); - } - } - - /** - * Like #testSymlinkNotModifiedThoughNormalized but there is no - * normalization being done. - * - * @throws Exception - */ - @Test - public void testSymlinkModifiedNotNormalized() throws Exception { - DirCache dc = db.lockDirCache(); - DirCacheEditor dce = dc.editor(); - final String NORMALIZED = "target"; - final byte[] NORMALIZED_BYTES = Constants.encode(NORMALIZED); - try (ObjectInserter oi = db.newObjectInserter()) { - final ObjectId linkid = oi.insert(Constants.OBJ_BLOB, - NORMALIZED_BYTES, 0, NORMALIZED_BYTES.length); - dce.add(new DirCacheEditor.PathEdit("link") { - @Override - public void apply(DirCacheEntry ent) { - ent.setFileMode(FileMode.SYMLINK); - ent.setObjectId(linkid); - ent.setLength(NORMALIZED_BYTES.length); - } - }); - assertTrue(dce.commit()); - } - try (Git git = new Git(db)) { - git.commit().setMessage("Adding link").call(); - git.reset().setMode(ResetType.HARD).call(); - DirCacheIterator dci = new DirCacheIterator(db.readDirCache()); - FileTreeIterator fti = new FileTreeIterator(db); - - // self-check - assertEquals("link", fti.getEntryPathString()); - assertEquals("link", dci.getEntryPathString()); - - // test - assertFalse(fti.isModified(dci.getDirCacheEntry(), true, - db.newObjectReader())); - } - } - - /** - * Like #testSymlinkNotModifiedThoughNormalized but here the link is - * modified. - * - * @throws Exception - */ - @Test - public void testSymlinkActuallyModified() throws Exception { - org.junit.Assume.assumeTrue(FS.DETECTED.supportsSymlinks()); - final String NORMALIZED = "target"; - final byte[] NORMALIZED_BYTES = Constants.encode(NORMALIZED); - try (ObjectInserter oi = db.newObjectInserter()) { - final ObjectId linkid = oi.insert(Constants.OBJ_BLOB, - NORMALIZED_BYTES, 0, NORMALIZED_BYTES.length); - DirCache dc = db.lockDirCache(); - DirCacheEditor dce = dc.editor(); - dce.add(new DirCacheEditor.PathEdit("link") { - @Override - public void apply(DirCacheEntry ent) { - ent.setFileMode(FileMode.SYMLINK); - ent.setObjectId(linkid); - ent.setLength(NORMALIZED_BYTES.length); - } - }); - assertTrue(dce.commit()); - } - try (Git git = new Git(db)) { - git.commit().setMessage("Adding link").call(); - git.reset().setMode(ResetType.HARD).call(); - - FileUtils.delete(new File(trash, "link"), FileUtils.NONE); - FS.DETECTED.createSymLink(new File(trash, "link"), "newtarget"); - DirCacheIterator dci = new DirCacheIterator(db.readDirCache()); - FileTreeIterator fti = new FileTreeIterator(db); - - // self-check - assertEquals("link", fti.getEntryPathString()); - assertEquals("link", dci.getEntryPathString()); - - // test - assertTrue(fti.isModified(dci.getDirCacheEntry(), true, - db.newObjectReader())); - } - } -} diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java index ef0f2d91f2..193c50f1f1 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, Google Inc. + * Copyright (C) 2008, 2017, Google Inc. * and other copyright owners as documented in the project's IP log. * * This program and the accompanying materials are made available @@ -53,6 +53,7 @@ import java.io.IOException; import java.security.MessageDigest; import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.ResetCommand.ResetType; import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.dircache.DirCacheCheckout; import org.eclipse.jgit.dircache.DirCacheEditor; @@ -68,6 +69,7 @@ import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -653,6 +655,157 @@ public class FileTreeIteratorTest extends RepositoryTestCase { } } + @Test + public void testFileModeSymLinkIsNotATree() throws IOException { + org.junit.Assume.assumeTrue(FS.DETECTED.supportsSymlinks()); + FS fs = db.getFS(); + // mål = target in swedish, just to get som unicode in here + writeTrashFile("mål/data", "targetdata"); + fs.createSymLink(new File(trash, "länk"), "mål"); + FileTreeIterator fti = new FileTreeIterator(db); + assertFalse(fti.eof()); + while (!fti.getEntryPathString().equals("länk")) { + fti.next(1); + } + assertEquals("länk", fti.getEntryPathString()); + assertEquals(FileMode.SYMLINK, fti.getEntryFileMode()); + fti.next(1); + assertFalse(fti.eof()); + assertEquals("mål", fti.getEntryPathString()); + assertEquals(FileMode.TREE, fti.getEntryFileMode()); + fti.next(1); + assertTrue(fti.eof()); + } + + @Test + public void testSymlinkNotModifiedThoughNormalized() throws Exception { + DirCache dc = db.lockDirCache(); + DirCacheEditor dce = dc.editor(); + final String UNNORMALIZED = "target/"; + final byte[] UNNORMALIZED_BYTES = Constants.encode(UNNORMALIZED); + try (ObjectInserter oi = db.newObjectInserter()) { + final ObjectId linkid = oi.insert(Constants.OBJ_BLOB, + UNNORMALIZED_BYTES, 0, UNNORMALIZED_BYTES.length); + dce.add(new DirCacheEditor.PathEdit("link") { + @Override + public void apply(DirCacheEntry ent) { + ent.setFileMode(FileMode.SYMLINK); + ent.setObjectId(linkid); + ent.setLength(UNNORMALIZED_BYTES.length); + } + }); + assertTrue(dce.commit()); + } + try (Git git = new Git(db)) { + git.commit().setMessage("Adding link").call(); + git.reset().setMode(ResetType.HARD).call(); + DirCacheIterator dci = new DirCacheIterator(db.readDirCache()); + FileTreeIterator fti = new FileTreeIterator(db); + + // self-check + while (!fti.getEntryPathString().equals("link")) { + fti.next(1); + } + assertEquals("link", fti.getEntryPathString()); + assertEquals("link", dci.getEntryPathString()); + + // test + assertFalse(fti.isModified(dci.getDirCacheEntry(), true, + db.newObjectReader())); + } + } + + /** + * Like #testSymlinkNotModifiedThoughNormalized but there is no + * normalization being done. + * + * @throws Exception + */ + @Test + public void testSymlinkModifiedNotNormalized() throws Exception { + DirCache dc = db.lockDirCache(); + DirCacheEditor dce = dc.editor(); + final String NORMALIZED = "target"; + final byte[] NORMALIZED_BYTES = Constants.encode(NORMALIZED); + try (ObjectInserter oi = db.newObjectInserter()) { + final ObjectId linkid = oi.insert(Constants.OBJ_BLOB, + NORMALIZED_BYTES, 0, NORMALIZED_BYTES.length); + dce.add(new DirCacheEditor.PathEdit("link") { + @Override + public void apply(DirCacheEntry ent) { + ent.setFileMode(FileMode.SYMLINK); + ent.setObjectId(linkid); + ent.setLength(NORMALIZED_BYTES.length); + } + }); + assertTrue(dce.commit()); + } + try (Git git = new Git(db)) { + git.commit().setMessage("Adding link").call(); + git.reset().setMode(ResetType.HARD).call(); + DirCacheIterator dci = new DirCacheIterator(db.readDirCache()); + FileTreeIterator fti = new FileTreeIterator(db); + + // self-check + while (!fti.getEntryPathString().equals("link")) { + fti.next(1); + } + assertEquals("link", fti.getEntryPathString()); + assertEquals("link", dci.getEntryPathString()); + + // test + assertFalse(fti.isModified(dci.getDirCacheEntry(), true, + db.newObjectReader())); + } + } + + /** + * Like #testSymlinkNotModifiedThoughNormalized but here the link is + * modified. + * + * @throws Exception + */ + @Test + public void testSymlinkActuallyModified() throws Exception { + org.junit.Assume.assumeTrue(FS.DETECTED.supportsSymlinks()); + final String NORMALIZED = "target"; + final byte[] NORMALIZED_BYTES = Constants.encode(NORMALIZED); + try (ObjectInserter oi = db.newObjectInserter()) { + final ObjectId linkid = oi.insert(Constants.OBJ_BLOB, + NORMALIZED_BYTES, 0, NORMALIZED_BYTES.length); + DirCache dc = db.lockDirCache(); + DirCacheEditor dce = dc.editor(); + dce.add(new DirCacheEditor.PathEdit("link") { + @Override + public void apply(DirCacheEntry ent) { + ent.setFileMode(FileMode.SYMLINK); + ent.setObjectId(linkid); + ent.setLength(NORMALIZED_BYTES.length); + } + }); + assertTrue(dce.commit()); + } + try (Git git = new Git(db)) { + git.commit().setMessage("Adding link").call(); + git.reset().setMode(ResetType.HARD).call(); + + FileUtils.delete(new File(trash, "link"), FileUtils.NONE); + FS.DETECTED.createSymLink(new File(trash, "link"), "newtarget"); + DirCacheIterator dci = new DirCacheIterator(db.readDirCache()); + FileTreeIterator fti = new FileTreeIterator(db); + + // self-check + while (!fti.getEntryPathString().equals("link")) { + fti.next(1); + } + assertEquals("link", fti.getEntryPathString()); + assertEquals("link", dci.getEntryPathString()); + + // test + assertTrue(fti.isModified(dci.getDirCacheEntry(), true, + db.newObjectReader())); + } + } private static void assertEntry(String sha1string, String path, TreeWalk tw) throws MissingObjectException, IncorrectObjectTypeException, -- 2.39.5