Commit Graph

8596 Commits

Author SHA1 Message Date
Matthias Sohn 2a8b9871b9 Merge changes I7e1f8627,Ibd0240cf
* changes:
  HttpClientConnectionTest: organize imports
  Update Jetty to 10.0.6
2021-11-22 15:15:13 -05:00
Matthias Sohn 84a6ac3b64 HttpClientConnectionTest: organize imports
Change-Id: I7e1f8627a9360c660adc6f00fe48afe005929150
2021-11-22 20:50:32 +01:00
Matthias Sohn f91e47f5b6 Update Jetty to 10.0.6
- this is the same version eclipse platform currently uses
- update servlet-api to 4.0
- configure keystore used by AppServer with Subject Alternative Names
  for host name and ip address to satisfy more strict SNI checking in
  Jetty 10. See https://github.com/eclipse/jetty.project/issues/5379
- add jetty bundles to JGit-dependency-bundles in the jgit p2 repository

Bug: 571932
Bug: 576100
Change-Id: Ibd0240cf7ad4dc201947fd69707f517c3c1fc1c8
2021-11-22 20:50:28 +01:00
Thomas Wolf dedb586042 Fix missing @since 6.0 tag
CommitConfig.getCommitTemplateContent() has changed API.

Change-Id: If72ed79c43c167b99f356b69cc095d6bbf4d66e8
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-22 09:00:55 +01:00
Julian Ruppel 00f6fe72a7 Support commit.template config property
Fixes an issue that commit template file could not be found if it has a
relative path instead of absolute path.

Relative path is probably common if git config --local is used.

Bug: 446355

Change-Id: I8ddf2be672647be825fd9c01af82809d31bb8356
2021-11-22 02:22:03 -05:00
Matthias Sohn 2e2a3642c3 Merge branch 'stable-6.0'
* stable-6.0:
  Prepare 6.0.0-SNAPSHOT builds
  JGit v6.0.0.202111161950-m3

Change-Id: I55413bc9e93503130b7900840f75bd9243e156c9
2021-11-17 22:40:48 +01:00
Matthias Sohn 6807661d39 Prepare 6.0.0-SNAPSHOT builds
Change-Id: Ibfc7fb21b039fe2a7669c8dee3c10f5ade33d520
2021-11-17 21:41:28 +01:00
Ivan Frade efbd0caa22 Merge "DFS block cache: harden against race over ref locks." 2021-11-17 11:58:24 -05:00
Matthias Sohn 400b5acae8 JGit v6.0.0.202111161950-m3
Change-Id: If6c36994be05848c567d3d664eb683d9bed26c48
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2021-11-17 01:50:01 +01:00
Matthias Sohn f684dc6f8b Merge branch 'master' into stable-6.0
* master:
  Make BinaryBlobException stackless
  Typo fix in o.e.j.ssh.{jsch,apache}/README.md
  ssh: Handle "ProxyJump none" from SSH config file
  ssh: use a single SecureRandom instance for hashing hostnames
  OpenSshConfigFile: line comments and quoted strings
  OpenSshConfigFile: update token replacements
  Add missing .gitignore in o.e.j.ssh.apache.agent
  Upgrade plexus-compiler version to 2.9.0
  [sshd agent] Introduce ConnectorDescriptor
  Update version of last release defining the API baseline to 5.13.0
  Update Orbit to S20211108222137
  Update README
  Update jetty to 9.4.44.v20210927
  Simplify SshdFtpChannel
  [test] test OpenSshConfigFile directly, not via the JSch config
  sshd: add support for ssh-agent
  sshd: prepare for using an SSH agent
  [releng] bazel: Enable errorprone on o.e.j.ssh.apache
  [releng] Make the bazel build use Java 11
  Fix target platforms
  [doc] Add README and package-info to the SSH bundles
  Binary and CR-LF detection: lone CRs -> binary
  Factor out parsing git-style size numbers to StringUtils
  Make the buffer size for text/binary detection configurable

Change-Id: I5c78eeca3abfc3e0a659ed8a258c4e96e9469713
2021-11-17 01:44:52 +01:00
Alina Djamankulova 49d243b13c DFS block cache: harden against race over ref locks.
With change https://git.eclipse.org/r/c/jgit/jgit/+/186455 a thread
loading a bitmap index could hold two ref locks at the same time (one
for bitmap and one for either index or reverse index). So it is possible
that two threads loading bitmaps end up in a deadlock for ref locks e.g.
threadA has refLock[1] (for bitmap) and wants refLock[2] (for index or
revIndex) and threadB has refLock[2] (for bitmap) and wants refLock[1].

This change introduces separate pools of locks per pack extension
instead of a shared pool. So threads loading bitmap can hold two
locks but with different extensions and no overlap, e.g. threadA holds
refLock[BITMAP_INDEX][1] and refLock[INDEX][2] and threadB holds
refLock[BITMAP_INDEX][2] and refLock[INDEX][1].

More unit tests were added to cover various paralell loading scenarios.

Signed-off-by: Alina Djamankulova <adjama@google.com>
Change-Id: I89704b4721c21548929608d3798ef60925280755
2021-11-16 16:05:13 -08:00
Matthias Sohn ee28780bf2 Make BinaryBlobException stackless
We use BinaryBlobException to signal a binary blob was found and never
make use of its stack trace. Suppress filling in the stack trace to
avoid the performance penalty coming with that.

See https://shipilev.net/blog/2014/exceptional-performance/

Change-Id: Iae1f1c19a1fa8aef4f6569822557171130299958
2021-11-16 11:45:57 +01:00
Thomas Wolf 78b7d9e4fa Typo fix in o.e.j.ssh.{jsch,apache}/README.md
Change-Id: Ia7da92421f8fecb2a175eb23ecfd04a67e0ca8cc
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-15 22:26:21 +01:00
Thomas Wolf 057f1d9123 ssh: Handle "ProxyJump none" from SSH config file
Since OpenSSH 7.8, the ProxyJump directive accepts the value "none"[1]
to override and clear a setting that might otherwise be contributed by
another (wildcard) host entry.

[1] https://bugzilla.mindrot.org/show_bug.cgi?id=2869

Change-Id: Ia35e82c6f8c58d5c6b8040cda7a07b220f43fc21
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-15 22:26:20 +01:00
Thomas Wolf 180bc67e28 ssh: use a single SecureRandom instance for hashing hostnames
According to Spotbugs, that's better practice. It's questionable
whether it makes a big difference, though, especially since the
hash is the cryptographically weak SHA1.

Change-Id: Id293de2bad809d9cc19230bd720184786dc6c226
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-15 22:26:20 +01:00
Thomas Wolf af0126e1d0 OpenSshConfigFile: line comments and quoted strings
Bring our SSH config parser up-to-date with respect to changes in
OpenSSH. In particular, they fixed[1] the handling of line comments
such that #-characters inside strings are not considered. This means
that we have to parse strings with escaped quotes correctly.

[1] https://bugzilla.mindrot.org/show_bug.cgi?id=3288

Change-Id: Ifbd9014127e8d51e7c8792e237f3fc2a9a0719d2
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-15 22:26:19 +01:00
Thomas Wolf c4b3ec72fa OpenSshConfigFile: update token replacements
It appears that the OpenSSH documentation[1] has changed; it now allows
more flags for a number of keys.

[1] https://man.openbsd.org/ssh_config.5#TOKENS

Change-Id: I55df174f86a3fd4a6ef22687dc433ac9f9ad181d
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-15 22:26:19 +01:00
Matthias Sohn 2adbf91d8f Merge "Upgrade plexus-compiler version to 2.9.0" 2021-11-15 10:57:32 -05:00
Thomas Wolf ffb5cac361 Add missing .gitignore in o.e.j.ssh.apache.agent
Ignore /bin and /target.

Change-Id: I38f3748273b5243c54e010bfceac745084755f45
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-15 10:37:36 +01:00
Marco Miller d4296d96bb Upgrade plexus-compiler version to 2.9.0
Change-Id: I24ac698d3ccc01e79464b061068944ca82e8383b
Signed-off-by: Marco Miller <marco.miller@ericsson.com>
2021-11-12 23:33:42 +01:00
Thomas Wolf e7838b9c08 [sshd agent] Introduce ConnectorDescriptor
Once a factory supports different SSH agents on the same platform,
which is planned for Windows once we use Apache MINA sshd 2.8.0,
client code may need to have a way to specify which SSH agent shall
be used when the SSH config doesn't define anything.

Add a mechanism by which a ConnectorFactory can tell what Connectors
it may provide. Client code can use this to set the identityAgent
parameter of ConnectorFactory.create() to the wanted default if it
would be null otherwise.

A ConnectorDescriptor is a pair of strings: an internal name, and a
display name. The latter is included because client code might want to
communicate agent names to the user, be it in error messages or in some
chooser dialog where a user could define which of several alternative
SSH agents should be used as default. The internal name is intended to
be used in the IdentityAgent directive in ~/.ssh/config.

Also make the ConnectorFactory discovered via the ServiceLoader
accessible and overrideable. Provide static get/setDefault() methods,
similar to the SshSessionFactory itself.

Change-Id: Ie3d077395d32dfddc72bc8627e92b23636938182
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-10 13:57:01 -05:00
Matthias Sohn b84738c369 Update version of last release defining the API baseline to 5.13.0
Change-Id: I48e0d677a466a364fdd699cdb00014a9a65d082a
2021-11-10 15:56:36 +01:00
Matthias Sohn a74dfb0901 Update Orbit to S20211108222137
and update dependencies:
- com.google.gson to 2.8.8.v20211029-0838
- com.googlecode.javaewah to 1.1.13.v20211029-0839
- net.i2p.crypto.eddsa to 0.3.0.v20210923-1401
- org.apache.ant to 1.10.12.v20211102-1452
- org.apache.commons.compress to 1.21.0.v20211103-2100
- org.bouncycastle.bcprov to 1.69.0.v20210923-1401
- org.junit to 4.13.2.v20211018-1956

Change-Id: I90ca64f6d9f2a15c9a5d9a27d48956182f1698b4
2021-11-10 14:51:29 +01:00
Thomas Wolf 5cbf70fd97 Update README
* Java 11 now
* Mention new bundle org.eclipse.jgit.ssh.apache.agent
* Be honest about missing features: there are quite a few

Change-Id: Ie08a2b4581024febe1983a59414cf69845ebff96
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-07 23:21:39 +01:00
Matthias Sohn a92ff5369b Update jetty to 9.4.44.v20210927
Change-Id: Iaa1478af0fe0ccfa1daf1cf44e4eef609e7ad8bb
2021-11-05 15:50:45 +01:00
Thomas Wolf 3a7db8b782 Simplify SshdFtpChannel
Apache MINA sshd has simpler API for reading directories, and it has a
functional interface suitable for us. So no need to use our own
interface, or to deal with low-level abstractions like CloseableHandle.

Change-Id: Ic125c587535670504983f157a696b41ed6a76bb7
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-04 20:20:37 +01:00
Thomas Wolf c6d48ab2f8 [test] test OpenSshConfigFile directly, not via the JSch config
This is a prerequisite for removing the JSch support bundle; otherwise
OpenSshConfigFile would be left without tests.

Copy OpenSshConfigTest from the JSch support bundle and adapt all tests
to perform the equivalent checks on OpenSshConfigFile directly. Add a
new lookupDefault() method to the SshConfigStore interface and implement
it so that it behaves the same and the tests work identically.

Change-Id: I046abd9197a8484003e77005024e5d973456f1a3
2021-11-04 10:54:36 -04:00
Thomas Wolf 634302d2da sshd: add support for ssh-agent
Add a simple SSH agent connector using JNA. Include com.sum.jna and
com.sun.jna.platform in the target platform.

JNA is used to communicate through Unix domain sockets with ssh-agent,
and if on Windows, to communicate via shared memory with Pageant.

The new bundle o.e.j.ssh.apache.agent is an OSGi fragment so that
the java.util.ServiceLoader can find the provided factory without
further ado in OSGi environments.

Adapt both maven and bazel builds to include the new bundle.

Manually tested on OS X, CentOS 7, and Win10 with Pageant 0.76. Tested
by installing JGit built from this change into freshly downloaded
Eclipse 2021-12 M1, and then doing git fetches via SSH with different
~/.ssh/config settings (explicit IdentityFile, without any but a key in
the agent, with no keys and a key in the agent and IdentitiesOnly=yes
(must fail)).

Bug: 541274
Bug: 541275
Change-Id: I34e85467293707dbad1eb44d1f40fc2e70ba3622
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-03 23:46:54 +01:00
Thomas Wolf 68017a029c sshd: prepare for using an SSH agent
Add interfaces Connector and ConnectorFactory. A "connector" is just
something that knows how to connect to an ssh-agent and then can make
simple synchronous RPC-style requests (request-reply).

Add a way to customize an SshdSessionFactory with a ConnectorFactory.
Provide a default setup using the Java ServiceLoader mechanism to
discover an ConnectorFactory.

Implement an SshAgentClient in the internal part. Unfortunately we
cannot re-use the implementation in Apache MINA sshd: it's hard-wired
to Apache Tomcat APR, and it's also buggy.

No behavior changes yet since there is nothing that would provide an
actual ConnectorFactory. So for Apache MINA sshd, the SshAgentFactory
remains null as before.

Change-Id: I963a3d181357df2bdb66298bc702f2b9a6607a30
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-03 23:45:33 +01:00
Thomas Wolf c04884fc91 [releng] bazel: Enable errorprone on o.e.j.ssh.apache
Fix the few issues reported. (None serious.)

Change-Id: I8d72ef7d425ab61f4c27b657c92fc021850730d6
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-03 23:45:32 +01:00
Thomas Wolf 4184ff0953 [releng] Make the bazel build use Java 11
Make the default toolchain use Java 11, and fix two errorprone findings
introduced recently.

Change-Id: Iff51206fe8bdf096cb7d88cb1a499002550766cd
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-11-03 23:45:32 +01:00
Matthias Sohn 30a8afd768 Merge branch 'stable-5.13'
* stable-5.13:
  Fix target platforms

Change-Id: Iabbbacd6acde07a2e0ff156842b928a3ba18b4c6
2021-11-03 23:25:17 +01:00
Matthias Sohn 8e7dfb5e4b Merge branch 'stable-5.12' into stable-5.13
* stable-5.12:
  Fix target platforms

- jetty 9.4.43 moved to archive.eclipse.org
- use the final release p2 repo instead of staging for 2021-09

Change-Id: I35c1264b8e9c63874663141288dca03b47f263ed
2021-11-03 23:18:21 +01:00
Matthias Sohn dc766feffc Merge branch 'stable-5.11' into stable-5.12
* stable-5.11:
  Fix target platforms

- jetty 9.4.41 moved to archive.eclipse.org
- use the final release p2 repo instead of staging for 2021-06

Change-Id: I7a02b1fe271910dd82acf45242d8425aba2f52f9
2021-11-03 23:13:39 +01:00
Matthias Sohn 8ff0859703 Merge branch 'stable-5.10' into stable-5.11
* stable-5.10:
  Fix target platforms

- jetty 9.4.36 moved to archive.eclipse.org
- use the final release p2 repo instead of staging for 2021-03

Change-Id: I6ce2294bb150fedf8ded7fe6c1e23019d9c178d6
2021-11-03 23:09:15 +01:00
Matthias Sohn 587a273d85 Merge branch 'stable-5.9' into stable-5.10
* stable-5.9:
  Fix target platforms

Change-Id: Ib1876923ba98252682f41a03877792fd22b418d6
2021-11-03 23:01:44 +01:00
Matthias Sohn 4f8d434623 Fix target platforms
- jetty 9.4.30 moved to archive.eclipse.org
- use the final release p2 repo instead of staging for 2020-09

Change-Id: Ia096200e5983f0022c6c0da4dae035433e852807
2021-11-03 22:41:33 +01:00
Thomas Wolf f6ef2f6201 [doc] Add README and package-info to the SSH bundles
Explain in the JSch bundle that it is essentially unmaintained. Add
descriptions in both bundles explaining how to use it, or how to use
an alternate implementation.

Change-Id: Idaf46c33b14543279f78a55cb7c6bd42b06ee6b8
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-10-31 15:05:04 +01:00
Thomas Wolf 83eddaf7fd Binary and CR-LF detection: lone CRs -> binary
C git considers not only files containing NUL bytes as binary but also
files containing lone CRs. Implement this also for JGit.

C git additionally counts printable vs. non-printable characters and
considers files that have non_printable_count > printable_count / 128
also as binary. This is not implemented because such counting probably
only makes sense if one looks at the full file or blob content. The
Auto[CR]LF* streams in JGit look only at the first few KiB of a stream
in order not to buffer too much.

For the C git implementation, see [1].

[1] https://github.com/git/git/blob/7e27bd589d/convert.c#L35

Bug: 576971
Change-Id: Ia169b59bdbf1477f32ee2014eeb8406f81d4b1ab
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-10-31 13:02:04 +01:00
Thomas Wolf 3444a3be8c Factor out parsing git-style size numbers to StringUtils
Move the code to parse numbers with an optional 'k', 'm', or 'g' suffix
from the config file handling to StringUtils. This enables me to re-use
it in EGit, which has duplicate code in StorageSizeFieldEditor.

As this is generally useful functionality, providing it in the library
makes sense.

Change-Id: I86e4f5f62e14f99b35726b198ba3bbf1669418d9
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-10-30 23:05:22 +02:00
Thomas Wolf c2204bb683 Make the buffer size for text/binary detection configurable
The various streams used in JGit for text/binary and CR-LF detection
used different buffer sizes. Most used 8000, but one used 8KiB, and one
used 8096 (SIC!) bytes.

Considering only the first 8kB of a file/blob is not sufficient; it
may give behavior incompatible with C git. C git considers the whole
blob; since it uses memory-mapped files it can do so with acceptable
performance. Doing this in JGit would most likely incur a noticeable
performance penalty. But 8kB is a bit small; in the file in bug 576971
the limit was hit before the first CR-LF, which occurred on line 155
at offset 9759 in the file.

Make RawText.FIRST_FEW_BYTES only a default and minimum setting, and
set it to 8KiB. Make the actual buffer size configurable: provide
static methods getBufferSize() and setBuffersize(), and use
getBufferSize() throughout instead of the constant.

This enables users of the JGit library to set their own possibly larger
buffer size.

Bug: 576971
Change-Id: I447762c9a5147a521f73d2864ba59ed89f555d54
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-10-30 23:05:22 +02:00
Matthias Sohn 331a489c7f Merge branch 'stable-6.0'
* stable-6.0:
  Prepare 6.0.0-SNAPSHOT builds
  JGit v6.0.0.202110270955-m2
  Prepare 6.0.0-SNAPSHOT builds
  JGit v6.0.0.202110060947-m1

Change-Id: I3c0f760ce13b6afbfb06ebd569ce0162b531d67d
2021-10-28 14:27:29 +02:00
Matthias Sohn 99b06900b9 Prepare 6.0.0-SNAPSHOT builds
Change-Id: Iff7b4f834ecb43c7a0a9bf79bb8b30dd10d1fa07
2021-10-28 09:20:25 +02:00
Matthias Sohn 6fd7a25d99 JGit v6.0.0.202110270955-m2
Change-Id: I8057bbbf6acd478ad062e30cf5cbfc287531a66a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2021-10-27 14:54:49 +02:00
Matthias Sohn e21da0ddbc Merge branch 'master' into stable-6.0
* master:
  Fix checkout of files with mixed line endings on text=auto eol=crlf
  Don't rely on an implicit default character set
  Fix bad indentation in pom.xml
  Minor code-clean-up in OpenSshConfigFile
  Remove use of deprecated getAllRefs() in UploadPack
  DFS block cache: fix lock issue and support parallel index loading
  JSch: fix service publication for ServiceLoader
  Set JSch global config values only if not set already
  Fix missing peel-part in lsRefsV2 for loose annotated tags
  DFS block cache: allow multiple passes for blocks before eviction
  Fix RevWalk.getMergedInto() ignores annotated tags
  Optimize RevWalk.getMergedInto()
  GarbageCollectCommand: add numberOfBitmaps to statistics
  reftable: drop code for truncated reads
  reftable: pass on invalid object ID in conversion
  Update eclipse-jarsigner-plugin to 1.3.2
  Fix running benchmarks from bazel
  Update eclipse-jarsigner-plugin to 1.3.2
  Add org.bouncycastle.bcutil to p2 repository

Change-Id: Icaa36ded0439853a05ce21de9282e69d87a32284
2021-10-27 14:48:15 +02:00
Thomas Wolf b3a8a94a97 Fix checkout of files with mixed line endings on text=auto eol=crlf
Add tests for files having been checked in with mixed LF and CR-LF
line endings, and then being checked out with text or text=auto and
eol=lf or eol=crlf. These test cases were missing, and thus commit
efd1cc05 missed that AutoCRLFOutputStream needs the same detection
as AutoLFOutputStream.

Fix AutoCRLFOutputStream to not convert line endings if the blob in
the repository contains CR-LF.

Bug: 575393
Change-Id: Id0c7ae772e282097e95fddcd3f1f9d82aae31e43
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-10-27 00:22:42 +02:00
Thomas Wolf fc6fe793ce Don't rely on an implicit default character set
JEP 400 (Java 18) will change the default character set to UTF-8
unconditionally.[1] Introduce SystemReader.getDefaultCharset() that
provides the locale-dependent charset the way JEP 400 recommends.

Change all code locations using Charset.defaultCharset() to use the
new SystemReader method instead.

[1] https://openjdk.java.net/jeps/400

Change-Id: I986f97a410d2fc70748b6f93228a2d45ff100b2c
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-10-26 17:49:20 -04:00
Thomas Wolf ff3c3d8ff5 Fix bad indentation in pom.xml
Change-Id: I683f190d6914fb48f32cc3b3f0910b4264c7d725
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-10-24 21:35:51 +02:00
Thomas Wolf 6640baf57d Minor code-clean-up in OpenSshConfigFile
Change-Id: I45d50198e43aeb2a56c74026de7ee8c1a30f9d10
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-10-24 21:35:51 +02:00
Matthias Sohn 4b4a95b1bb Remove use of deprecated getAllRefs() in UploadPack
Repository.getAllRefs() is deprecated and should not
be used anymore.

Bug: 534731
Change-Id: I037a9b901275bfa7952b4c79861d7639c9d42715
2021-10-23 07:31:08 -04:00