jgit/org.eclipse.jgit.test
Thomas Wolf f26ab4ebee [checkout] Use .gitattributes from the commit to be checked out
JGit used only one set of attributes constructed from the global and
info attributes, plus the attributes from working tree, index, and
HEAD.

These attributes must be used to determine whether the working tree is
dirty.

But for actually checking out a file, one must use the attributes from
global, info, and *the commit to be checked out*. Otherwise one may not
pick up definitions that are only in the .gitattributes of the commit
to be checked out or that are changed in that commit with respect to
the attributes currently in HEAD, the index, or the working tree.

Maintain in TreeWalk different Attributes per tree, and add operations
to determine EOL handling and smudge filters per tree.

Use the new methods in DirCacheCheckout and ResolveMerger. Note that
merging in JGit actually used the attributes from the base, not those
from ours, which looks dubious at least. It now uses those from ours,
and for checking out the ones from theirs.

The canBeContentMerged() determination was also done from the base
attributes, and is newly done from the ours attributes. Possibly this
should take into account all three attributes, and only if all three
agree the item can be content merged, a content merge should be
attempted? (What if the binary/text setting changes between base, ours,
or theirs?)

Also note that JGit attempts to perform content merges on non-binary
LFS files; there it used the filter attribute from base, too, even for
the ours and theirs versions. Newly it takes the filter attribute from
the correct tree. I'm not convinced doing content merges on potentially
huge files like LFS files is really a good idea.

Add tests in FilterCommandsTest and LfsGitTest to verify the behavior.

Open question: using index and working tree as fallback for the
attributes of ours (assuming it is HEAD) is OK. But does it also make
sense for base and theirs in merging?

Bug: 578707
Change-Id: I0bf433e9e3eb28479b6272e17c0666e175e67d08
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2022-03-07 18:45:25 +01:00
..
.settings Enable compiler option --release 2021-09-29 17:13:01 +02:00
META-INF Prepare 6.1.0-SNAPSHOT builds 2022-03-02 22:28:46 +01:00
exttst/org/eclipse/jgit Add a cgit interoperability test for LockFile 2021-05-09 22:49:19 +02:00
findBugs [spotbugs] Silence CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE in jgit tests 2020-12-22 10:53:00 +01:00
src/org/eclipse/jgit Decouple JSch from JGit Core 2020-06-01 01:46:59 +02:00
tst/org/eclipse/jgit [checkout] Use .gitattributes from the commit to be checked out 2022-03-07 18:45:25 +01:00
tst-rsrc Use slf4j-simple instead of log4j for logging 2021-12-31 01:09:52 +01:00
.classpath Bump minimum required Java version to 11 2021-09-29 17:12:12 +02:00
.gitignore Fix test setup for Eclipse Photon and greater 2018-11-02 18:50:26 +01:00
.project Remove references to org.eclipse.jgit.java7 2016-08-05 11:22:27 +09:00
BUILD ExternalToolTest: Rename class name to usual name for test cases 2022-01-20 06:52:13 +01:00
build.properties Use slf4j-simple instead of log4j for logging 2021-12-31 01:09:52 +01:00
org.eclipse.jgit.core--All-Tests (Java 11) (de).launch Bump minimum required Java version to 11 2021-09-29 17:12:12 +02:00
org.eclipse.jgit.core--All-Tests (Java 11).launch Bump minimum required Java version to 11 2021-09-29 17:12:12 +02:00
org.eclipse.jgit.core--All-Tests.launch
org.eclipse.jgit.test-WalkEncryptionTest-Proxy.launch Adding AES Walk Encryption support in http://www.jets3t.org/ mode 2015-10-18 19:14:31 +00:00
org.eclipse.jgit.test-WalkEncryptionTest.launch Adding AES Walk Encryption support in http://www.jets3t.org/ mode 2015-10-18 19:14:31 +00:00
plugin.properties Fix bundle localization of Apache SSH bundle 2019-06-21 17:54:06 +02:00
pom.xml Prepare 6.1.0-SNAPSHOT builds 2022-03-02 22:28:46 +01:00
tests.bzl Use slf4j-simple instead of log4j for logging 2021-12-31 01:09:52 +01:00