aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
authorThomas Wolf <twolf@apache.org>2022-07-20 18:30:18 +0200
committerThomas Wolf <twolf@apache.org>2022-08-13 15:14:15 +0200
commitd9c0629ffe45ba96f853672268c391dd7caa82fe (patch)
tree53acdb88cb1e00225c959ef4d4cf556b936ab585 /org.eclipse.jgit.test
parent1ee0b9b79fed6746d32e69bf7bd0264b718395a6 (diff)
downloadjgit-d9c0629ffe45ba96f853672268c391dd7caa82fe.tar.gz
jgit-d9c0629ffe45ba96f853672268c391dd7caa82fe.zip
Fix adding symlinks to the index when core.symlinks=false
With core.symlinks=false, symlinks are checked out as plain files. When such a file is re-added to the index, and the index already contains a symlink there, add the file as a symlink. Previous code changed the index entry to a regular file. Bug: 580412 Change-Id: I5497bedc3da89c8b10120b8077c56bc5b67cb791 Signed-off-by: Thomas Wolf <twolf@apache.org>
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
index 5dfdfcfe6b..57661a7eca 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
@@ -15,13 +15,16 @@ import static org.eclipse.jgit.util.FileUtils.RECURSIVE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.file.Files;
import java.util.Set;
+import org.eclipse.jgit.api.ResetCommand.ResetType;
import org.eclipse.jgit.api.errors.FilterFailedException;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.NoFilepatternException;
@@ -34,6 +37,7 @@ import org.eclipse.jgit.junit.RepositoryTestCase;
import org.eclipse.jgit.lfs.BuiltinLFS;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.CoreConfig.SymLinks;
import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
@@ -100,6 +104,43 @@ public class AddCommandTest extends RepositoryTestCase {
}
@Test
+ public void testAddLink() throws IOException, GitAPIException {
+ assumeTrue(db.getFS().supportsSymlinks());
+ try (Git git = new Git(db)) {
+ writeTrashFile("a.txt", "a");
+ File link = new File(db.getWorkTree(), "link");
+ db.getFS().createSymLink(link, "a.txt");
+ git.add().addFilepattern(".").call();
+ assertEquals(
+ "[a.txt, mode:100644, content:a][link, mode:120000, content:a.txt]",
+ indexState(CONTENT));
+ git.commit().setMessage("link").call();
+ StoredConfig config = db.getConfig();
+ config.setEnum(ConfigConstants.CONFIG_CORE_SECTION, null,
+ ConfigConstants.CONFIG_KEY_SYMLINKS, SymLinks.FALSE);
+ config.save();
+ Files.delete(link.toPath());
+ git.reset().setMode(ResetType.HARD).call();
+ assertTrue(Files.isRegularFile(link.toPath()));
+ assertEquals(
+ "[a.txt, mode:100644, content:a][link, mode:120000, content:a.txt]",
+ indexState(CONTENT));
+ writeTrashFile("link", "b.txt");
+ git.add().addFilepattern("link").call();
+ assertEquals(
+ "[a.txt, mode:100644, content:a][link, mode:120000, content:b.txt]",
+ indexState(CONTENT));
+ config.setEnum(ConfigConstants.CONFIG_CORE_SECTION, null,
+ ConfigConstants.CONFIG_KEY_SYMLINKS, SymLinks.TRUE);
+ config.save();
+ git.add().addFilepattern("link").call();
+ assertEquals(
+ "[a.txt, mode:100644, content:a][link, mode:100644, content:b.txt]",
+ indexState(CONTENT));
+ }
+ }
+
+ @Test
public void testCleanFilter() throws IOException, GitAPIException {
writeTrashFile(".gitattributes", "*.txt filter=tstFilter");
writeTrashFile("src/a.tmp", "foo");