]> source.dussan.org Git - jgit.git/log
jgit.git
2 years agoAdd config reader for user-defined mergetools 42/137942/40
Andre Bossert [Fri, 8 Mar 2019 20:32:57 +0000 (21:32 +0100)]
Add config reader for user-defined mergetools

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>
2 years agoAdd difftool compare feature (execute external tool) 75/137575/44
Andre Bossert [Sun, 19 Jan 2020 19:50:14 +0000 (20:50 +0100)]
Add difftool compare feature (execute external tool)

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>
2 years agoUpdate Orbit to S20220517184036 12/193612/1
Matthias Sohn [Tue, 24 May 2022 22:10:30 +0000 (00:10 +0200)]
Update Orbit to S20220517184036

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

2 years agoPackFileSnapshot: Resolve warnings by using "equals" instead of "==" 40/192040/5
Fabio Ponciroli [Thu, 17 Mar 2022 21:49:22 +0000 (22:49 +0100)]
PackFileSnapshot: Resolve warnings by using "equals" instead of "=="

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

2 years agoRemove stray files (probes or lock files) created by background threads 63/192563/4
James Z.M. Gao [Thu, 7 Apr 2022 16:29:39 +0000 (00:29 +0800)]
Remove stray files (probes or lock files) created by background threads

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

2 years agoMerge branch 'stable-6.2' 52/193252/1
Matthias Sohn [Mon, 9 May 2022 20:10:13 +0000 (22:10 +0200)]
Merge branch 'stable-6.2'

* stable-6.2:
  HTTP Smart: set correct HTTP status on error

Change-Id: I7bf99b0c720f9dabb65da5cc777281a1d227f5a8

2 years agoMerge branch 'stable-6.1' into stable-6.2 51/193251/1
Matthias Sohn [Mon, 9 May 2022 20:09:05 +0000 (22:09 +0200)]
Merge branch 'stable-6.1' into stable-6.2

* stable-6.1:
  HTTP Smart: set correct HTTP status on error

Change-Id: I792d6cdfe9e76a3d2e6d1e01ec1dc96805ed2900

2 years agoHTTP Smart: set correct HTTP status on error 77/192677/13
Sven Selberg [Tue, 12 Apr 2022 09:36:58 +0000 (11:36 +0200)]
HTTP Smart: set correct HTTP status on error

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

2 years agoMerge branch 'stable-6.2' 33/193133/1
Matthias Sohn [Thu, 5 May 2022 11:49:22 +0000 (13:49 +0200)]
Merge branch 'stable-6.2'

* stable-6.2:
  Prepare 6.2.0-SNAPSHOT builds
  JGit v6.2.0.202205041315-m2

Change-Id: Ia5180f086ac07fe6fa0e68d233ddb963010945b6

2 years agoPrepare 6.2.0-SNAPSHOT builds 32/193132/1
Matthias Sohn [Thu, 5 May 2022 11:39:09 +0000 (13:39 +0200)]
Prepare 6.2.0-SNAPSHOT builds

Change-Id: Ic3788b38d6408e83729caa718c128a5632798a60

2 years agoJGit v6.2.0.202205041315-m2 18/193118/1 v6.2.0.202205041315-m2
Matthias Sohn [Wed, 4 May 2022 17:25:04 +0000 (19:25 +0200)]
JGit v6.2.0.202205041315-m2

Change-Id: Ie13beac020e79182a4058ba67550bb78b2008833
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2 years agoUpdate list of 3rd party dependencies 97/193097/1
Matthias Sohn [Tue, 3 May 2022 21:09:22 +0000 (23:09 +0200)]
Update list of 3rd party dependencies

Change-Id: I4f8f8ede8b4c788ce2b4db174df4cc1d35350542

2 years agoAdd target platforms for eclipse 4.23 (2022-03) and 4.24 (2022-06) 63/193063/2
Matthias Sohn [Mon, 2 May 2022 21:12:13 +0000 (23:12 +0200)]
Add target platforms for eclipse 4.23 (2022-03) and 4.24 (2022-06)

Change-Id: I6481a0e6e989b8ceefeecced0d7d8609a24d0c9f

2 years agoUpdate Orbit to I20220502200629 62/193062/1
Matthias Sohn [Mon, 2 May 2022 20:59:51 +0000 (22:59 +0200)]
Update Orbit to I20220502200629

and
- com.jcraft.jzlib to 1.1.3.v20220502-1820

Change-Id: I7694f1b793f598c3adb96b5223a5f7b5783a35ec

2 years ago[sshd] Better user feedback on authentication failure 33/192433/2
Thomas Wolf [Fri, 1 Apr 2022 14:56:05 +0000 (16:56 +0200)]
[sshd] Better user feedback on authentication failure

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>
2 years agoLazy loading of .lfsconfig. 55/192455/3
Matthias Fromme [Mon, 4 Apr 2022 04:45:22 +0000 (06:45 +0200)]
Lazy loading of .lfsconfig.

Load the '.lfsconfig ' on access instead of trying to load it
unconditionally each time an LFS filter is applied.

Bug 578020
Change-Id: I986d4e61a736fc83cf00e62a08d8413c6bb53f78

2 years ago[releng] bump japicmp base version 84/192884/1
Thomas Wolf [Mon, 25 Apr 2022 05:56:52 +0000 (07:56 +0200)]
[releng] bump japicmp base version

Bump the japicmp base version to 6.1.0.202203080745-r.

Change-Id: I54a9ae339fbe2a3a02f438f794caa22c8cbcd02c
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoRefSpec: add missing @since 83/192883/1
Thomas Wolf [Mon, 25 Apr 2022 05:45:55 +0000 (07:45 +0200)]
RefSpec: add missing @since

New API needs an @since 6.2 annotation.

Change-Id: I16b01ea820cc651605166acc13591b515541d06b
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoDe-couple ServiceLoader calls from class loading 51/192451/2
Thomas Wolf [Sun, 3 Apr 2022 19:06:57 +0000 (21:06 +0200)]
De-couple ServiceLoader calls from class loading

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>
2 years agoCommitCommand: call GpgSigner.getDefault() only if indeed signing 50/192450/2
Thomas Wolf [Sun, 3 Apr 2022 18:33:37 +0000 (20:33 +0200)]
CommitCommand: call GpgSigner.getDefault() only if indeed signing

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>
2 years agoGpgSigner: prevent class lock inversion on the default signer 49/192449/2
Thomas Wolf [Sun, 3 Apr 2022 18:11:29 +0000 (20:11 +0200)]
GpgSigner: prevent class lock inversion on the default signer

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>
2 years agoFetch: Introduce negative refspecs. 96/192296/23
yunjieli [Mon, 28 Mar 2022 21:47:02 +0000 (14:47 -0700)]
Fetch: Introduce negative refspecs.

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>
2 years agoMerge "Add GetRefsBenchmark for testing refs lookups"
Han-Wen NIenhuys [Tue, 5 Apr 2022 11:33:51 +0000 (07:33 -0400)]
Merge "Add GetRefsBenchmark for testing refs lookups"

2 years agoBaseSearch: Suppress ReferenceEquality Warnings 49/191749/5
Fabio Ponciroli [Thu, 10 Mar 2022 19:07:57 +0000 (20:07 +0100)]
BaseSearch: Suppress ReferenceEquality Warnings

Errorprone raises the following warning:
"[ReferenceEquality] Comparison using reference equality
instead of value equality"

Change-Id: Ib7542506dcdf5a0c7775a99a2c0972930d622879

2 years agoRewriteGenerator: Suppress ReferenceEquality Warnings 47/191747/5
Fabio Ponciroli [Thu, 10 Mar 2022 18:58:14 +0000 (19:58 +0100)]
RewriteGenerator: Suppress ReferenceEquality Warnings

Errorprone raises the following warning:
"[ReferenceEquality] Comparison using reference equality
instead of value equality"

Change-Id: Idfe3f044730019fb49dccee25a0563c6fc01fc6a

2 years agoPlotCommit: Suppress ReferenceEquality Warnings 64/191764/5
Fabio Ponciroli [Fri, 11 Mar 2022 09:03:30 +0000 (10:03 +0100)]
PlotCommit: Suppress ReferenceEquality Warnings

Errorprone raises the following warning:
"[ReferenceEquality] Comparison using reference equality
instead of value equality"

Change-Id: Ia0dc2df68c77e40ff509a2c39568abce92525ee9

2 years agoPlotCommitList: Suppress ReferenceEquality Warnings 34/191734/7
Fabio Ponciroli [Thu, 10 Mar 2022 16:37:37 +0000 (17:37 +0100)]
PlotCommitList: Suppress ReferenceEquality Warnings

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

2 years agoAdd GetRefsBenchmark for testing refs lookups 83/185683/17
Luca Milanesio [Tue, 21 Sep 2021 23:38:24 +0000 (00:38 +0100)]
Add GetRefsBenchmark for testing refs lookups

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

2 years ago[pgm tests] Relax version constraints for hamcrest 01/192201/2
Matthias Sohn [Wed, 16 Mar 2022 15:32:06 +0000 (16:32 +0100)]
[pgm tests] Relax version constraints for hamcrest

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

2 years agoUse git config core.commentChar 64/192064/2
Thomas Wolf [Sun, 23 Jan 2022 14:43:24 +0000 (15:43 +0100)]
Use git config core.commentChar

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>
2 years agoCommitConfig: add support for core.commentChar 63/192063/2
Thomas Wolf [Sat, 22 Jan 2022 16:00:32 +0000 (17:00 +0100)]
CommitConfig: add support for core.commentChar

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>
2 years ago[push, lfs] Tell the pre-push hook whether the push is a dry run 30/191930/3
Thomas Wolf [Sun, 20 Feb 2022 23:20:52 +0000 (00:20 +0100)]
[push, lfs] Tell the pre-push hook whether the push is a dry run

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>
2 years agoMerge changes I5df54a92,Iecc61d1c
Matthias Sohn [Tue, 22 Mar 2022 16:15:33 +0000 (12:15 -0400)]
Merge changes I5df54a92,Iecc61d1c

* changes:
  LsRemoteCommand: apply url.*.insteadOf
  Factor out URL replacement from RemoteConfig

2 years agoLFS: clean up messages 31/191931/2
Thomas Wolf [Tue, 15 Mar 2022 21:29:05 +0000 (22:29 +0100)]
LFS: clean up messages

Remove an unused message, and remove unnecessary quotes.

Change-Id: I9da3eeb3db33324fa07bebd434bca3c0a4da27ab
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoDirCacheCheckout: use a LinkedHashMap instead of HashMap 32/191932/2
Thomas Wolf [Tue, 15 Mar 2022 21:48:48 +0000 (22:48 +0100)]
DirCacheCheckout: use a LinkedHashMap instead of HashMap

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>
2 years agoRe-try reading a file when there are concurrent writes 24/191924/4
Thomas Wolf [Tue, 15 Mar 2022 18:12:46 +0000 (19:12 +0100)]
Re-try reading a file when there are concurrent writes

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>
2 years ago[sideband] Ensure last bit of progress channel is written 27/191927/3
Thomas Wolf [Sat, 26 Feb 2022 11:46:50 +0000 (12:46 +0100)]
[sideband] Ensure last bit of progress channel is written

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>
2 years agoAdd tests for SideBandInputStream 26/191926/2
Thomas Wolf [Sat, 26 Feb 2022 11:46:20 +0000 (12:46 +0100)]
Add tests for SideBandInputStream

Bug: 575629
Change-Id: I4591a64a2c07c7841417ec7a5c7883134ffda1be
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoWinPipeConnector: Resolve warnings by using "equals" instead of "==" 10/191410/5
Fabio Ponciroli [Thu, 3 Mar 2022 16:27:25 +0000 (17:27 +0100)]
WinPipeConnector: Resolve warnings by using "equals" instead of "=="

Errorprone raises the following warning: "[ReferenceEquality] Comparison
using reference equality instead of value equality".

Change-Id: Ic73305b2af628f66e7659ea1b839b3a640e3cd8d

2 years agoLsRemoteCommand: apply url.*.insteadOf 29/191929/1
Thomas Wolf [Fri, 4 Mar 2022 20:00:26 +0000 (21:00 +0100)]
LsRemoteCommand: apply url.*.insteadOf

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>
2 years agoFactor out URL replacement from RemoteConfig 28/191928/1
Thomas Wolf [Wed, 2 Mar 2022 19:47:49 +0000 (20:47 +0100)]
Factor out URL replacement from RemoteConfig

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>
2 years agoFix MANIFEST.MF in the LFS bundles 16/191816/1
Thomas Wolf [Sat, 12 Mar 2022 16:28:47 +0000 (17:28 +0100)]
Fix MANIFEST.MF in the LFS bundles

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>
2 years agoUpdate Tycho to 2.6.0 30/191530/3
Matthias Sohn [Mon, 7 Mar 2022 09:08:26 +0000 (10:08 +0100)]
Update Tycho to 2.6.0

Change-Id: Ic8b2b352721040ccc0164cf0c8637102518e5ce9

2 years agoMerge branch 'stable-6.1' 70/191670/2
Matthias Sohn [Tue, 8 Mar 2022 16:23:57 +0000 (17:23 +0100)]
Merge branch 'stable-6.1'

* 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

2 years agoPrepare 6.1.1-SNAPSHOT builds 14/191614/1
Matthias Sohn [Tue, 8 Mar 2022 16:04:10 +0000 (17:04 +0100)]
Prepare 6.1.1-SNAPSHOT builds

Change-Id: Ifc80355025d8459245843be1c24dc5a286913e77

2 years agoJGit v6.1.0.202203080745-r 04/191604/1 v6.1.0.202203080745-r
Matthias Sohn [Tue, 8 Mar 2022 12:45:56 +0000 (13:45 +0100)]
JGit v6.1.0.202203080745-r

Change-Id: I8766ed400020c9571f321bbbfe34b0688af0107d
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2 years ago[checkout] Use .gitattributes from the commit to be checked out 66/190766/4
Thomas Wolf [Sun, 13 Feb 2022 22:30:36 +0000 (23:30 +0100)]
[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>
2 years agoRefer to target platform as file 44/191544/1
Michael Keppler [Mon, 7 Mar 2022 14:52:58 +0000 (15:52 +0100)]
Refer to target platform as file

Since Tycho 2.3 the target platform can be referenced as file, without
using Maven coordinates.

Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
Change-Id: I120223dd3dc740fdff13a69201624b4cdc02c6f6

2 years agoDon't use final for method parameters 20/191520/1
Matthias Sohn [Sun, 6 Mar 2022 17:52:59 +0000 (18:52 +0100)]
Don't use final for method parameters

See https://wiki.eclipse.org/EGit/Contributor_Guide#Use_of_the_.22final.22_modifier

Change-Id: Idc6ed85483e381689e5085c4a1bacd75d26f5489

2 years ago[push] support the "matching" RefSpecs ":" and "+:" 80/190980/5
Thomas Wolf [Sun, 20 Feb 2022 17:11:49 +0000 (18:11 +0100)]
[push] support the "matching" RefSpecs ":" and "+:"

The implementation of push.default=matching was not correct.
It used the RefSpec "refs/heads/*:refs/heads/*", which would push
_all_ local branches. But "matching" must push only those local
branches for which a remote branch with the same name already exists
at the remote.

This RefSpec can be expanded only once the advertisement from the
remote has been received.

Enhance RefSpec so that ":" and "+:" can be represented. Introduce a
special RemoteRefUpdate for such a RefSpec; it must carry through the
fetch RefSpecs to be able to fill in the remote tracking updates as
needed. Implement the expansion in PushProcess.

Bug: 353405
Change-Id: I54a4bfbb0a6a7d77b9128bf4a9c951d6586c3df4
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years ago[push] Call the pre-push hook later in the push process 89/190989/2
Thomas Wolf [Sun, 20 Feb 2022 17:10:24 +0000 (18:10 +0100)]
[push] Call the pre-push hook later in the push process

Call the pre-push hook only after having received the remote
advertisement and having determined rejections, like C git does.
Also similar to C git, don't pass rejected or up-to-date updates
to the pre-push hook.

Bug: 578852
Change-Id: I51d379ea7bd8234ec815f8f4a9fa325816f476cf
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoIndexDiff: use tree filter also for SubmoduleWalk 15/191515/1
Thomas Wolf [Fri, 17 Jul 2020 17:41:31 +0000 (19:41 +0200)]
IndexDiff: use tree filter also for SubmoduleWalk

The only uses of IndexDiff.setFilter() in JGit and EGit set a path
filter. Passing the filter on to the SubmoduleWalk gives the desired
result, which is consistent with command-line git.

Bug: 565251
Change-Id: I8eca1ed73eb1d237b8785f369352f72af9e0e168
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoRun license check with option -Ddash.projectId=technology.jgit 33/191433/1
Matthias Sohn [Fri, 4 Mar 2022 06:56:50 +0000 (07:56 +0100)]
Run license check with option -Ddash.projectId=technology.jgit

This ensures that works-with-dependencies are attributed properly.

Change-Id: Ie41733cdecc83ae0b532fb4bd9f692bc09e16107

2 years agoExclude transitive dependencies of sshd-sftp 29/191429/1
Matthias Sohn [Thu, 3 Mar 2022 23:30:36 +0000 (00:30 +0100)]
Exclude transitive dependencies of sshd-sftp

We don't need the dependencies of sshd-sftp to sshd-common and
sshd-core since they are contained in sshd-osgi.
Excluding them helps the dash IP log tool to not list them as required
dependencies of jgit.

Change-Id: I85bce4dca1b99ba880cf3e909fac9669c75e7854

2 years agoUpdate DEPENDENCIES for 6.1.0 release 24/191424/1
Matthias Sohn [Thu, 3 Mar 2022 21:11:06 +0000 (22:11 +0100)]
Update DEPENDENCIES for 6.1.0 release

Change-Id: I9ea925bd444952dc204e2538b9d16fe631202e0c

2 years agoAdd dependency to dash-licenses 23/191423/1
Matthias Sohn [Wed, 27 Jan 2021 23:25:06 +0000 (00:25 +0100)]
Add dependency to dash-licenses

This is required to run the license check using the license tool [1]
required by the Eclipse project handbook [2]:

mvn org.eclipse.dash:license-tool-plugin:license-check -Ddash.summary=DEPENDENCIES

Note: the tool still requires Java 11 hence it needs to be run in a
separate build step and is not yet integrated in the build which runs
on Java 8.

[1] https://github.com/eclipse/dash-licenses
[2] https://www.eclipse.org/projects/handbook/#ip-license-tool

Change-Id: Ib41d54de246c3c9499cc3be9f026294c39fdfd99

2 years agoPrepare 6.2.0-SNAPSHOT builds 99/191399/1
Matthias Sohn [Thu, 3 Mar 2022 09:49:58 +0000 (10:49 +0100)]
Prepare 6.2.0-SNAPSHOT builds

Change-Id: Ic2dde88bee3242169d6fa50956f8938f3fc4ba8e

2 years agoFix typos of some keys in LfsText 98/191398/1
Matthias Sohn [Thu, 3 Mar 2022 09:46:33 +0000 (10:46 +0100)]
Fix typos of some keys in LfsText

Change-Id: I86dee0b68e627e26cbd29976162bc7b953ebf276

2 years agoSort LfsText entries alphabetically 97/191397/1
Matthias Sohn [Thu, 3 Mar 2022 09:45:19 +0000 (10:45 +0100)]
Sort LfsText entries alphabetically

Change-Id: I3021cb246b51d861d51258808c75d5c6843ec82d

2 years agoSupport for "lfs.url" from ".lfsconfig" 31/189231/14
Matthias Fromme [Mon, 3 Jan 2022 12:06:34 +0000 (13:06 +0100)]
Support for "lfs.url" from ".lfsconfig"

- New class LfsConfig to enrich repository configuration by settings
from ".lfsconfig" file respecting configuration file precedence.
- Adapted LfsConnectionFactory to use LfsConfig instead of directly
using configuration from repository to calculate url of the lfs
repository

Bug: 578020
Change-Id: I156f4ec137c2e428136a2ca9b8a4011ecee2d915

2 years agoMerge branch 'stable-6.1' 88/191388/1
Matthias Sohn [Wed, 2 Mar 2022 22:02:21 +0000 (23:02 +0100)]
Merge branch 'stable-6.1'

* stable-6.1:
  Update Orbit to R20220302172233 for 2022-03
  Prepare 6.1.0-SNAPSHOT builds
  JGit v6.1.0.202203021511-rc1
  Prepare 6.1.0-SNAPSHOT builds
  JGit v6.1.0.202202221755-m3

Change-Id: Iff4b13ca8ae5e13a3f2f45c0d4653405f1ceb2f4

2 years agoUpdate Orbit to R20220302172233 for 2022-03 82/191382/1
Matthias Sohn [Wed, 2 Mar 2022 21:31:45 +0000 (22:31 +0100)]
Update Orbit to R20220302172233 for 2022-03

Change-Id: Ief504bf7f926d461e38186bf00711082d619fc08

2 years agoPrepare 6.1.0-SNAPSHOT builds 81/191381/1
Matthias Sohn [Wed, 2 Mar 2022 21:28:46 +0000 (22:28 +0100)]
Prepare 6.1.0-SNAPSHOT builds

Change-Id: I525fc1258a729c36d63fdb3c8170e9f04ad55cec

2 years agoJGit v6.1.0.202203021511-rc1 78/191378/1 v6.1.0.202203021511-rc1
Matthias Sohn [Wed, 2 Mar 2022 20:11:54 +0000 (21:11 +0100)]
JGit v6.1.0.202203021511-rc1

Change-Id: I4c75a58fd76102e773af4f1f8a1487d5e7ffc7cf
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2 years agoMerge branch 'master' into stable-6.1 75/191375/1
Matthias Sohn [Wed, 2 Mar 2022 20:10:03 +0000 (21:10 +0100)]
Merge branch 'master' into stable-6.1

* master:
  Describe: add support for core.abbrev config option
  Add a typed config getter for integers confined to a range
  Remove odd prefix of PersonIdent test class
  PersonIdent: Add ctors that accept Instant in addition to Date
  Remove ignored potentiallyUnclosedCloseable check
  Make precedence more explicit
  [pgm] Add describe --abbrev option
  Cap describe abbrev option
  DescribeCommand: Add support for --abbrev=0

Change-Id: I1daa3501a38d57b628800fadb96b6b71eea8cbb3

2 years agoDescribe: add support for core.abbrev config option 09/191009/7
Matthias Sohn [Mon, 21 Feb 2022 01:29:27 +0000 (02:29 +0100)]
Describe: add support for core.abbrev config option

If core.abbrev is unset or "auto" estimate abbreviation length like C
git does:
- Estimate repository's object count by only considering packed objects,
  round up to next power of 2
- With the order of 2^len objects, we expect a collision at 2^(len/2).
  But we also care about hex chars, not bits, and there are 4 bits per
  hex. So all together we need to divide by 2; but we also want to round
  odd numbers up, hence adding one before dividing.
- For small repos use at least 7 hexdigits
- If object database fails to determine object count use 7 hexdigits as
  fallback

If it is set to "no" do not abbreviate object-ids.

Otherwise set it to the configured value capped to the range between 4
and length of an unabbreviated object-id.

Change-Id: I425f9724b69813dbb57872466bf2d2e1d6dc72c6

2 years agoAdd a typed config getter for integers confined to a range 36/191036/4
Matthias Sohn [Tue, 22 Feb 2022 00:20:07 +0000 (01:20 +0100)]
Add a typed config getter for integers confined to a range

Use Integer#MIN_VALUE to denote unset option.

Change-Id: I4d65f2434013111f25520c0ed2b9a9dc8123c6cf

2 years agoRemove odd prefix of PersonIdent test class 43/190543/2
Matthias Sohn [Mon, 7 Feb 2022 22:12:34 +0000 (23:12 +0100)]
Remove odd prefix of PersonIdent test class

Change-Id: I05ede49902527c435691fb2c0f0d4da7ba077b7a

2 years agoPersonIdent: Add ctors that accept Instant in addition to Date 92/189192/5
David Ostrovsky [Wed, 29 Dec 2021 20:18:52 +0000 (21:18 +0100)]
PersonIdent: Add ctors that accept Instant in addition to Date

Error Prone is flagging Date-API as obsolete and recommends to migrate
to Instant and LocalDate. Given that more JGit users starting to migrate
to new Time API, offer ctors that accept Instant type and also add new
getter that returns when attribute as Instant type.

Change-Id: I64a36bf40f191495c6889c1dff314ede06848880

2 years agoRemove ignored potentiallyUnclosedCloseable check 34/190534/3
Fabio Ponciroli [Mon, 7 Feb 2022 18:30:01 +0000 (19:30 +0100)]
Remove ignored potentiallyUnclosedCloseable check

potentiallyUnclosedCloseable currently is not checked and it creates
a warning when compiling with Maven.

Change-Id: I0715ead433270937f77f56a19aa203f8d6f5322f

2 years agoMake precedence more explicit 47/191347/3
Fabio Ponciroli [Wed, 2 Mar 2022 09:03:51 +0000 (10:03 +0100)]
Make precedence more explicit

Errorprone was failing the build with: "[OperatorPrecedence]. Use
grouping parenthesis to make the operator precedence explicit"

Add parentheses to silence it.

Change-Id: I81f1f249e38fd2543f5412b3501b0179d0759f55

2 years ago[pgm] Add describe --abbrev option 08/191008/2
Matthias Sohn [Sun, 20 Feb 2022 11:04:11 +0000 (12:04 +0100)]
[pgm] Add describe --abbrev option

Change-Id: I8adf2fad21db71b43266d3f274143eee6bc9dce2

2 years agoCap describe abbrev option 07/191007/2
Matthias Sohn [Sun, 20 Feb 2022 11:00:49 +0000 (12:00 +0100)]
Cap describe abbrev option

- minimum is 4 [1]
- maximum is length of a full ObjectId

[1] https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreabbrev

Change-Id: I145bde1a218f71b87b8d8260761dd0853770bb76

2 years agoDescribeCommand: Add support for --abbrev=0 06/191006/2
Matthias Sohn [Sun, 20 Feb 2022 11:03:22 +0000 (12:03 +0100)]
DescribeCommand: Add support for --abbrev=0

Setting --abbrev=0 suppresses long format and only shows the closest tag
[1].

[1] https://git-scm.com/docs/git-describe#Documentation/git-describe.txt---abbrevltngt

Change-Id: Ifcf4d7786dd0f0fb0315d8093fdb54384ed9d5f9

2 years agoPrepare 6.1.0-SNAPSHOT builds 17/191317/1
Matthias Sohn [Tue, 1 Mar 2022 16:21:11 +0000 (17:21 +0100)]
Prepare 6.1.0-SNAPSHOT builds

Change-Id: I30a89277373ad62c857151532942e135e34d1d0c

2 years agoJGit v6.1.0.202202221755-m3 95/191095/1 v6.1.0.202202221755-m3
Matthias Sohn [Tue, 22 Feb 2022 22:55:35 +0000 (23:55 +0100)]
JGit v6.1.0.202202221755-m3

Change-Id: Idcd46e05ca3eec376f8ac83209dba0978e004f9a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2 years agoRemove SuppressWarnings since currently ignored 57/190357/13
Fabio Ponciroli [Thu, 3 Feb 2022 08:49:13 +0000 (09:49 +0100)]
Remove SuppressWarnings since currently ignored

The following warning was raised by Eclipse:
"At least one of the problems in category
'unused' is not analysed due to a compiler option being ignored"

The org.eclipse.jdt.core.compiler.problem.unusedTypeParameter compiler
option is set to ignore, hence the warning suppression is redundant.

Change-Id: I5fd6efc9968be133c71e95c53803c44310d75e85

2 years agoAdd comment to explain why try-with-resource is not used 03/190703/7
Fabio Ponciroli [Fri, 11 Feb 2022 08:30:31 +0000 (09:30 +0100)]
Add comment to explain why try-with-resource is not used

Change-Id: I904f9890428334bdf2971511e0b2681f3da5a82a

2 years agoDescribeCommand: Support configuring the hash abbreviation 38/189338/7
Sebastian Schuberth [Wed, 5 Jan 2022 17:07:48 +0000 (18:07 +0100)]
DescribeCommand: Support configuring the hash abbreviation

Bug: 537883
Signed-off-by: Sebastian Schuberth <sebastian.schuberth@bosch.io>
Change-Id: Ic52dcebc564bbb0d934cc3a6205704b7aeaee30e

2 years agoSimplify implementation of WorkingTreeIterator 65/190765/2
Thomas Wolf [Sun, 13 Feb 2022 22:24:14 +0000 (23:24 +0100)]
Simplify implementation of WorkingTreeIterator

All the filtering in WorkingTreeIterator is for check-in, i.e., clean
filtering. The implementation was in some parts too general, passing
around an OperationType. But since it's always CHECKIN_OP, that's not
actually necessary.

Change-Id: I73f8bc059e485a073e456962868f52b3a3db4fc1
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoUpdate Orbit to S20220215213605 53/190853/1
Matthias Sohn [Wed, 16 Feb 2022 12:09:15 +0000 (13:09 +0100)]
Update Orbit to S20220215213605

and
- org.apache.httpcomponents.httpcore to 4.4.15.v20220209-2345

Change-Id: I0c7a8cf5a282596fe3d3dac422716480b3d76c83

2 years agoTransport: load all refs only if push refspecs have wildcards 29/190729/2
Thomas Wolf [Fri, 11 Feb 2022 16:18:20 +0000 (17:18 +0100)]
Transport: load all refs only if push refspecs have wildcards

There is no need to load all refs if there are no wildcard push
refspecs. Load them lazily on the first wildcard refspec encountered
instead of loading them up-front.

Change-Id: I6d0e981f9ed4997dbdefeb7f83f37ff4f33e06a5
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoPushCommand: determine remote from git config if not given 28/190728/2
Thomas Wolf [Thu, 10 Feb 2022 18:04:21 +0000 (19:04 +0100)]
PushCommand: determine remote from git config if not given

Add ConfigConstants and expose branch.<name>.pushRemote in the
BranchConfig. Use the branch configuration and remote.pushDefault
if no remote is given explicitly. If nothing is configured, fall
back to "origin".

Bug: 578676
Change-Id: I6bb141ff02c8b04980ec34b26ef248b72614c3c9
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoPushCommand: consider push.default when no RefSpecs are given 29/136629/5
Rolf Theunissen [Sun, 10 Feb 2019 17:40:26 +0000 (18:40 +0100)]
PushCommand: consider push.default when no RefSpecs are given

When no RefSpecs are given, PushCommand until now simply fell back to
pushing the current branch to an upstream branch of the same name. This
corresponds to push.default=current. Any setting from the git config
for push.default was simply ignored.

Implement the other modes (nothing, matching, upstream, and simple),
too. Add a setter and getter for the PushDefault so that an application
can force a particular mode to be used. For backwards compatibility,
use "current" as the default setting; to figure out the value from the
git config, which defaults to "simple", call setPushDefault(null).

Bug: 351314
Change-Id: I86c5402318771e47d80b137e99947762e1150bb4
Signed-off-by: Rolf Theunissen <rolf.theunissen@gmail.com>
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoPrevent that an instance of PushCommand is reused 74/190774/1
Thomas Wolf [Mon, 14 Feb 2022 09:44:51 +0000 (10:44 +0100)]
Prevent that an instance of PushCommand is reused

We checked if the command instance is called but missed to set the flag
tracking if it actually was used.

Change-Id: I0f9fb85c47945a4d91eab01ec5e1abc1ab83332a

2 years agoRemove unused warning suppression 01/190701/2
Fabio Ponciroli [Fri, 11 Feb 2022 08:19:31 +0000 (09:19 +0100)]
Remove unused warning suppression

SuppressWarnings is not used. Remove  to avoid
warnings at compile  time.

Change-Id: I84e3e57017cf9fd68d3377f866d4dd907ccde454

2 years agoSupport for git config push.default 62/190662/1
Thomas Wolf [Wed, 9 Feb 2022 17:33:31 +0000 (18:33 +0100)]
Support for git config push.default

Enhance the (unused!?) PushConfig; include a PushDefault enumeration.
Add simple tests for this PushConfig.

Bug: 351314
Change-Id: Ibc5656a2a1fccf70d00c5e15de8ed3dd8add6337
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years agoUpdate Orbit to S20220208191225 91/190591/3
Matthias Sohn [Tue, 8 Feb 2022 23:18:20 +0000 (00:18 +0100)]
Update Orbit to S20220208191225

Change-Id: I091d82a26fb058eaa40c03e5cec1b004969d0894

2 years agoMerge branch 'stable-6.0' 94/190594/2
Matthias Sohn [Tue, 8 Feb 2022 23:47:49 +0000 (00:47 +0100)]
Merge branch 'stable-6.0'

* stable-6.0:
  Stop initCause throwing in readAdvertisedRefs

Change-Id: I2266814c613fd81e9dfc722532ac3daa30ca66b5

2 years agoMerge branch 'stable-5.13' into stable-6.0 93/190593/2
Matthias Sohn [Tue, 8 Feb 2022 23:32:10 +0000 (00:32 +0100)]
Merge branch 'stable-5.13' into stable-6.0

* stable-5.13:
  Stop initCause throwing in readAdvertisedRefs

Change-Id: I94251601aa7fae9cc65164eaddcf16471874b11e

2 years agoStop initCause throwing in readAdvertisedRefs 50/190250/16
Darius Jokilehto [Fri, 4 Feb 2022 16:13:27 +0000 (16:13 +0000)]
Stop initCause throwing in readAdvertisedRefs

BasePackConnection::readAdvertisedRefsImpl was creating an exception by
calling `noRepository`, and then blindly calling `initCause` on it. As
`noRepository` can be overridden, it's not guaranteed to be missing a
cause.

BasePackPushConnection overrides `noRepository` and initiates a fetch,
which may throw a `NoRemoteRepositoryException` with a cause.

In this case calling `initCause` threw an `IllegalStateException`.

In order to throw the correct exception, we now return the
BasePackPushConnection exception and suppress the one thrown by
BasePackConnection

Bug: 578511
Change-Id: Ic1018b214be1e83d895979ee6c7cbce3f6765f6f

2 years agoSupport LFS Server URL without .git suffix 27/190527/6
Nail Samatov [Mon, 7 Feb 2022 15:13:58 +0000 (18:13 +0300)]
Support LFS Server URL without .git suffix

According to Git LFS documentation, URLs with and without .git suffix
should be supported. By default, Git LFS will append .git/info/lfs to
the end of a Git remote URL. To build the LFS server URL it will use:

Git Remote: https://git-server.com/foo/bar
LFS Server: https://git-server.com/foo/bar.git/info/lfs

Git Remote: https://git-server.com/foo/bar.git
LFS Server: https://git-server.com/foo/bar.git/info/lfs

Fix the LfsConnectionFactory accordingly. Move a utility method to
add the ".git" suffix if not present yet from FileResolver to
StringUtils and use it.

Bug: 578621
Change-Id: I8d3645872d5f03bb8e82c9c73647adb3e81ce484
Signed-off-by: Nail Samatov <sanail@yandex.ru>
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years ago[rebase] InteractiveHandler2: handle Gerrit Change-Ids 44/190444/1
Thomas Wolf [Thu, 3 Feb 2022 19:24:53 +0000 (20:24 +0100)]
[rebase] InteractiveHandler2: handle Gerrit Change-Ids

Add a way for the handler to tell whether the commit should generate a
Gerrit Change-Id. Augment the ModifyResult interface, and set the flag
on the CommitCommand.

This enables users to have a Change-ID be generated when squashing or
rewording commits. A possibly already existing Change-Id will remain
unchanged.

Bug: 440211
Change-Id: I66a72e0646876d162a7011235cca969e20acf060
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2 years ago[errorprone] Fix DefaultCharset warning in BareSuperprojectWriterTest 51/190351/2
Luca Milanesio [Thu, 3 Feb 2022 01:20:19 +0000 (01:20 +0000)]
[errorprone] Fix DefaultCharset warning in BareSuperprojectWriterTest

Set the string encoding when converting a byte array into String,
avoiding the build-time warning on platform-dependent encoding.

See https://errorprone.info/bugpattern/DefaultCharset

Change-Id: I1f920043a8f303da43a8278793c38453e8773d69

2 years agoIntroduce a constant for the length of an abbreviated hash string 37/189337/5
Sebastian Schuberth [Wed, 5 Jan 2022 17:21:33 +0000 (18:21 +0100)]
Introduce a constant for the length of an abbreviated hash string

Signed-off-by: Sebastian Schuberth <sebastian.schuberth@bosch.io>
Change-Id: I196d58a813f7caa1965af4cf8e2f977ed4cdc350

2 years agoMake sure to close Repository in tests 34/190334/4
Fabio Ponciroli [Wed, 2 Feb 2022 19:05:55 +0000 (20:05 +0100)]
Make sure to close Repository in tests

Repository wasn't closed in FetchAndPullCommandsRecurseSubmodulesTest.
This caused a "Resource leak: 'g' is never closed" warning during
compilation.

Bug: 578546
Change-Id: I591ef1e286bcd9a7103c016fd47015e77fa95cbb

2 years agoFix resource leak in CancellableDigestOutputStreamTest 29/190329/7
Fabio Ponciroli [Wed, 2 Feb 2022 17:49:50 +0000 (18:49 +0100)]
Fix resource leak in CancellableDigestOutputStreamTest

CancellableDigestOutputStream resources are never closed in the tests.
This causes a "Resource leak: 'out' is never closed" warning
at compile time.

Suppress it by using a try with resources.

Bug: 578544
Change-Id: I0dc7de9162b8e3ac6fcaabe3002423f545baddb8

2 years agoFix "Empty block should be documented" warning 27/190327/2
Fabio Ponciroli [Wed, 2 Feb 2022 17:38:02 +0000 (18:38 +0100)]
Fix "Empty block should be documented" warning

Bug: 578543
Change-Id: Id7fb03c07c785ac0955e4969a9b781b707719749

2 years agoReplace deprecated org.eclipse.jgit.lib.RefDatabase.getRefs 45/190245/4
Fabio Ponciroli [Tue, 1 Feb 2022 15:48:14 +0000 (16:48 +0100)]
Replace deprecated org.eclipse.jgit.lib.RefDatabase.getRefs

The method has been deprecated since 5.0.
Use getRefsByPrefix instead.

Bug: 534731
Change-Id: I5f1cfc1fd5ae49dc7a4ed3e039f23ed785d674f6

2 years agoRebaseCommand: fix commit message in "fixup" case 28/189728/4
Thomas Wolf [Mon, 17 Jan 2022 23:37:33 +0000 (00:37 +0100)]
RebaseCommand: fix commit message in "fixup" case

JGit accumulated in MESSAGE_FIXUP commit messages of a fixup sequence,
just like it did in MESSAGE_SQUASH, and on the last step of a sequence
of fixups used that file, after stripping all comment lines, as the
commit message. That also stripped any lines from the original commit
message that happened to start with the comment character.

This is not how this is supposed to work. MESSAGE_FIXUP must contain
the original commit message of the base commit that is amended, and
the file contains the verbatim commit message for the final fixup.[1]

Change the implementation accordingly, and add new tests.

[1] https://github.com/git/git/blob/df3c41adeb/sequencer.c#L86 ff.

Bug: 513726
Change-Id: I885a2b7f10d6c74460a8693aa6cbf867ee0494a1
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>