]> source.dussan.org Git - jgit.git/log
jgit.git
22 months agoCache trustFolderStat/trustPackedRefsStat value per-instance 25/199325/3
Nasser Grainawi [Tue, 10 Jan 2023 23:15:42 +0000 (16:15 -0700)]
Cache trustFolderStat/trustPackedRefsStat value per-instance

Instead of re-reading the config every time the methods using these
values were called, cache the config value at the time of instance
construction. Caching the values improves performance for each of the
method calls. These configs are set based on the filesystem storing the
repository and unlikely to change while an application is running.

Change-Id: I1cae26dad672dd28b766ac532a871671475652df
Signed-off-by: Nasser Grainawi <quic_nasserg@quicinc.com>
22 months agoRefresh 'objects' dir and retry if a loose object is not found 14/197714/6
Kaushik Lingarkar [Thu, 12 Jan 2023 05:25:30 +0000 (21:25 -0800)]
Refresh 'objects' dir and retry if a loose object is not found

A new loose object may not be immediately visible on a NFS
client if it was created on another client. Refreshing the
'objects' dir and trying again can help work around the NFS
behavior.

Here's an E2E problem that this change can help fix. Consider
a Gerrit multi-primary setup with repositories based on NFS.
Add a new patch-set to an existing change and then immediately
fetch the new patch-set of that change. If the fetch is handled
by a Gerrit primary different that the one which created the
patch-set, then we sometimes run into a MissingObjectException
that causes the fetch to fail.

Bug: 581317
Change-Id: Iccc6676c68ef13a1e8b2ff52b3eeca790a89a13d
Signed-off-by: Kaushik Lingarkar <quic_kaushikl@quicinc.com>
22 months agoIntroduce core.trustPackedRefsStat config 26/197526/7
Kaushik Lingarkar [Fri, 2 Dec 2022 21:21:02 +0000 (13:21 -0800)]
Introduce core.trustPackedRefsStat config

Currently, we always read packed-refs file when 'trustFolderStat'
is false. Introduce a new config 'trustPackedRefsStat' which takes
precedence over 'trustFolderStat' when reading packed refs. Possible
values for this new config are:

* always: Trust packed-refs file attributes
* after_open: Same as 'always', but refresh the file attributes of
              packed-refs before trusting it
* never: Always read the packed-refs file
* unset: Fallback to 'trustFolderStat' to determine if the file
  attributes of packed-refs can be trusted

Folks whose repositories are on NFS and have traditionally been
setting 'trustFolderStat=false' can now get some performance improvement
with 'trustPackedRefsStat=after_open' as it refreshes the file
attributes of packed-refs (at least on some NFS clients) before
considering it.

For example, consider a repository on NFS with ~500k packed-refs. Here
are some stats which illustrate the improvement with this new config
when reading packed refs on NFS:

trustFolderStat=true trustPackedRefsStat=unset: 0.2ms
trustFolderStat=false trustPackedRefsStat=unset: 155ms
trustFolderStat=false trustPackedRefsStat=after_open: 1.5ms

Change-Id: I00da88e4cceebbcf3475be0fc0011ff65767c111
Signed-off-by: Kaushik Lingarkar <quic_kaushikl@quicinc.com>
23 months agoFix documentation for core.trustFolderStat 92/197492/5
Kaushik Lingarkar [Mon, 5 Dec 2022 22:58:00 +0000 (14:58 -0800)]
Fix documentation for core.trustFolderStat

Update documentation for core.trustFolderStat to highlight that it is
also used when reading the packed-refs file.

Change-Id: I3eac377c3a7f48493abc8ae6d0889ee70a05d24d
Signed-off-by: Kaushik Lingarkar <quic_kaushikl@quicinc.com>
2 years agoSilence API errors 38/197138/1
Matthias Sohn [Sun, 20 Nov 2022 19:09:02 +0000 (20:09 +0100)]
Silence API errors

Change-Id: I07c42fe9417edb0570dd475a7e935112a878a93b

2 years agoMerge branch 'stable-6.0' into stable-6.1 37/197137/1
Matthias Sohn [Sun, 20 Nov 2022 19:08:42 +0000 (20:08 +0100)]
Merge branch 'stable-6.0' into stable-6.1

* stable-6.0:
  Silence API errors
  Silence API warnings

Change-Id: I2b8336652e60dec97666582cf9331c8505729473

2 years agoSilence API errors 36/197136/1
Matthias Sohn [Sun, 20 Nov 2022 18:55:22 +0000 (19:55 +0100)]
Silence API errors

Change-Id: Ie112b2099ea2125bc85863524e56f09ba4907373

2 years agoMerge branch 'stable-5.13' into stable-6.0 35/197135/1
Matthias Sohn [Sun, 20 Nov 2022 18:54:44 +0000 (19:54 +0100)]
Merge branch 'stable-5.13' into stable-6.0

* stable-5.13:
  Silence API warnings

Change-Id: If5ab988a0e177c37b125e0b10625e506eeb2a74f

2 years agoSilence API warnings 34/197134/1
Matthias Sohn [Sun, 20 Nov 2022 18:45:54 +0000 (19:45 +0100)]
Silence API warnings

introduced by
- addition of configurable SHA1 implementation in 5.13.2
- 3-digit @since 5.9.1 annotations on GitServlet methods

Change-Id: If19853fcc5e3677e5b18e8e3fbbcd2773378dffc

2 years agoMerge "Merge branch 'stable-6.0' into stable-6.1" into stable-6.1
Matthias Sohn [Wed, 16 Nov 2022 09:10:43 +0000 (04:10 -0500)]
Merge "Merge branch 'stable-6.0' into stable-6.1" into stable-6.1

2 years agoMerge branch 'stable-6.0' into stable-6.1 02/197002/1
Matthias Sohn [Wed, 16 Nov 2022 08:54:28 +0000 (09:54 +0100)]
Merge branch 'stable-6.0' into stable-6.1

* stable-6.0:
  [benchmarks] Remove profiler configuration
  Add SHA1 benchmark
  [benchmarks] Set version of maven-compiler-plugin to 3.8.1
  Fix running JMH benchmarks
  Add option to allow using JDK's SHA1 implementation
  Ignore IllegalStateException if JVM is already shutting down

Change-Id: I176419026c3f4fdd8ebd34c61468c1ec3482ff45

2 years agoMerge branch 'stable-5.13' into stable-6.0 01/197001/1
Matthias Sohn [Tue, 15 Nov 2022 23:15:17 +0000 (00:15 +0100)]
Merge branch 'stable-5.13' into stable-6.0

* stable-5.13:
  [benchmarks] Remove profiler configuration
  Add SHA1 benchmark
  [benchmarks] Set version of maven-compiler-plugin to 3.8.1
  Fix running JMH benchmarks
  Add option to allow using JDK's SHA1 implementation
  Ignore IllegalStateException if JVM is already shutting down

Change-Id: I40105336f0b9e593a8a2c242a9557f854c274fdc

2 years ago[benchmarks] Remove profiler configuration 42/196942/7
Matthias Sohn [Mon, 14 Nov 2022 22:23:55 +0000 (23:23 +0100)]
[benchmarks] Remove profiler configuration

Profiler configuration can be added when required. It was commented out
in most benchmarks.

Change-Id: I725f98757f7d4d2ba2589658e34e2fd6fbbbedee

2 years agoAdd SHA1 benchmark 06/196906/13
Matthias Sohn [Tue, 15 Nov 2022 12:22:12 +0000 (13:22 +0100)]
Add SHA1 benchmark

Results on a Mac M1 max:

    size     SHA1Native SHA1Java    SHA1Java
                        without     with
                        collision   collision
                        detection   detection
    [kB]     [us/op]    [us/op]     [us/op]
---------------------------------------------
      1       3.662       4.200       4.707
      2       7.053       7.868       8.928
      4      13.883      15.149      17.608
      8      27.225      30.049      35.237
     16      54.014      59.655      70.867
     32     106.457     118.022     140.403
     64     212.712     237.702     281.522
   1024    3469.519    3868.883    4637.287
 131072  445011.724  501751.992  604061.308
1048576 3581702.104 4008087.854 4831023.563

The last 3 sizes (1, 128, 1024 MB) weren't committed
here to limit the total runtime.

Bug: 580310
Change-Id: I7d0382fd4aa4c4734806b12e96b671bee37d26e3

2 years ago[benchmarks] Set version of maven-compiler-plugin to 3.8.1 41/196941/6
Matthias Sohn [Mon, 14 Nov 2022 21:25:40 +0000 (22:25 +0100)]
[benchmarks] Set version of maven-compiler-plugin to 3.8.1

Change-Id: Ib14db133c76a55358ea79663ef38d9fb47a67f45

2 years agoFix running JMH benchmarks 25/196225/9
Matthias Sohn [Tue, 4 Oct 2022 13:45:01 +0000 (15:45 +0200)]
Fix running JMH benchmarks

Without this I sometimes hit the error:

$ java -jar target/benchmarks.jar
Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to
find the resource: /META-INF/BenchmarkList
at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)
at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:124)
at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:253)
at org.openjdk.jmh.runner.Runner.run(Runner.java:209)
at org.openjdk.jmh.Main.main(Main.java:71)

Change-Id: Iea9431d5f332f799d55a8a2d178c79a2ef0da22b

2 years agoAdd option to allow using JDK's SHA1 implementation 05/196905/9
Matthias Sohn [Fri, 11 Nov 2022 16:54:06 +0000 (17:54 +0100)]
Add option to allow using JDK's SHA1 implementation

The change If6da9833 moved the computation of SHA1 from the JVM's
JCE to a pure Java implementation with collision detection.
The extra security for public sites comes with a cost of slower
SHA1 processing compared to the native implementation in the JDK.

When JGit is used internally and not exposed to any traffic from
external or untrusted users, the extra cost of the pure Java SHA1
implementation can be avoided, falling back to the previous
native MessageDigest implementation.

Bug: 580310
Change-Id: Ic24c0ba1cb0fb6282b8ca3025ffbffa84035565e

2 years agoExtract Exception -> HTTP status code mapping for reuse 52/196852/3
Sven Selberg [Wed, 9 Nov 2022 17:28:45 +0000 (18:28 +0100)]
Extract Exception -> HTTP status code mapping for reuse

Extract private static method UploadPackServlet#statusCodeForThrowable
to a public static method in the UploadPackErrorHandler interface so
that implementers of this interface can reuse the default mapping.

Change-Id: Ie4a0a006b0148d5b828d610c55d19ce407aab055

2 years agoDon't handle internal git errors as an HTTP error 49/196849/4
Sven Selberg [Wed, 9 Nov 2022 15:58:17 +0000 (16:58 +0100)]
Don't handle internal git errors as an HTTP error

The fix that fixed the propagation of error-codes:
  8984e1f66 HTTP Smart: set correct HTTP status on error [1]
made some faulty assumptions.

"Wants not valid", can be an intermittent git error and the HTTP
response should be 200 and not 400 since the request isn't necessary
faulty.

[1] https://git.eclipse.org/r/c/jgit/jgit/+/192677

Bug: 579676
Change-Id: I461bc78ff6e450636811ece50d21c57a2a7f2ae3

2 years agoIgnore IllegalStateException if JVM is already shutting down 40/196540/1
Matthias Sohn [Thu, 27 Oct 2022 18:31:31 +0000 (20:31 +0200)]
Ignore IllegalStateException if JVM is already shutting down

Trying to register/unregister a shutdown hook when the JVM is already in
shutdown throws an IllegalStateException. Ignore this exception since we
can't do anything about it.

Bug: 580953
Change-Id: I8fc6fdd5585837c81ad0ebd6944430856556d90e

2 years agoAllow to perform PackedBatchRefUpdate without locking loose refs 10/196510/3
Saša Živkov [Fri, 21 Oct 2022 14:32:03 +0000 (16:32 +0200)]
Allow to perform PackedBatchRefUpdate without locking loose refs

Add another newBatchUpdate method in the RefDirectory where we can
control if the created PackedBatchRefUpdate will lock the loose refs or
not.

This can be useful in cases when we run programs which have exclusive
access to a Git repository and we know that locking loose refs is
unnecessary and just a performance loss.

Change-Id: I7d0932eb1598a3871a2281b1a049021380234df9

2 years agoMerge branch 'stable-6.0' into stable-6.1 95/194595/1
Matthias Sohn [Wed, 6 Jul 2022 15:00:09 +0000 (17:00 +0200)]
Merge branch 'stable-6.0' into stable-6.1

* stable-6.0:
  UploadPack: don't prematurely terminate timer in case of error
  Do not create reflog for remote tracking branches during clone
  UploadPack: do not check reachability of visible SHA1s
  Add missing package import javax.management to org.eclipse.jgit

Change-Id: I08734ee2c8f3296d908da6a29d53ed87c4b48eb2

2 years agoMerge branch 'stable-5.13' into stable-6.0 94/194594/1
Matthias Sohn [Wed, 6 Jul 2022 08:38:30 +0000 (10:38 +0200)]
Merge branch 'stable-5.13' into stable-6.0

* stable-5.13:
  UploadPack: don't prematurely terminate timer in case of error
  Do not create reflog for remote tracking branches during clone
  UploadPack: do not check reachability of visible SHA1s
  Add missing package import javax.management to org.eclipse.jgit

Change-Id: I6db0a4d74399fde892eeec62efd2946f97547a5d

2 years agoUploadPack: don't prematurely terminate timer in case of error 00/194500/2
Matthias Sohn [Wed, 29 Jun 2022 12:58:17 +0000 (14:58 +0200)]
UploadPack: don't prematurely terminate timer in case of error

In uploadWithExceptionPropagation don't prematurely terminate timer in
case of error to enable reporting it to the client. Expose a close
method so that callers can terminate it at the appropriate time.

If the timer is already terminated when trying to report it to the
client this failed with the error java.lang.IllegalStateException:
"Timer already terminated".

Bug: 579670
Change-Id: I95827442ccb0f9b1ede83630cf7c51cf619c399a

2 years agoMerge "Do not create reflog for remote tracking branches during clone" into stable...
Matthias Sohn [Sun, 26 Jun 2022 19:36:03 +0000 (15:36 -0400)]
Merge "Do not create reflog for remote tracking branches during clone" into stable-5.13

2 years agoDo not create reflog for remote tracking branches during clone 07/193007/24
Luca Milanesio [Fri, 29 Apr 2022 15:45:03 +0000 (16:45 +0100)]
Do not create reflog for remote tracking branches during clone

When using JGit on a non-bare repository, the CloneCommand
it previously created local reflogs for all branches including remote
tracking ones, causing the generation of a potentially large
number of files on the local filesystem.

The creation of the remote-tracking branches (refs/remotes/*) during
clone is not an issue for the local filesystem because all of them are
stored in a single packed-refs file. However, the creation of a large
number of ref logs on a local filesystem IS an issue because it
may not be tuned or initialised in term of inodes to contain a very
large number of files.

When a user (or a CI system) performs the CloneCommand against
a potentially large repository (e.g., millions of branches), it is
interested in working or validating a single branch or tag and is
unlikely to work with all the remote-tracking branches.
The eager creation of a reflogs for all the remote-tracking branches is
not just a performance issue but may also compromise the ability to
use JGit for cloning a large repository.

The behaviour implemented in this change is also consistent with the
optimisation done in the C code-base [1].

We differentiate between clone and fetch commands using --branch
<initialBranch> option, that is only available in clone command,
and is set as HEAD per default.

[1] https://github.com/git/git/commit/58f233ce1ed67bbc31a429fde5c65d5050fdbd7d

Bug: 579805
Change-Id: I58d0d36a8a4ce42e0f59b8bf063747c4b81bd859
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
2 years agoUploadPack: do not check reachability of visible SHA1s 96/193496/11
Luca Milanesio [Thu, 19 May 2022 10:12:28 +0000 (11:12 +0100)]
UploadPack: do not check reachability of visible SHA1s

When JGit needs to serve a Git client requesting SHA1s
during the want phase, it needs to make a full reachability
check from the advertised refs to the ones requested to
keep all objects in the correct scope of confidentiality
allowed by the avertised refs.

The check is also performed when the SHA1 corresponds to
one of the tips of the advertised refs which is a waste of
resources.

Example:

fetch> ref-prefix refs/heads/foo
fetch< 900505eb8ce8ced2a1757906da1b25c357b9654e refs/heads/foo
fetch< 0000
fetch> command=fetch
fetch> 0001
fetch> thin-pack
fetch> ofs-delta
fetch> want 900505eb8ce8ced2a1757906da1b25c357b9654e

The SHA1 in the want is the tip of refs/heads/foo and therefore
the full reachability check can be shortened and resolved more
quickly.

Change-Id: I49bd9e2464e0bd3bca2abf14c6e9df550d07383b
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
2 years agoAdd missing package import javax.management to org.eclipse.jgit 34/194234/1
Matthias Sohn [Fri, 17 Jun 2022 11:49:59 +0000 (13:49 +0200)]
Add missing package import javax.management to org.eclipse.jgit

Class org.eclipse.jgit.util.Monitoring uses JMX hence we need this
import otherwise OSGi applications can face ClassNotFoundException.

Bug: 577018
Change-Id: Ifd75337b87c7faec95d333b771bb0a2f3e46a418

2 years agoMerge branch 'stable-6.0' into stable-6.1 93/194193/1
Matthias Sohn [Wed, 15 Jun 2022 14:32:08 +0000 (16:32 +0200)]
Merge branch 'stable-6.0' into stable-6.1

* stable-6.0:
  Prepare 5.13.2-SNAPSHOT builds
  JGit v5.13.1.202206130422-r
  AmazonS3: Add support for AWS API signature version 4

Change-Id: Ie9c38ab8033fe1283e8b444b6acd3f4298062bf3

2 years agoMerge branch 'stable-5.13' into stable-6.0 88/194188/1
Matthias Sohn [Wed, 15 Jun 2022 14:31:38 +0000 (16:31 +0200)]
Merge branch 'stable-5.13' into stable-6.0

* stable-5.13:
  Prepare 5.13.2-SNAPSHOT builds
  JGit v5.13.1.202206130422-r
  AmazonS3: Add support for AWS API signature version 4

Change-Id: Ibd663a1d874d1aac274abc3dd44354fd99f64c39

2 years agoPrepare 5.13.2-SNAPSHOT builds 46/194146/1
Matthias Sohn [Mon, 13 Jun 2022 22:41:18 +0000 (00:41 +0200)]
Prepare 5.13.2-SNAPSHOT builds

Change-Id: I4862e5d80a7d95a1a119d06306e3f6927445d1d3

2 years agoJGit v5.13.1.202206130422-r 19/194119/1 v5.13.1.202206130422-r
Matthias Sohn [Mon, 13 Jun 2022 08:22:43 +0000 (10:22 +0200)]
JGit v5.13.1.202206130422-r

Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Change-Id: Ife74d64e8171c68dbf08271492c0ac852a6dc51c

2 years agoAmazonS3: Add support for AWS API signature version 4 12/193712/6
eric.steele [Wed, 1 Jun 2022 01:03:17 +0000 (18:03 -0700)]
AmazonS3: Add support for AWS API signature version 4

Updating the AmazonS3 class to support AWS Signature version 4 because
version 2 is no longer supported in all AWS regions. The version can be
selected with the new 'aws.api.signature.version' property (defaults to
2 for backwards compatibility). When set to '4', the user must also
specify the AWS region via the 'region' property. The 'region' property
must match the region that the 'domain' property resolves to.

Bug: 579907
Change-Id: If289dbc6d0f57323cfeaac2624c4eb5028f78d13

2 years agoMerge branch 'stable-6.0' into stable-6.1 72/193972/1
Matthias Sohn [Tue, 7 Jun 2022 09:36:11 +0000 (11:36 +0200)]
Merge branch 'stable-6.0' into stable-6.1

* stable-6.0:
  Fix connection leak for smart http connections

Change-Id: I8b7e643b87c0f788cdafb060a2c9e8b4ef6f7375

2 years agoMerge branch 'stable-5.13' into stable-6.0 71/193971/1
Matthias Sohn [Tue, 7 Jun 2022 09:35:13 +0000 (11:35 +0200)]
Merge branch 'stable-5.13' into stable-6.0

* stable-5.13:
  Fix connection leak for smart http connections

Change-Id: Ic851f2c4660ed761f5527e405b116b54da42fb7c

2 years agoMerge branch 'stable-5.12' into stable-5.13 70/193970/1
Matthias Sohn [Tue, 7 Jun 2022 09:34:25 +0000 (11:34 +0200)]
Merge branch 'stable-5.12' into stable-5.13

* stable-5.12:
  Fix connection leak for smart http connections

Change-Id: Id34f29c1b27a80c2b56c911cad7e3f64ef63af48

2 years agoMerge branch 'stable-5.11' into stable-5.12 69/193969/1
Matthias Sohn [Tue, 7 Jun 2022 09:33:38 +0000 (11:33 +0200)]
Merge branch 'stable-5.11' into stable-5.12

* stable-5.11:
  Fix connection leak for smart http connections

Change-Id: I6caabf4774ccf34706cef846c1087710f67e2ecd

2 years agoMerge branch 'stable-5.10' into stable-5.11 67/193967/2
Matthias Sohn [Tue, 7 Jun 2022 08:50:25 +0000 (10:50 +0200)]
Merge branch 'stable-5.10' into stable-5.11

* stable-5.10:
  Fix connection leak for smart http connections

Change-Id: I3885c6114caed897f762f5ce523d3b27288205b2

2 years agoMerge branch 'stable-5.9' into stable-5.10 66/193966/1
Matthias Sohn [Tue, 7 Jun 2022 08:42:22 +0000 (10:42 +0200)]
Merge branch 'stable-5.9' into stable-5.10

* stable-5.9:
  Fix connection leak for smart http connections

Change-Id: I5e7144b2f5cd850978220c476947001ae2debb8e

2 years agoFix connection leak for smart http connections 39/193939/3
Saša Živkov [Fri, 3 Jun 2022 14:36:43 +0000 (16:36 +0200)]
Fix connection leak for smart http connections

SmartHttpPushConnection: close InputStream and OutputStream after
processing. Wrap IOExceptions which aren't TransportExceptions already
as a TransportException.

Also-By: Matthias Sohn <matthias.sohn@sap.com>
Change-Id: I8e11d899672fc470c390a455dc86367e92ef9076

2 years agoMerge branch 'stable-6.0' into stable-6.1 68/193768/1
Matthias Sohn [Fri, 27 May 2022 14:22:09 +0000 (16:22 +0200)]
Merge branch 'stable-6.0' into stable-6.1

* stable-6.0:
  Remove stray files (probes or lock files) created by background threads

Change-Id: Iab21b9776c2ebecd4cad5d015028cadd4b6541db

2 years agoMerge branch 'stable-5.13' into stable-6.0 67/193767/1
Matthias Sohn [Fri, 27 May 2022 14:20:28 +0000 (16:20 +0200)]
Merge branch 'stable-5.13' into stable-6.0

* stable-5.13:
  Remove stray files (probes or lock files) created by background threads

Change-Id: I7af1355a77f14995118145162f6bb8a4f1755f2b

2 years agoRemove stray files (probes or lock files) created by background threads 79/193379/2
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

NOTE: port back from master branch.

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: Iaee2301eb14e6201406398a90228ad10cfea6098

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 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 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 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 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>
2 years agoreftable: close old Db in FileRepository#convertToPackedRefs 25/190225/3
Han-Wen Nienhuys [Tue, 1 Feb 2022 10:51:32 +0000 (11:51 +0100)]
reftable: close old Db in FileRepository#convertToPackedRefs

This fixes test failures on Windows.

Change-Id: I701fbeb99ffd7951514ae6eae8b28cceb9aebd9f

2 years agoreftable: tweaks for Windows 00/190200/4
Han-Wen Nienhuys [Mon, 31 Jan 2022 11:23:55 +0000 (12:23 +0100)]
reftable: tweaks for Windows

Reload the stack _before_ trying to delete the files. This ensures we
don't trip over our own open file handles when deleting compacted
tables.

If there is another process reading the file, it may be impossible to
delete the compacted tables. In this case, ignore the failure.

For cleaning the garbage in this case, the protocol as described in
https://www.git-scm.com/docs/reftable#_windows should be implemented.
This is left for another commit.

Bug: 578454
Change-Id: I7aa43508450041eb9376d9f67a0262ff7cc53c73

2 years agoMerge changes I11366273,I256e1572
Ivan Frade [Tue, 1 Feb 2022 22:41:44 +0000 (17:41 -0500)]
Merge changes I11366273,I256e1572

* changes:
  RepoCommand: Offer to set extra files in the destination repository
  RepoCommand: Move bare/regular superproject writing to their own classes