summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Add mergetool merge feature (execute external tool)Andre Bossert2022-05-2511-185/+847
| | | | | | | | | | | | | | | | | see: https://git-scm.com/docs/git-mergetool * implement mergetool merge function (execute external tool) * add ExecutionResult and commandExecutionError to ToolException * handle "base not present" case (empty or null base file path) * handle deleted (rm) and modified (add) conflicts * handle settings * keepBackup * keepTemporaries * writeToTemp Bug: 356832 Change-Id: Id323c2fcb1c24d12ceb299801df8bac51a6d463f Signed-off-by: Andre Bossert <andre.bossert@siemens.com>
* Add command line support for "git mergetool"Andre Bossert2022-05-2516-171/+1269
| | | | | | | | | | | | | | | | | see: https://git-scm.com/docs/git-mergetool see: https://git-scm.com/docs/git-config * add command line support for "git mergetool" * add option handling for "--tool-help", "--tool=<mytool>", "--[no-]prompt", "--[no-]gui" * handle prompt * add MergeTools * add pre-defined mergetools * print merge actions --> no execute, will be done later Bug: 356832 Change-Id: I6e505ffc3d03f75ecf4bba452a25d25dfcf5793f Signed-off-by: Andre Bossert <andre.bossert@siemens.com>
* Add config reader for user-defined mergetoolsAndre Bossert2022-05-256-4/+483
| | | | | | | | | | | | | | | | | | | see: https://git-scm.com/docs/git-mergetool see: https://git-scm.com/docs/git-config * add config reader for user-defined mergetools * merge.tool * merge.guitool * mergetool.prompt * mergetool.keepBackup * mergetool.keepTemporaries * mergetool.writeToTemp * mergetool.<tool>.path * mergetool.<tool>.cmd * mergetool.<tool>.trustExitCode Bug: 356832 Change-Id: Ic4f07376630713d8e06cbad284d9c72c9ecc0405 Signed-off-by: Andre Bossert <andre.bossert@siemens.com>
* Add difftool compare feature (execute external tool)Andre Bossert2022-05-2512-97/+894
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | see: http://git-scm.com/docs/git-difftool * add CommandExecutor that handles tool execution with help of "jgit.FS" * it handles tool execution with temporary created "command file" --> for for all "command interpreters" and parameters with spaces etc. * using of external bash.exe at Windows (MinGW) if shell-script is used as difftool command. It can be enabled with parameter "jgit.usemsys2bash=auto" that checks if command contains ".sh" or enabled / disabled with "jgit.usemsys2bash=true|false" * added special handling for empty files (e.g. deleted, added etc.) that are named "/dev/null" * added creation and deletion of temporary files needed for compare * added own Exception class for reporting to pgm / command line / EGit * added prompt option handling before executing difftool * reworked trustExitCode option for specific difftool and override for all difftools from config and command line * tested with command line options "--[no]-trust-exit-code", "--tool=<toolname>", "--[no]-gui", --[no]-prompt * ContentSource * added close() methods to close / cleanup used resources (like ObjectReader TreeWalk etc.) * added isWorkingTreeSource() methods to check if file can be used from working tree instead of copy from "ObjectLoader / ObjectReader" to temporary file (fixes "difftool <commit> <commit>") Bug: 356832 Change-Id: I5462fb6dbe4ecfd9da7c74117fce4070bbfd4d7a Signed-off-by: Andre Bossert <andre.bossert@siemens.com> Signed-off-by: Simeon Andreev <simeon.danailov.andreev@gmail.com>
* Update Orbit to S20220517184036Matthias Sohn2022-05-259-71/+71
| | | | | | | | | and - net.i2p.crypto.eddsa to 0.3.0.v20220506-1020 - org.bouncycastle.bcpg to 1.70.0.v20220507-1208 - org.bouncycastle.bcprov to 1.70.0.v20220507-1208 Change-Id: Ifc450da0a9b469629b7d3a7e4194a2bc8a2a4403
* PackFileSnapshot: Resolve warnings by using "equals" instead of "=="Fabio Ponciroli2022-05-202-1/+39
| | | | | | | | | Errorprone raises the following warning: "[ReferenceEquality] Comparison using reference equality instead of value equality" Added Equality#isSameInstance util method to be reused in similar cases. Change-Id: Ifc9885c9806dcafa1c5ee1351d3095bf1517dbf5
* Remove stray files (probes or lock files) created by background threadsJames Z.M. Gao2022-05-153-9/+39
| | | | | | | | | | | | | | | | | On process exit, it was possible that the filesystem timestamp resolution measurement left behind .probe files or even a lock file for the jgit.config. Ensure the SAVE_RUNNER is shut down when the process exits (via System.exit() or otherwise). Move lf.lock() into the try-finally block when saving the config file. Delete .probe files on JVM shutdown -- they are created in daemon threads that may terminate abruptly, not executing the "finally" clause that normally removes these files. Bug: 579445 Change-Id: Ie27aca1fdaddfa487ebe072c3913d78355910df8
* Merge branch 'stable-6.2'Matthias Sohn2022-05-094-23/+56
|\ | | | | | | | | | | | | * stable-6.2: HTTP Smart: set correct HTTP status on error Change-Id: I7bf99b0c720f9dabb65da5cc777281a1d227f5a8
| * Merge branch 'stable-6.1' into stable-6.2Matthias Sohn2022-05-094-23/+56
| |\ | | | | | | | | | | | | | | | | | | * stable-6.1: HTTP Smart: set correct HTTP status on error Change-Id: I792d6cdfe9e76a3d2e6d1e01ec1dc96805ed2900
| | * HTTP Smart: set correct HTTP status on errorSven Selberg2022-05-094-23/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previous behavior was that status code was automatically set to 200 regardless of reported status and according to HTTP Smart protocol[1]: If there is no repository at $GIT_URL, or the resource pointed to by a location matching $GIT_URL does not exist, the server MUST NOT respond with 200 OK response. A server SHOULD respond with 404 Not Found, 410 Gone, or any other suitable HTTP status code which does not imply the resource exists as requested. Since the jgit HTTP client isn't able to handle reading content from a response reporting an error (calling HttpURLConnection#getInputStream on a "failed" connection throws an exception and the internal interface HttpConnection does not expose HttpURLConnection#getErrorStream) the SmartClientSmartServerTest needed to be rewritten to expect the generic response messages. [1] https://git-scm.com/docs/http-protocol#_general_request_processing Bug: 579676 Change-Id: Ibb942d02124a0bc279df09600b091354019ce064
* | | Merge branch 'stable-6.2'Matthias Sohn2022-05-050-0/+0
|\| | | | | | | | | | | | | | | | | | | | | | | * stable-6.2: Prepare 6.2.0-SNAPSHOT builds JGit v6.2.0.202205041315-m2 Change-Id: Ia5180f086ac07fe6fa0e68d233ddb963010945b6
| * | Prepare 6.2.0-SNAPSHOT buildsMatthias Sohn2022-05-0591-125/+125
| | | | | | | | | | | | Change-Id: Ic3788b38d6408e83729caa718c128a5632798a60
| * | JGit v6.2.0.202205041315-m2v6.2.0.202205041315-m2Matthias Sohn2022-05-0491-125/+125
|/ / | | | | | | | | Change-Id: Ie13beac020e79182a4058ba67550bb78b2008833 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Update list of 3rd party dependenciesMatthias Sohn2022-05-031-24/+26
| | | | | | | | Change-Id: I4f8f8ede8b4c788ce2b4db174df4cc1d35350542
* | Add target platforms for eclipse 4.23 (2022-03) and 4.24 (2022-06)Matthias Sohn2022-05-034-0/+210
| | | | | | | | Change-Id: I6481a0e6e989b8ceefeecced0d7d8609a24d0c9f
* | Update Orbit to I20220502200629Matthias Sohn2022-05-0215-33/+102
| | | | | | | | | | | | | | and - com.jcraft.jzlib to 1.1.3.v20220502-1820 Change-Id: I7694f1b793f598c3adb96b5223a5f7b5783a35ec
* | [sshd] Better user feedback on authentication failureThomas Wolf2022-05-0112-61/+586
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When authentication fails, JGit produces an exception with an error message telling the user that it could not log in (including the host name). The causal chain has an SshException from Apache MINA sshd with message "No more authentication methods available". This is not very helpful. The user was left without any indication why authentication failed. Include in the exception message a log of all attempted authentications. That way, the user can see which keys were tried, in which order and with which signature algorithms. The log also reports authentication attempts for gssapi-with-mic or password authentication. For keyboard-interactive Apache MINA sshd is lacking a callback interface. The way Apache MINA sshd loads keys from files, the file names are lost in higher layers. Add a mechanism to record on the session for each key fingerprint the file it was loaded from, if any. That way the exception message can refer to keys by file name, which is easier to understand by users than the rather cryptic key fingerprints. Bug: 571390 Change-Id: Ic4b6ce6b99f307d5e798fcc91b16b9ffd995d224 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Lazy loading of .lfsconfig.Matthias Fromme2022-04-301-21/+41
| | | | | | | | | | | | | | | | Load the '.lfsconfig ' on access instead of trying to load it unconditionally each time an LFS filter is applied. Bug 578020 Change-Id: I986d4e61a736fc83cf00e62a08d8413c6bb53f78
* | [releng] bump japicmp base versionThomas Wolf2022-04-251-1/+1
| | | | | | | | | | | | Bump the japicmp base version to 6.1.0.202203080745-r. Change-Id: I54a9ae339fbe2a3a02f438f794caa22c8cbcd02c Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | RefSpec: add missing @sinceThomas Wolf2022-04-251-0/+1
| | | | | | | | | | | | New API needs an @since 6.2 annotation. Change-Id: I16b01ea820cc651605166acc13591b515541d06b Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | De-couple ServiceLoader calls from class loadingThomas Wolf2022-04-142-28/+65
| | | | | | | | | | | | | | | | | | Use the holder pattern to de-couple the loading of super classes from the ServiceLoader calls to set up global instances. This prevents potential lock inversions. Bug: 579550 Change-Id: Ie8284e4d6d680ddd4cc6a486bbefe8ed00266240 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | CommitCommand: call GpgSigner.getDefault() only if indeed signingThomas Wolf2022-04-141-8/+8
| | | | | | | | | | | | If we're not signing the commit, we don't need the GpgSigner at all. Change-Id: Ica35651c73d82b7604c8a67487b0d9474c908aae Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | GpgSigner: prevent class lock inversion on the default signerThomas Wolf2022-04-141-14/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't store the default signer in a static field of the abstract superclass GpgSigner. This many lead to a lock inversion on the class initialization locks if there are concurrent loads of the GpgSigner class and of one of its subclasses, and that subclass happens to be the one the ServiceLoader wants to load. Use the holder pattern to de-couple the loading of class GpgSigner from the ServiceLoader call. Bug: 579550 Change-Id: Ifac0ea0c8985a09fe0518d0dabc072fafd6db907 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Fetch: Introduce negative refspecs.yunjieli2022-04-137-8/+211
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implement negative refspecs in JGit fetch, following C Git. Git supports negative refspecs in source only while this change supports them in both source and destination. If one branch is equal to any branch or matches any pattern in the negative refspecs collection, the branch will not be fetched even if it's in the toFetch collection. With this feature, users can express more complex patterns during fetch. Change-Id: Iaa1cd4de5c08c273e198b72e12e3dadae7be709f Sign-off-by: Yunjie Li<yunjieli@google.com>
* | Merge "Add GetRefsBenchmark for testing refs lookups"Han-Wen NIenhuys2022-04-051-0/+181
|\ \
| * | Add GetRefsBenchmark for testing refs lookupsLuca Milanesio2022-04-011-0/+181
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce a new benchmark that shows a typical use-case of opening a cached repository and fetching one ref from a repository with a high number of refs. This specific benchmark is tailored to the Gerrit use-case of reading frequently individual refs SHA1s and by ref-name prefix from the All-Users repository. Include the following variables for the benchmark: - numBranches (from 100 up to 50000) - trustFolderStat (true or false) - useRefTable (true or false) The benchmark needs to be evaluated on a local high-perf SSD and on a slower NFS network disk. Bug: 576165 Change-Id: Ie59a87ca9f0191ff30229688e3430332e2f59a4f
* | | BaseSearch: Suppress ReferenceEquality WarningsFabio Ponciroli2022-04-021-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | Errorprone raises the following warning: "[ReferenceEquality] Comparison using reference equality instead of value equality" Change-Id: Ib7542506dcdf5a0c7775a99a2c0972930d622879
* | | RewriteGenerator: Suppress ReferenceEquality WarningsFabio Ponciroli2022-04-011-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | Errorprone raises the following warning: "[ReferenceEquality] Comparison using reference equality instead of value equality" Change-Id: Idfe3f044730019fb49dccee25a0563c6fc01fc6a
* | | PlotCommit: Suppress ReferenceEquality WarningsFabio Ponciroli2022-04-011-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | Errorprone raises the following warning: "[ReferenceEquality] Comparison using reference equality instead of value equality" Change-Id: Ia0dc2df68c77e40ff509a2c39568abce92525ee9
* | | PlotCommitList: Suppress ReferenceEquality WarningsFabio Ponciroli2022-04-011-0/+4
|/ / | | | | | | | | | | | | | | | | | | | | | | Errorprone raises the following warning: "[ReferenceEquality] Comparison using reference equality instead of value equality" A single pointer comparison is fine here. A comparison with 'equals' would complicate the code and also impact performance. Change-Id: I6677dfc483acb95a64afbf433fd2b9460e408264
* | [pgm tests] Relax version constraints for hamcrestMatthias Sohn2022-03-301-1/+1
| | | | | | | | | | | | | | | | We updated hamcrest to 2.2. but there is no need to prevent that older versions of hamcrest can be used. Hence relax the lower bound to 1.1 like in other bundles. Change-Id: I3f2f270d2aabc7d742a585d2fc7f0bce283e2a64
* | Use git config core.commentCharThomas Wolf2022-03-267-34/+258
| | | | | | | | | | | | | | | | | | | | | | | | | | This concerns committing, creating merge conflict messages and creating and editing squash messages. In a squash message, once the comment character has been determined initially is always the first character. Note that if core.commentChar=auto and there is a sequence of squashes, it may be necessary to change the comment character when a new message is added. Bug: 579325 Change-Id: Idca19284a0240cd322e7512ea299a03658e1b2c1 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | CommitConfig: add support for core.commentCharThomas Wolf2022-03-263-2/+190
| | | | | | | | | | | | | | | | | | Provide access to the core.commentChar git config, and provide a utility method to determine an unused comment character if the setting is "auto". Bug: 579325 Change-Id: I1ec7e4deffea6ac5929a8538a624d73bb59e4ecc Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | [push, lfs] Tell the pre-push hook whether the push is a dry runThomas Wolf2022-03-233-5/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a feature that does not exist in C git: an external pre-push hook doesn't know whether the push is run as a dry run. But for internal hooks written in Java it is entirely possible to give a hook this information. In JGit with its internal LFS implementation, this enables us to not perform LFS uploads in a dry run. This is kind of important because EGit frequently does a dry-run before doing the actual push to give the user a way to review what would be pushed before it actually happens. Doing an LFS upload of potentially huge files during a dry-run is wasteful, makes the dry run not actually a dry run, and leads to uploading the same file twice if followed by a real push. Use the information in the LfsPrePushHook to only do the initial call to the LFS server, but then skipping the actual upload if the push is a dry run. That way, a failure to contact the LFS server leads to an error in the dry run, as it should. Bug: 546567 Change-Id: I155430f27c4979d91096ba72fd95c3775dd3f28b Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Merge changes I5df54a92,Iecc61d1cMatthias Sohn2022-03-224-52/+154
|\ \ | | | | | | | | | | | | | | | * changes: LsRemoteCommand: apply url.*.insteadOf Factor out URL replacement from RemoteConfig
| * | LsRemoteCommand: apply url.*.insteadOfThomas Wolf2022-03-152-6/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If LsRemoteCommand is used without repository, the remote URI was not translated. If the git user config contains e.g. [url "ssh://git@github.com/"] insteadOf = https://github.com/ and LsRemoteCommand is called with an HTTPS GitHub repository URL, the command should actually rewrite this to an SSH URI and use the SSH transport. Actually this same problem may exist everywhere Transport is used with an URIish instead of with a remote name. However, doing this translation in Transport.open(URIish) and in Transport.open(Repository, URIish, String) if no remote name is given would change the behavior and might break assumptions made in existing clients. For instance, EGit's PushOperation assumes that the URI obtained from PushResult.getURI() was the same as was passed in to Transport.open(Repository, URIish). URIs obtained from a RemoteConfig have this translation applied transparently, and in Transport we cannot know for sure whether or not a URI has already been translated, if needed. So doing this in Transport might also lead to translating URIs twice. Therefore this commit does the translation in LsRemoteCommand, where we can be sure that it won't affect other use cases. If other cases besides LsRemoteCommand are found where such a URI translation is missing, it'll have to be done at higher levels, possibly even in client code directly. Bug: 544769 Change-Id: I5df54a925d30b55d98e21f37f2851fe79649b064 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
| * | Factor out URL replacement from RemoteConfigThomas Wolf2022-03-152-46/+124
| | | | | | | | | | | | | | | | | | | | | Add a new UrlConfig that encapsulates the basic URL replacement logic for git configs url.<base>.insteadOf and pushInsteadof. Change-Id: Iecc61d1c5e6089533552afa1d1e684ae72393b38 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | LFS: clean up messagesThomas Wolf2022-03-212-4/+2
| | | | | | | | | | | | | | | | | | Remove an unused message, and remove unnecessary quotes. Change-Id: I9da3eeb3db33324fa07bebd434bca3c0a4da27ab Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | DirCacheCheckout: use a LinkedHashMap instead of HashMapThomas Wolf2022-03-192-10/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This guarantees that updates are checked out in git order, which is important for LFS if a .lfsconfig file is used. That file comes early in git order, and the LFS smudge filter will consider the working tree version. To ensure that on branch switches the correct version of that file is used, the checkout order must be stable and should be the git order. Change-Id: I20f6d11bf08558f9d5adfd2be71e36321460038c Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | Re-try reading a file when there are concurrent writesThomas Wolf2022-03-193-107/+168
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Git and JGit are very careful to replace git files atomically when writing. The normal mechanism for this is to write to a temporary file and then to rename it atomically to the final destination. This works fine on POSIX-compliant systems, but on systems where renaming may not be atomic, exceptions may be thrown if code tries to read the file while the rename is still ongoing. This happens in particular on Windows, where the typical symptom is that a FileNotFoundException with message "The process cannot access the file because it is being used by another process" is thrown, but file.isFile() == true at the same time. In FileBasedConfig, a re-try was already implemented for this case. But the same problem can also occur in other places, for instance in RefDirectory when reading loose or packed refs. Additionally, JGit has similar re-tries when a stale NFS file handle is detected, but that mechanism wasn't used consistently (only for git configs and packed refs, but not for loose refs). Factor out the general re-try mechanism for reading into a new method FileUtils.readWithRetry() and use that in all three places. The re-try parameters are hardcoded: at most 5 times for stale NFS handles, and at most 5 times with increasing backoff delays (50, 100, 200, 400, and 800ms) for the above concurrent write case. Bug: 579116 Change-Id: If0c2ad367446d3c0f32b509274cf8e814aca12cf Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | [sideband] Ensure last bit of progress channel is writtenThomas Wolf2022-03-194-7/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | If the last sideband progress message didn't end in \r or \n, there may still be a buffered message at the end of a fetch or push. Ensure that message gets written, too, even if it may be only partial. Bug: 575629 Change-Id: I38edccb5cffb89e00e468480b43c7d951fb63e8e Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | Add tests for SideBandInputStreamThomas Wolf2022-03-191-0/+212
| | | | | | | | | | | | | | | Bug: 575629 Change-Id: I4591a64a2c07c7841417ec7a5c7883134ffda1be Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | WinPipeConnector: Resolve warnings by using "equals" instead of "=="Fabio Ponciroli2022-03-171-1/+1
|/ / | | | | | | | | | | | | Errorprone raises the following warning: "[ReferenceEquality] Comparison using reference equality instead of value equality". Change-Id: Ic73305b2af628f66e7659ea1b839b3a640e3cd8d
* | Fix MANIFEST.MF in the LFS bundlesThomas Wolf2022-03-122-0/+2
| | | | | | | | | | | | | | Somehow new dependencies added in commit a229072f got lost when merging stable-6.1 into master. Change-Id: I19c16c6be73d07e05f37241a44cf25133ff467a5 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Update Tycho to 2.6.0Matthias Sohn2022-03-092-2/+2
| | | | | | | | Change-Id: Ic8b2b352721040ccc0164cf0c8637102518e5ce9
* | Merge branch 'stable-6.1'Matthias Sohn2022-03-0929-358/+1808
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-6.1: Prepare 6.1.1-SNAPSHOT builds JGit v6.1.0.202203080745-r [checkout] Use .gitattributes from the commit to be checked out Don't use final for method parameters [push] support the "matching" RefSpecs ":" and "+:" [push] Call the pre-push hook later in the push process IndexDiff: use tree filter also for SubmoduleWalk Run license check with option -Ddash.projectId=technology.jgit Exclude transitive dependencies of sshd-sftp Update DEPENDENCIES for 6.1.0 release Add dependency to dash-licenses Fix typos of some keys in LfsText Sort LfsText entries alphabetically Support for "lfs.url" from ".lfsconfig" Change-Id: I1b9f0c0ed647837e00b9640d235dbfab2329c5a6
| * Prepare 6.1.1-SNAPSHOT buildsMatthias Sohn2022-03-0891-527/+527
| | | | | | | | Change-Id: Ifc80355025d8459245843be1c24dc5a286913e77
| * JGit v6.1.0.202203080745-rv6.1.0.202203080745-rMatthias Sohn2022-03-0891-125/+125
| | | | | | | | | | Change-Id: I8766ed400020c9571f321bbbfe34b0688af0107d Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * [checkout] Use .gitattributes from the commit to be checked outThomas Wolf2022-03-077-145/+489
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * Don't use final for method parametersMatthias Sohn2022-03-063-20/+14
| | | | | | | | | | | | See https://wiki.eclipse.org/EGit/Contributor_Guide#Use_of_the_.22final.22_modifier Change-Id: Idc6ed85483e381689e5085c4a1bacd75d26f5489