]> source.dussan.org Git - jgit.git/log
jgit.git
6 years agoUpgrade Tycho to 1.2.0 23/124423/2
Michael Keppler [Tue, 12 Jun 2018 16:02:22 +0000 (18:02 +0200)]
Upgrade Tycho to 1.2.0

Change-Id: I2f1c81839d2d78ddfd10b3992d1145546d10fa8c
Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 03/124503/1
Matthias Sohn [Wed, 13 Jun 2018 22:00:30 +0000 (00:00 +0200)]
Merge branch 'stable-5.0'

* stable-5.0:
  Prepare 5.0.1-SNAPSHOT builds
  JGit v5.0.0.201806131550-r
  JGit v5.0.0.201806131210-r
  Downgrade Apache httpclient to 4.5.2.v20170210-0925
  RefUpdateTest: Refactor to not use deprecated Repository#getAllRefs
  Propagate failure of ssh command to caller of SshSupport
  Make JGit describe behaves same as c-git for lightweight tags
  Fix issues with LFS on GitHub (SSH)

Change-Id: I0471440919adfdbfc72996711d9e0bbd1f3cf477
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoPrepare 5.0.1-SNAPSHOT builds 01/124501/1
Matthias Sohn [Wed, 13 Jun 2018 21:24:42 +0000 (23:24 +0200)]
Prepare 5.0.1-SNAPSHOT builds

Change-Id: Iadf12dbdd63ef17c3f712c0fc18495304aa35016
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoJGit v5.0.0.201806131550-r 95/124495/1 v5.0.0.201806131550-r
Matthias Sohn [Wed, 13 Jun 2018 19:42:40 +0000 (21:42 +0200)]
JGit v5.0.0.201806131550-r

Change-Id: Ia2d548676217250593c3f0c383aec19e12e5e4a4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoJGit v5.0.0.201806131210-r 79/124479/1
Matthias Sohn [Wed, 13 Jun 2018 16:11:23 +0000 (18:11 +0200)]
JGit v5.0.0.201806131210-r

Change-Id: Iedccfcaf57c11822f1faf5d5195357de42b2a14e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoDowngrade Apache httpclient to 4.5.2.v20170210-0925 46/124446/2
Matthias Sohn [Wed, 13 Jun 2018 07:03:20 +0000 (09:03 +0200)]
Downgrade Apache httpclient to 4.5.2.v20170210-0925

Eclipse platform uses this version from the Oxygen Orbit release for
Photon. In order to avoid that we end up with two slightly different
versions in the same p2 repository of the simultaneous release we
downgrade temporarily from the version 4.5.2.v20180410-1551 in the
Photon Orbit release.

See
https://dev.eclipse.org/mhonarc/lists/cross-project-issues-dev/msg15659.html

Change-Id: Id46a840aa4b1010af7fe311498f17f1f2e5b81e0
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoRefUpdateTest: Refactor to not use deprecated Repository#getAllRefs 26/123126/3
David Pursehouse [Wed, 23 May 2018 04:54:52 +0000 (13:54 +0900)]
RefUpdateTest: Refactor to not use deprecated Repository#getAllRefs

Change-Id: I157e62a0e1479d4bc95ef867e616ca8a30041759
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoPropagate failure of ssh command to caller of SshSupport 06/124406/4
Matthias Sohn [Tue, 12 Jun 2018 12:09:39 +0000 (14:09 +0200)]
Propagate failure of ssh command to caller of SshSupport

When SshSupport.runSshCommand fails since the executed external ssh
command failed throw a CommandFailedException.

If discovery of LFS server fails due to failure of the
git-lfs-authenticate command chain the CommandFailureException to the
LfsConfigInvalidException in order to allow root cause analysis in the
application using that.

Change-Id: I2f9ea2be11274549f6d845937164c248b3d840b2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMake JGit describe behaves same as c-git for lightweight tags 35/124435/3
Marcel Trautwein [Fri, 23 Feb 2018 06:27:52 +0000 (07:27 +0100)]
Make JGit describe behaves same as c-git for lightweight tags

JGit now considers lightweight tags only if the --tags option is set
i.e. `git.describe().setAllTags(true)` has to be set, else the default
is now as in c git:

Only annotated tags are evaluated unless you pass true
equivalent to --tags (or --all) by the option setAllTags.

Hint: This (still) doesn't address any difference between c-git
`--all` and `!--all --tags` behavior;
perhaps this might be a follow up request

Bug: 423206
Change-Id: I9a3699756df0b9c6a7c74a7e8887dea0df17c8e7
Signed-off-by: Marcel Trautwein <me+eclipse@childno.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoFix issues with LFS on GitHub (SSH) 55/124355/3
Markus Duft [Mon, 11 Jun 2018 15:12:00 +0000 (17:12 +0200)]
Fix issues with LFS on GitHub (SSH)

 * URIish seems to have a tiny feature (bug?). The path of the URI
   starts with a '/' only if the URI has a port set (it seems).
 * GitHub does not return SSH authorization on a single line as Gerrit
   does - need to account for that.
 * Increase the SSH git-lfs-authenticate timeout, as GitHub sometimes
   responds slower than expected.
 * Guard against NPE in case the download action does not contain any
   additional headers.

Change-Id: Icd1ead3d015479fd4b8bbd42ed42129b0abfb95c
Signed-off-by: Markus Duft <markus.duft@ssi-schaefer.com>
6 years agoMerge branch 'stable-5.0' 74/124374/2
David Pursehouse [Tue, 12 Jun 2018 03:50:32 +0000 (12:50 +0900)]
Merge branch 'stable-5.0'

* stable-5.0:

Empty merge. The stable-4.9 branch was merged directly into stable-5.0
by [1], and then there were separate merges up through stable-4.10 to
stable-4.11 by [2] and [3].

When stable-4.11 was merged in to stable-5.0 in [4] it was an empty
merge, since the change had already been brought in by [1].

[1] https://git.eclipse.org/r/#/c/124301/-1..2
[2] https://git.eclipse.org/r/#/c/124320/-1..1
[3] https://git.eclipse.org/r/#/c/124321/-1..1
[4] https://git.eclipse.org/r/#/c/124332/-1..1

Change-Id: I91304b1bdad41837814d221971750b2b64bdcf6a
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoMerge branch 'stable-4.11' into stable-5.0 32/124332/1
Matthias Sohn [Mon, 11 Jun 2018 09:25:27 +0000 (11:25 +0200)]
Merge branch 'stable-4.11' into stable-5.0

* stable-4.11:

Change-Id: Iec2dafd00979ab02f5ab698fc514866255007de5
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-4.10' into stable-4.11 21/124321/1
Matthias Sohn [Mon, 11 Jun 2018 09:03:42 +0000 (11:03 +0200)]
Merge branch 'stable-4.10' into stable-4.11

* stable-4.10:
  Ensure DirectoryStream is closed promptly

Change-Id: I2c0d5ea96b2c96336908674032d0f7d39dc062b9
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-4.9' into stable-4.10 20/124320/1
Matthias Sohn [Mon, 11 Jun 2018 08:54:50 +0000 (10:54 +0200)]
Merge branch 'stable-4.9' into stable-4.10

* stable-4.9:
  Ensure DirectoryStream is closed promptly

Change-Id: I62674a1db9266c04fb353ab697e2c0a24a7369b7
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 15/124315/1
David Pursehouse [Sun, 10 Jun 2018 23:09:00 +0000 (08:09 +0900)]
Merge branch 'stable-5.0'

* stable-5.0:
  Fix Javadoc typo

Change-Id: Ib864f5871f8e99d2a776b7ae9f782ec3eb312d50
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoFix Javadoc typo 08/124308/1
Michael Keppler [Sun, 10 Jun 2018 12:15:45 +0000 (14:15 +0200)]
Fix Javadoc typo

Change-Id: Ib4ebc57236bdea663f27295764886413e2550580
Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoMerge branch 'stable-5.0' 02/124302/3
Matthias Sohn [Sun, 10 Jun 2018 10:12:05 +0000 (12:12 +0200)]
Merge branch 'stable-5.0'

* stable-5.0:
  Ensure Jsch checks all configured algorithms
  RawTextTest#testBinary: use array comparison to compare arrays
  LFS: Better SSH authentication token timeout handling
  Ensure DirectoryStream is closed promptly
  Validate branch names on branch creation

Change-Id: Ic4f6a24b6ccee6730eee3fd5dcb0d1f3e291c478
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoEnsure Jsch checks all configured algorithms 51/124251/2
Thomas Wolf [Fri, 8 Jun 2018 13:47:05 +0000 (15:47 +0200)]
Ensure Jsch checks all configured algorithms

Jsch checks only for the availability of the algorithms given by
Jsch-internal config keys "CheckCiphers", "CheckKexes", and
"CheckSignatures". If the ssh config defines any algorithms
unknown to Jsch not listed in those keys, it'll still propose them
during the negotiation phase, and run into an NPE later on if the
server happens to propose such an algorithm and it gets chosen.

Jsch reads those "CheckCiphers" and the other values from either a
session-local config, or the global static Jsch config. It bypasses
~/.ssh/config for these values.

Therefore, copy these values from the config as read from
~/.ssh/config into the session-specific config. That makes Jsch
check _all_ configured algorithms up front, discarding any for
which it has no implementation. Thus it proposes only algorithms
it actually can handle.

Bug: 535672
Change-Id: I6a68e54f4d9a3267e895c536bcf3c58099826ad5
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
6 years agoMerge branch 'stable-4.9' into stable-5.0 01/124301/2
Matthias Sohn [Sun, 10 Jun 2018 07:21:16 +0000 (09:21 +0200)]
Merge branch 'stable-4.9' into stable-5.0

* stable-4.9:
  Ensure DirectoryStream is closed promptly

Change-Id: I447a01e1170db85fcf5978206ed35ad1956a2d82
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoRawTextTest#testBinary: use array comparison to compare arrays 87/124287/2
Matthias Sohn [Sat, 9 Jun 2018 00:01:59 +0000 (02:01 +0200)]
RawTextTest#testBinary: use array comparison to compare arrays

Change-Id: Iac1feadf24858a0bdf0cb224f16b34e9498fe3bb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoLFS: Better SSH authentication token timeout handling 88/124288/2
Markus Duft [Thu, 12 Apr 2018 08:11:18 +0000 (10:11 +0200)]
LFS: Better SSH authentication token timeout handling

 * Larger eager timeout to compensate for high-latency lines
 * Respect eager timeout in case the server uses "expiresIn"

Change-Id: Id87da1eea874e70b69eaccf35c84af4c3bb50770
Signed-off-by: Markus Duft <markus.duft@ssi-schaefer.com>
6 years agoEnsure DirectoryStream is closed promptly 85/124285/1
Dave Borowitz [Fri, 5 Jan 2018 18:02:47 +0000 (13:02 -0500)]
Ensure DirectoryStream is closed promptly

From the javadoc for Files.list:

"The returned stream encapsulates a DirectoryStream. If timely disposal
of file system resources is required, the try-with-resources construct
should be used to ensure that the stream's close method is invoked
after the stream operations are completed."

This is the only call to Files#newDirectoryStream that is not already in
a try-with-resources.

Change-Id: I91e6c56b5d74e8435457ad6ed9e6b4b24d2aa14e
(cherry picked from commit 1c16ea4601920c9dbc7a0202efc20137e1a63d55)

6 years agoValidate branch names on branch creation 72/124272/7
Matthias Sohn [Fri, 8 Jun 2018 15:45:00 +0000 (17:45 +0200)]
Validate branch names on branch creation

Since v2.16.0-rc0~89^2~1 (branch: correctly reject
refs/heads/{-dash,HEAD}, 2017-11-14),
native git does not allow branch names
- refs/heads/HEAD
- starting with '-'

Bug: 535655
Change-Id: Ib1c4ec9ea844073901a4ebe6a29ff6cc8ae58e93
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 83/124283/1
Jonathan Nieder [Fri, 8 Jun 2018 21:56:06 +0000 (14:56 -0700)]
Merge branch 'stable-5.0'

* stable-5.0:
  Use constant for ".lock"
  Simplify locking of FileRepository's index snapshot
  Refactor FileRepository.detectIndexChange()

Change-Id: Ifd427711359bcf38b2c877b2143d45bff0c9895a
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoUse constant for ".lock" 71/124271/3
Matthias Sohn [Fri, 8 Jun 2018 15:22:54 +0000 (17:22 +0200)]
Use constant for ".lock"

Change-Id: Id65dc94c970ffd3ca3d3d4a5d57123c95d29e8af
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoSimplify locking of FileRepository's index snapshot 35/124235/3
Matthias Sohn [Fri, 8 Jun 2018 07:50:39 +0000 (09:50 +0200)]
Simplify locking of FileRepository's index snapshot

synchronize on simple Object monitor instead of using ReentrantLock

Change-Id: I897020ab35786336b51b0fef76ea6071aff8aefa
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoRefactor FileRepository.detectIndexChange() 34/124234/1
Matthias Sohn [Fri, 8 Jun 2018 07:42:13 +0000 (09:42 +0200)]
Refactor FileRepository.detectIndexChange()

Change-Id: I50c751e2e90f685dc27043c569da2eb210d4611b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 32/124232/1
Jonathan Nieder [Fri, 8 Jun 2018 05:36:00 +0000 (22:36 -0700)]
Merge branch 'stable-5.0'

* stable-5.0:
  Update to latest Photon Orbit R20180606145124
  Ensure index change event is fired when index snapshot changed

Change-Id: I8724fc92999d2bc0f8bde5e401156738dd9f1ee6
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoMerge "Ensure index change event is fired when index snapshot changed" into stable-5.0
Jonathan Nieder [Fri, 8 Jun 2018 05:34:12 +0000 (01:34 -0400)]
Merge "Ensure index change event is fired when index snapshot changed" into stable-5.0

6 years agoUpdate to latest Photon Orbit R20180606145124 91/124191/1
Matthias Sohn [Thu, 7 Jun 2018 12:44:40 +0000 (14:44 +0200)]
Update to latest Photon Orbit R20180606145124

also add missing bundle org.hamcrest

Change-Id: I88ad7769b8fda491fe3641ddaf0964ca55ffc0f6
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 86/124086/1
David Pursehouse [Wed, 6 Jun 2018 10:15:49 +0000 (19:15 +0900)]
Merge branch 'stable-5.0'

* stable-5.0:
  Update maven plugins to fix Zip Slip vulnerability
  Prepare 5.0.0-SNAPSHOT builds
  JGit v5.0.0.201806050710-rc3

Change-Id: Icb1f34d3f49938fefa25d86857aa5048e54dcc7a
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoUpdate maven plugins to fix Zip Slip vulnerability 56/124056/1
David Pursehouse [Wed, 6 Jun 2018 04:34:34 +0000 (13:34 +0900)]
Update maven plugins to fix Zip Slip vulnerability

Zip Slip [1] is an arbitrary file write generic vulnerability, that can
be achieved using a specially crafted zip (or bzip2, gzip, tar, xz, war)
archive, that holds path traversal filenames.

According to Maven's announcement [2] several plugins use plexus-archiver to
unpack dependencies to disk and have been identified as potential triggers
for exposing the vulnerability.

Of those, JGit uses the maven-dependency-plugin and the maven-javadoc-plugin.

Update them to the fixed versions reported in [2].

See the corresponding issues for the maven-dependency-plugin [3] and the
maven-javadoc-plugin [4] for details.

[1] https://snyk.io/research/zip-slip-vulnerability
[2] https://maven.apache.org/security-plexus-archiver.html
[3] https://issues.apache.org/jira/browse/MDEP-611
[4] https://issues.apache.org/jira/browse/MJAVADOC-520

Change-Id: Id3ab2d6161db240f2ab8f82298fa3ecd7a930a43
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoEnsure index change event is fired when index snapshot changed 92/123892/6
Matthias Sohn [Sun, 3 Jun 2018 11:32:51 +0000 (13:32 +0200)]
Ensure index change event is fired when index snapshot changed

Ensure that notifyIndexChanged is called every time we call
FileSnapshot.save, except the first.

Change-Id: I5a4e9826e791f518787366ae7c3a0ef3d416d2c1
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoPrepare 5.0.0-SNAPSHOT builds 17/124017/1
Matthias Sohn [Tue, 5 Jun 2018 13:31:07 +0000 (15:31 +0200)]
Prepare 5.0.0-SNAPSHOT builds

Change-Id: I9acca328146aa7100fbc1b457fcb1f8fd87cf52a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoJGit v5.0.0.201806050710-rc3 90/123990/1 v5.0.0.201806050710-rc3
Matthias Sohn [Tue, 5 Jun 2018 11:10:10 +0000 (13:10 +0200)]
JGit v5.0.0.201806050710-rc3

Change-Id: Ic7a6a87dd3a21351e60fbf6cd330456adf1f6800
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 62/123962/3
Jonathan Nieder [Tue, 5 Jun 2018 05:22:24 +0000 (22:22 -0700)]
Merge branch 'stable-5.0'

* stable-5.0:
  Teach UploadPack "filter" in protocol v2 fetch
  Refactor test of capabilities output
  Refactor v2 advertisement into own function
  Refactor parsing of "filter" into its own method
  Disallow unknown args to "fetch" in protocol v2
  Teach UploadPack shallow fetch in protocol v2
  Refactor unshallowCommits to local variable
  Add protocol v2 support in http
  Give info/refs services more control over response

Change-Id: I1683902222e076e1091795e94790a264550afb7b
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoTeach UploadPack "filter" in protocol v2 fetch 61/123961/2
Jonathan Tan [Mon, 30 Apr 2018 20:21:43 +0000 (13:21 -0700)]
Teach UploadPack "filter" in protocol v2 fetch

If the configuration variable uploadpack.allowfilter is true, advertise
that "filter" is supported, and support it if the client sends such an
argument.

Change-Id: I7de66c0a0ada46ff71c5ba124d4ffa7c47254c3b
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
6 years agoRefactor test of capabilities output 60/123960/2
Jonathan Tan [Wed, 2 May 2018 23:35:48 +0000 (16:35 -0700)]
Refactor test of capabilities output

A subsequent patch will dynamically generate the capability
advertisement, so the capability advertisements produced are not always
the same. Separate the checking of the advertisements into its own test
method.

Change-Id: I768d14b9d1a244d5d886c42ffd62ef3957b518fb
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
6 years agoRefactor v2 advertisement into own function 59/123959/2
Jonathan Tan [Wed, 2 May 2018 22:43:50 +0000 (15:43 -0700)]
Refactor v2 advertisement into own function

A subsequent patch needs dynamic generation of this advertisement
depending on a configuration variable in the underlying repository, so
refactor it into a function instead of using a constant list.

Change-Id: Ie00584add1fb56c9e88c7b57f75703981ea5bb85
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
6 years agoRefactor parsing of "filter" into its own method 58/123958/2
Jonathan Tan [Mon, 30 Apr 2018 19:49:02 +0000 (12:49 -0700)]
Refactor parsing of "filter" into its own method

The implementation of protocol v2 will also need to parse the "filter"
option, so refactor it into its own method.

Change-Id: I751f6e6ca63fab873298594653a3885202297a2e
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
6 years agoDisallow unknown args to "fetch" in protocol v2 57/123957/2
Jonathan Tan [Thu, 3 May 2018 00:17:04 +0000 (17:17 -0700)]
Disallow unknown args to "fetch" in protocol v2

JGit's implementation of the fetch command of protocol v2, unlike its
implementation of ls-refs, currently tolerates unknown arguments.
Tighten fetch to not allow unrecognized arguments and add tests to
verify this behavior for both ls-refs and fetch.

Change-Id: I321161d568bd638252fab1a47b06b924d472a669
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
6 years agoTeach UploadPack shallow fetch in protocol v2 56/123956/2
Jonathan Tan [Thu, 15 Mar 2018 22:56:50 +0000 (15:56 -0700)]
Teach UploadPack shallow fetch in protocol v2

Add support for the "shallow" and "deepen" parameters in the "fetch"
command in the fetch-pack/upload-pack protocol v2. Advertise support for
this in the capability advertisement.

TODO: implement deepen-relative, deepen-since, deepen-not

Change-Id: I7ffd80d6c38872f9d713ac7d6e0412106b3766d7
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoRefactor unshallowCommits to local variable 55/123955/2
Jonathan Tan [Tue, 22 May 2018 22:19:04 +0000 (15:19 -0700)]
Refactor unshallowCommits to local variable

This reduces the amount of state held as instance variables in
UploadPack, and makes it easier for a future patch to contain a clearer
version of UploadPack#processShallow.

Change-Id: I6df80b42f9e5118fda1420692e02e417670cced3
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoAdd protocol v2 support in http 54/123954/2
Jonathan Tan [Wed, 28 Feb 2018 22:36:44 +0000 (14:36 -0800)]
Add protocol v2 support in http

Teach UploadPack to support protocol v2 with non-bidirectional pipes,
and add support to the HTTP protocol for v2. This is only activated if
the repository's config has "protocol.version" equal to 2.

Change-Id: I093a14acd2c3850b8b98e14936a716958f35a848
Helped-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoGive info/refs services more control over response 53/123953/2
Jonathan Tan [Wed, 25 Apr 2018 20:59:52 +0000 (13:59 -0700)]
Give info/refs services more control over response

Currently, SmartServiceInfoRefs always prints "# service=serviceName"
followed by a flush packet in response to an info/refs request, and then
hands it off to the specific service class. Printing of "#
service=serviceName" is mandated for protocol v0, but not v2.

Therefore, the existing code works for protocol v0, but whenever a
service that supports protocol v2 receives an info/refs request, it must
first determine which protocol version is to be used (depending on, for
example, the request and any relevant configuration variables), and then
decide if "# service=serviceName" needs to be printed.

Create a new method that v2-supporting service classes can override,
covering the printing of both "# service=serviceName" and everything
that the #advertise method prints. This will be used in a subsequent
commit in which UploadPackServlet (and the other classes it uses) is
updated to support protocol v2.

Change-Id: Ia026b06e96a6b15937514096babd024ef77df1ea
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoMerge branch 'stable-5.0' 88/123888/1
David Pursehouse [Sat, 2 Jun 2018 23:58:51 +0000 (08:58 +0900)]
Merge branch 'stable-5.0'

* stable-5.0:
  Chain RemoteAddCommand methods

Change-Id: I20d3cef5b5579c72ffd6809b7f6a8d787d631aaa
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoChain RemoteAddCommand methods 62/123762/2
Mincong HUANG [Wed, 30 May 2018 20:24:24 +0000 (22:24 +0200)]
Chain RemoteAddCommand methods

Change-Id: I1cf64c90a5cd2220034810b0d65d59582b420c4e
Signed-off-by: Mincong Huang <mincong.h@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 23/123823/3
David Pursehouse [Fri, 1 Jun 2018 15:26:43 +0000 (17:26 +0200)]
Merge branch 'stable-5.0'

* stable-5.0:
  Update target platforms to Orbit R20180531190352-Photon
  Prepare 5.0.0-SNAPSHOT builds
  JGit v5.0.0.201805301535-rc2

Change-Id: Ie149c2fee6c552b7a595f029c267292840734192
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoAllow overriding DfsPackDescription comparator for scanning packs 98/123698/3
Dave Borowitz [Wed, 30 May 2018 16:18:12 +0000 (09:18 -0700)]
Allow overriding DfsPackDescription comparator for scanning packs

Provide a factory for comparators that use the default heuristics except
with a different ordering of PackSources.

Change-Id: I0809b64deb3d0486040076946fdbdad650d69240

6 years agoMove DfsPackDescription comparators to common location 97/123697/3
Dave Borowitz [Wed, 30 May 2018 00:35:14 +0000 (17:35 -0700)]
Move DfsPackDescription comparators to common location

There are several ways of comparing DfsPackDescriptions for different
purposes, such as object lookup search order and reftable ordering. Some
of these are later compounded into comparators on other objects, so they
appear in the code as Comparator<DfsReftable>, for example.

Put all the DfsPackDescription comparators in static methods on
DfsPackDescription itself. Stop implementing Comparable, to avoid giving
the impression that there is always one true and correct way of sorting
packs.

Change-Id: Ia5ca65249c13373f7ef5b8a5d1ad50a26577706c

6 years agoUse Comparators for PackSource 96/123696/3
Dave Borowitz [Wed, 30 May 2018 19:02:35 +0000 (12:02 -0700)]
Use Comparators for PackSource

Rather than requiring callers to do their own computations based on the
package-private "category" number, provide an actual
Comparator<PackSource> instance, and explicitly discourage usage of
default Enum comparison.

Construct the default comparator using a builder pattern based on
defining equivalence classes. This gives us the same behavior as the old
category field in PackSource, with an abstraction that does not leak the
implementation detail of comparing rank numbers.

Change-Id: I6757211397ab1bc181d61298e073f88b69dbefc3

6 years agoDfsPackDescription: Disallow null PackSource 95/123695/3
Dave Borowitz [Wed, 30 May 2018 00:53:26 +0000 (17:53 -0700)]
DfsPackDescription: Disallow null PackSource

In normal operation, the source of a pack should never be null; the DFS
implementation should always know where a pack came from. Existing
implementations in InMemoryRepository and at Google always have the
source available at construction time.

The problem with null PackSources in the previous implementation was it
made the DfsPackDescription#compareTo method intransitive. Specifically,
it skips comparing the sources at all if *either* operand is null.
Suppose we have three descriptions A, B, and C, where all fields are
equal except the PackSource, and:
 * A's source is INSERT
 * B's source is null
 * C's source is RECEIVE
In this case, A.compareTo(B) == 0, and B.compareTo(C) == 0, since all
fields are equal except the source, which is skipped. But
A.compareTo(C) != 0, since A and B have different sources.

Avoid this problem in compareTo by enforcing that the source is never
null. We could of course assign an arbitrary category number to a null
source in order to make comparison transitive[1], but it's simpler to
implement and reason about if the field is non-nullable, and there is no
real-world use case to make it null.

Although a non-null source is required at construction time, the field
is currently still mutable: DfsPackDecscription#setPackSource is used by
DfsInserterTest to mark packs as garbage. This could probably be
avoided as well, allowing us to convert packSource to a final field, but
doing so is beyond the scope of this change.

[1] The astute reader will notice this is already done by
    DfsObjDatabase#reftableComparator(). In fact, the reason that
    different comparator implementations non-obviously have different
    semantics for this nullable field is another reason why it's clearer
    to avoid null entirely.

Change-Id: I85a2aaf3fd6d4868f241f7972a0349f087830ffa

6 years agoUpdate target platforms to Orbit R20180531190352-Photon 33/123833/1
Matthias Sohn [Fri, 1 Jun 2018 12:18:29 +0000 (14:18 +0200)]
Update target platforms to Orbit R20180531190352-Photon

Use the final Photon Orbit release

Change-Id: Ie07eb3dedb5ccb6a2a7b0ad2c90593a07fdd240e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoTest commit with huge commit message 27/123427/9
Thomas Wolf [Mon, 28 May 2018 09:35:20 +0000 (11:35 +0200)]
Test commit with huge commit message

Tests that even a commit with a huge message can be committed and read
if the WindowCache's streamFileThreshold is configured large enough.

Bug: 535092
Change-Id: Id8090c608625010caf11dff7971b47882b5fd20f
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
6 years agoPrepare 5.0.0-SNAPSHOT builds 03/123703/1
Matthias Sohn [Wed, 30 May 2018 21:16:23 +0000 (23:16 +0200)]
Prepare 5.0.0-SNAPSHOT builds

Change-Id: I9c4a0465f8e85041d24da97f4b4c7ad5f5eed3e4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoJGit v5.0.0.201805301535-rc2 91/123691/1 v5.0.0.201805301535-rc2
Matthias Sohn [Wed, 30 May 2018 19:33:49 +0000 (21:33 +0200)]
JGit v5.0.0.201805301535-rc2

Change-Id: Ifad678794525c01838b03e52bada66e1c089c5ae
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 81/123581/1
Matthias Sohn [Tue, 29 May 2018 23:46:06 +0000 (01:46 +0200)]
Merge branch 'stable-5.0'

* stable-5.0:
  Fix description property in feature.properties of pgm source feature
  Update SUA

Change-Id: I891a7b8b922ecae49872eb642d6917e8c85c2f51
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoFix description property in feature.properties of pgm source feature 80/123580/1
Matthias Sohn [Tue, 29 May 2018 23:14:14 +0000 (01:14 +0200)]
Fix description property in feature.properties of pgm source feature

Change-Id: I29c7bf1dc6aaf71542e2529883d44dcd995e17f7
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoUpdate SUA 31/123531/4
Matthias Sohn [Tue, 29 May 2018 11:45:06 +0000 (13:45 +0200)]
Update SUA

Following [1] update SUA in license.html [2] and feature.properties [3]

[1] https://www.eclipse.org/projects/handbook/#legaldoc-plugins
[2] https://www.eclipse.org/legal/epl/notice.html
[3] https://www.eclipse.org/legal/epl/feature.properties.txt

Bug: 532265
Change-Id: Ia3929808154510ad09ceeead263a3fe0dba9a34a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-5.0' 10/123410/1
David Pursehouse [Sun, 27 May 2018 23:56:27 +0000 (08:56 +0900)]
Merge branch 'stable-5.0'

* stable-5.0:
  Don't prune symbolic refs when fetch.prune = true
  Prepare 5.0.0-SNAPSHOT builds
  JGit v5.0.0.201805221745-rc1
  Prepare 5.0.0-SNAPSHOT builds
  JGit v5.0.0.201805151920-m7

Change-Id: I9a9a4a3ab36a2bd83e4eaed90151740d59af171b

6 years agoDon't prune symbolic refs when fetch.prune = true 25/123325/1
Thomas Wolf [Thu, 24 May 2018 14:26:36 +0000 (16:26 +0200)]
Don't prune symbolic refs when fetch.prune = true

The canonical implementation also doesn't. Compare current
code in remote.c, function get_stale_heads_cb.[1] Not handling
symrefs in this case was introduced in canonical git in [2]
in 2008.

[1] https://github.com/git/git/blob/v2.17.0/remote.c#L2259
[2] https://github.com/git/git/commit/740fdd27f0

Bug: 533549
Change-Id: If348d56bb4a96b8aa7141f7e7b5a0d3dd4e7808b
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
6 years agoPrepare 5.1.0-SNAPSHOT builds 36/123136/1
Matthias Sohn [Wed, 23 May 2018 08:18:18 +0000 (10:18 +0200)]
Prepare 5.1.0-SNAPSHOT builds

Change-Id: I8523a993ae1f7b62573d7547273bc1356bf64fa7
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoFix trivial usages of deprecated Repository#getAllRefs 24/123124/1
David Pursehouse [Wed, 23 May 2018 04:31:22 +0000 (13:31 +0900)]
Fix trivial usages of deprecated Repository#getAllRefs

Callers of getAllRefs that only iterate over the `values()` of the
returned map can be trivially fixed to call getRefDatabase().getRefs()
instead.

Only fix those where the calling method is already declared to throw
IOException, to avoid potential API changes.

Change-Id: I2b05f785077a1713953cfd42df7bf915f889f90b
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoRefTest: Refactor to not use deprecated Repository.getAllRefs 19/123119/3
David Pursehouse [Wed, 23 May 2018 02:11:08 +0000 (11:11 +0900)]
RefTest: Refactor to not use deprecated Repository.getAllRefs

Change-Id: I21ade27e0a8e57d1dbda49e7c6ecc500d30229b7
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoRepository: Deprecate the #getAllRefs method 18/123118/3
David Pursehouse [Wed, 23 May 2018 01:57:22 +0000 (10:57 +0900)]
Repository: Deprecate the #getAllRefs method

Callers should instead use getRefDatabase().getRefs(), which does not
swallow the IOException.

Replace @link with @code in the Javadoc of FileRepository, since linking
to the deprecated method causes an error:

  Javadoc: The method getAllRefs() from the type Repository is deprecated

Existing callers of the deprecated method are not adapted in this commit
because many of them require more refactoring. They will be done in
separate follow-up commits.

Bug: 534731
Change-Id: Id84e70e4cd7be3d1ca1795512950c6abe3d18ffd
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoPrepare 5.0.0-SNAPSHOT builds 14/123114/1
Matthias Sohn [Tue, 22 May 2018 23:54:32 +0000 (01:54 +0200)]
Prepare 5.0.0-SNAPSHOT builds

Change-Id: Ie343ccf37f46168041046500a2e19acc80814cfe
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoJGit v5.0.0.201805221745-rc1 08/123108/1 v5.0.0.201805221745-rc1
Matthias Sohn [Tue, 22 May 2018 21:43:43 +0000 (23:43 +0200)]
JGit v5.0.0.201805221745-rc1

Change-Id: Ie2c35fab87f294b00f9754b07b60a848bf256b10
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'master' into stable-5.0 04/123104/1
Matthias Sohn [Tue, 22 May 2018 21:00:37 +0000 (23:00 +0200)]
Merge branch 'master' into stable-5.0

* master:
  DescribeCommand: Refactor to not use deprecated Repository#peel
  Repository: Deprecate #peel method
  Repository: Make #exactRef and #findRef final
  Skip ignored directories in FileTreeIterator
  Repository: Deprecate getTags method
  InfoRefsServlet: Refactor to not use deprecated methods
  RefAdvertiser: Add send(Collection<Ref>) and deprecate send(Map<String, Ref>)
  Remove deprecated Repository#notifyIndexChanged
  Implementors should override Repository#notifyIndexChanged(boolean)
  Revive Repository#notifyIndexChanged()
  Remove further unnecessary 'final' keywords
  Execute AdvertiseRefsHook only for protocol v0 and v1
  Add protocol v2 support in "jgit daemon"
  Teach UploadPack "ofs-delta" in "fetch"
  Teach UploadPack "include-tag" in "fetch"
  Avoid using #refs in UploadPack#sendPack
  FileRepository: Don't use deprecated RefDatabase#getRefs(String)
  BatchRefUpdate: Don't use deprecated RefDatabase#getRefs(String)

Change-Id: I16c5da62d09262d3f4070aa0f466dd6c8352b5ea
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoDescribeCommand: Refactor to not use deprecated Repository#peel 36/123036/1
David Pursehouse [Tue, 22 May 2018 03:08:08 +0000 (12:08 +0900)]
DescribeCommand: Refactor to not use deprecated Repository#peel

Change-Id: I76073ad62d1bc4fc21d8a1f5fc7eb92060a73baa
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoRepository: Deprecate #peel method 35/123035/2
David Pursehouse [Tue, 22 May 2018 02:27:30 +0000 (11:27 +0900)]
Repository: Deprecate #peel method

Callers should use getRefDatabase().peel(ref) instead since it
doesn't swallow the IOException.

Adapt all trivial callers to user the alternative.

DescribeCommand still uses the deprecated method and is not adapted in
this change since it will require more refactoring to add handling of
the IOException.

Change-Id: I14d4a95a5e0570548753b9fc5c03d024dc3ff832
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoRepository: Make #exactRef and #findRef final 34/123034/3
David Pursehouse [Tue, 22 May 2018 00:47:16 +0000 (09:47 +0900)]
Repository: Make #exactRef and #findRef final

This means less cognitive overhead for both implementors and callers,
since this way we can guarantee that they are always synonyms for
RefDatabase#exactRef and RefDatabase#findRef, respectively.

Change-Id: Ic8aeb52fc7ed65672f3f6cd1da39a66908d88baa
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoSkip ignored directories in FileTreeIterator 37/120337/3
Thomas Wolf [Tue, 27 Mar 2018 20:22:09 +0000 (22:22 +0200)]
Skip ignored directories in FileTreeIterator

Make FileTreeIterator not enter ignored directories by default. We
only need to enter ignored directories if we do some operation against
git, and there is at least one tracked file underneath an ignored
directory.

Walking ignored directories should be avoided as much as possible as
it is a potential performance bottleneck. Some projects have a lot of
files or very deep hierarchies in ignored directories; walking those
may be costly (especially so on Windows). See for instance also bug
500106.

Provide a FileTreeIterator.setWalkIgnoredDirectories() operation to
force the iterator to iterate also through otherwise ignored
directories. Useful for tests (IgnoreNodeTest, CGitIgnoreTest), or
to implement things like "git ls-files --ignored".

Add tests in DirCacheCheckoutTest, and amend IndexDiffTest to test a
little bit more.

Bug: 388582
Change-Id: I6ff584a42c55a07120a4369fd308409431bdb94a
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
6 years agoRepository: Deprecate getTags method 17/123017/3
David Pursehouse [Mon, 21 May 2018 23:34:53 +0000 (08:34 +0900)]
Repository: Deprecate getTags method

Callers should use getRefDatabase().getRefsByPrefix(R_TAGS) instead.

Adjust the tests accordingly.

Bug: 534731
Change-Id: Ib28ae365e42720268996ff46e34cae1745ad545c
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoMerge changes Ibf6ee80d,I721db0f4,I7d014890
David Pursehouse [Mon, 21 May 2018 23:15:22 +0000 (19:15 -0400)]
Merge changes Ibf6ee80d,I721db0f4,I7d014890

* changes:
  Remove deprecated Repository#notifyIndexChanged
  Implementors should override Repository#notifyIndexChanged(boolean)
  Revive Repository#notifyIndexChanged()

6 years agoInfoRefsServlet: Refactor to not use deprecated methods 28/122728/4
David Pursehouse [Wed, 16 May 2018 03:07:34 +0000 (12:07 +0900)]
InfoRefsServlet: Refactor to not use deprecated methods

- Replace RefDatabase#getRefs(String) with #getRefsByPrefix(String)
- Replace RefAdvertiser#send(Map<String, Ref>) with #send(Collection<Ref>)

Bug: 534731
Change-Id: I25b617c3b0c54793cf4ab5b62f002e17745a5377
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoRefAdvertiser: Add send(Collection<Ref>) and deprecate send(Map<String, Ref>) 27/122727/4
David Pursehouse [Wed, 16 May 2018 03:03:02 +0000 (12:03 +0900)]
RefAdvertiser: Add send(Collection<Ref>) and deprecate send(Map<String, Ref>)

Bug: 534731
Change-Id: If15032a34dc62f420569e2b2b6d8e14e2dfed522
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoRemove deprecated Repository#notifyIndexChanged 72/122972/1
Jonathan Nieder [Fri, 18 May 2018 16:23:03 +0000 (09:23 -0700)]
Remove deprecated Repository#notifyIndexChanged

It is no longer used.

Change-Id: Ibf6ee80d5b6cd554295f4e657e087302770621b6

6 years agoImplementors should override Repository#notifyIndexChanged(boolean) 71/122971/1
Jonathan Nieder [Fri, 18 May 2018 16:16:16 +0000 (09:16 -0700)]
Implementors should override Repository#notifyIndexChanged(boolean)

Declare Repository#notifyIndexChanged() final and
Repository#notifyIndexChanged(boolean) abstract to force implementors
to switch to overriding the latter method.  This makes Repository less
error-prone to extend since implementors no longer need to remember to
override one of those two methods.

Change-Id: I721db0f4a4865db3b35212ee0a2045d5b31c96af
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoRevive Repository#notifyIndexChanged() 70/122970/1
Jonathan Nieder [Fri, 18 May 2018 16:15:30 +0000 (09:15 -0700)]
Revive Repository#notifyIndexChanged()

e9e150fdd24d (Store in IndexChangedEvent if it was caused by JGit
itself, 2018-05-13) modified Repository#notifyIndexChanged to take a
boolean argument to indicate whether the index change happened under
the current process's control or externally, for use by EGit.  In
other words, the function signature changed from

public abstract void notifyIndexChanged();

to

public abstract void notifyIndexChanged(boolean internal);

Callers outside JGit itself notifying a Repository about index changes
are expected to be rare, so this is not very disruptive to them.  In
most cases they would be notifying about changes that they made
themselves, so treating their notifyIndexChanged() calls as
notifyIndexChanged(true) should be relatively safe.

Implementors have the opposite problem: adding the new "abstract void
notifyIndexChanged(boolean)" method means they are obligated to
override it.  Add a default implementation that calls their existing
override of notifyIndexChanged() to make their migration easier.

The main downside is that authors of new Repository subclasses that
do not realize they need to override notifyIndexChanged would end up
with a default implementation which calls notifyIndexChanged(true),
in turn calling notifyIndexChanged() again and so on, resulting in
StackOverflowException.  Add an implementors' note to the class
Javadoc to avoid this issue.  A followup commit will force
implementors to adapt to the new API by changing the methods to

@Deprecated
public final void notifyIndexChanged() {
notifyIndexChanged(true);
}

public abstract void notifyIndexChanged(boolean internal);

Change-Id: I7d014890ee19abf283ea824d9baa9044bfdde130
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoRemove further unnecessary 'final' keywords 88/122788/2
Han-Wen Nienhuys [Wed, 16 May 2018 14:34:16 +0000 (16:34 +0200)]
Remove further unnecessary 'final' keywords

Remove it from

 * package private functions.

 * try blocks

 * for loops

this was done with the following python script:

$ cat f.py
import sys
import re
import os

def replaceFinal(m):
  return m.group(1) + "(" +  m.group(2).replace('final ', '') + ")"

methodDecl = re.compile(r"^([\t ]*[a-zA-Z_ ]+)\(([^)]*)\)")

def subst(fn):
  input = open(fn)
  os.rename(fn, fn + "~")

  dest = open(fn, 'w')
  for l in input:
    l = methodDecl.sub(replaceFinal, l)
    dest.write(l)
  dest.close()

for root, dirs, files in os.walk(".", topdown=False):
  for f in files:
    if not f.endswith('.java'):
      continue

    full = os.path.join(root, f)
    print full
    subst(full)

Change-Id: If533a75a417594fc893e7c669d2c1f0f6caeb7ca
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
6 years agoExecute AdvertiseRefsHook only for protocol v0 and v1 26/122726/3
Masaya Suzuki [Mon, 14 May 2018 21:13:11 +0000 (14:13 -0700)]
Execute AdvertiseRefsHook only for protocol v0 and v1

Refs are not advertised as part of the protocol v2 capability
advertisement. Don't call AdvertiseRefsHook.

Noticed because many implementations of AdvertiseRefsHook read all
refs in order to call UploadPack#setAdvertisedRefs, causing the
capability advertisement to be as slow as a v0 ref advertisement with
some RefDatabase implementations.

Such an AdvertiseRefsHook is of dubious utility (a better place to
determine which refs are advertised is in the RefDatabase
implementation itself, as in Gerrit), but at any rate since it's not
bringing about any benefit here, we can skip the hook call.

TODO:
- call an appropriate hook instead (https://bugs.eclipse.org/534847)
- add tests

[jn: fleshed out commit message; added TODO notes]

Change-Id: I6eb60ccfb251a45432954467a9ae9c1079a8c8b5
Signed-off-by: Masaya Suzuki <masayasuzuki@google.com>
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoAdd protocol v2 support in "jgit daemon" 54/119454/14
Jonathan Tan [Sat, 24 Feb 2018 00:55:03 +0000 (16:55 -0800)]
Add protocol v2 support in "jgit daemon"

With this patch, a server spawned by "jgit daemon" can be accessed using
protocol v2 from a Git client that supports it (for example, "git" with
the appropriate patches). This is only activated if the repository's
config has "protocol.version" be 2.

This required a change to the package-private #execute methods in
DaemonService to allow passing of extra parameters.

This has been tested with a patched Git.

Change-Id: Icf043efec7ce956d72b075fc6dc7a87d5a2da82a
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
6 years agoTeach UploadPack "ofs-delta" in "fetch" 53/119453/14
Jonathan Tan [Tue, 13 Mar 2018 20:29:46 +0000 (13:29 -0700)]
Teach UploadPack "ofs-delta" in "fetch"

Add support for the "ofs-delta" parameter in the "fetch" command in
the fetch-pack/upload-pack protocol v2.

Change-Id: I728cf986082fce4ddeb6a6435897692e15e60cc7
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
6 years agoTeach UploadPack "include-tag" in "fetch" 52/119452/14
Jonathan Tan [Tue, 13 Mar 2018 18:07:36 +0000 (11:07 -0700)]
Teach UploadPack "include-tag" in "fetch"

Add support for the "include-tag" parameter in the "fetch" command in
the fetch-pack/upload-pack protocol v2.

In order to determine which tags to include, only objects pointed to by
refs starting with "refs/tags/" are checked. This restriction is for
performance reasons and to match the behavior of Git (see add_ref_tag()
in builtin/pack-objects.c).

Change-Id: I7d70aa09bcc8a525218ff1559e286c2a610258ca
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoAvoid using #refs in UploadPack#sendPack 04/121604/7
Jonathan Tan [Mon, 23 Apr 2018 20:03:04 +0000 (13:03 -0700)]
Avoid using #refs in UploadPack#sendPack

When OPTION_INCLUDE_TAG is set, UploadPack#sendPack uses the #refs
instance variable as a source of information of tags. A subsequent patch
will need to supply this information to #sendPack without
modifying #refs, so refactor #sendPack to take in this information
through a parameter instead.

Note that prior to this patch, #refs was used twice in #sendPack: once
to generate the argument to PackWriter#setTagTargets, and once to
determine if any tags need to be included in the packfile. This patch
only updates the latter use, since the former is meant not only for
"true" tag targets but any object that should be hoisted earlier during
packing (see the documentation of PackWriter#setTagTargets).

This patch does not introduce any functionality change.

Change-Id: I70ed65a1041334abeda8d4bac98cce7cae7efcdf
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrn@google.com>
6 years agoPrepare 5.0.0-SNAPSHOT builds 24/122824/1
Matthias Sohn [Wed, 16 May 2018 20:23:51 +0000 (22:23 +0200)]
Prepare 5.0.0-SNAPSHOT builds

Change-Id: I65d7d74c6124507aa9cb2856c74db6a1a6935bab
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoJGit v5.0.0.201805151920-m7 23/122723/1 v5.0.0.201805151920-m7
Matthias Sohn [Tue, 15 May 2018 23:20:14 +0000 (01:20 +0200)]
JGit v5.0.0.201805151920-m7

Change-Id: I42eb046c8ac8537672010aabe21459293cb23838
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoFileRepository: Don't use deprecated RefDatabase#getRefs(String) 28/122628/2
David Pursehouse [Tue, 15 May 2018 04:41:15 +0000 (13:41 +0900)]
FileRepository: Don't use deprecated RefDatabase#getRefs(String)

Change-Id: Iec58c973537ddbe0f4e6b8b62fcda5cecc961661
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoBatchRefUpdate: Don't use deprecated RefDatabase#getRefs(String) 25/122625/3
David Pursehouse [Tue, 15 May 2018 00:56:32 +0000 (09:56 +0900)]
BatchRefUpdate: Don't use deprecated RefDatabase#getRefs(String)

Change-Id: I672c9cfe221ddc4acbde7a8040bd6ba83b16626e
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
6 years agoRemove 'final' in parameter lists 05/122605/3
Han-Wen Nienhuys [Mon, 14 May 2018 16:42:02 +0000 (18:42 +0200)]
Remove 'final' in parameter lists

Change-Id: Id924f79c8b2c720297ebc49bf9c5d4ddd6d52547
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
6 years agoFixup javadoc and formatting in RawText and RawParseUtils 97/122597/6
Han-Wen Nienhuys [Mon, 14 May 2018 15:21:39 +0000 (17:21 +0200)]
Fixup javadoc and formatting in RawText and RawParseUtils

Change-Id: I9d6002941a33ec204d29e4fd920dde965387bb24
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
6 years agoRawParseUtils#lineMap: Simplify by using null sentinel internally 00/122600/2
Jonathan Nieder [Mon, 14 May 2018 15:54:01 +0000 (08:54 -0700)]
RawParseUtils#lineMap: Simplify by using null sentinel internally

Add an internal lineMapOrNull helper that returns null when the file
is binary.

This is simpler than using an exception for control flow and avoids
having to override fillInStackTrace to avoid a performance regression.

Change-Id: Ib8bb8df6a6bbd60c62cfb3b4c484a962a98b7507

6 years agoStore in IndexChangedEvent if it was caused by JGit itself 48/122548/2
Matthias Sohn [Sun, 13 May 2018 19:37:21 +0000 (21:37 +0200)]
Store in IndexChangedEvent if it was caused by JGit itself

This allows to differentiate if index was changed by an external git
command or by JGit itself.

Change-Id: Iae692ba7d9bf01a288b3fb2dc2d07aec9891c712
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoIntroduce new RawText constructor and RawParseUtils.lineMapOrBinary 82/121382/6
Han-Wen Nienhuys [Wed, 18 Apr 2018 21:37:25 +0000 (23:37 +0200)]
Introduce new RawText constructor and RawParseUtils.lineMapOrBinary

This makes binary detection exact in ResolveMerger and DiffFormatter

This has the same intention as
Id4342a199628d9406bfa04af1b023c27a47d4014 but preserves backward
compatibility of the signature of RawParseUtils.lineMap.

Change-Id: Ia24a4e716592bab3363ae24e3a46315a7511154f
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoUse a secure random generator to seed nonce for digest authentication 76/122476/1
Matthias Sohn [Fri, 11 May 2018 12:06:53 +0000 (14:06 +0200)]
Use a secure random generator to seed nonce for digest authentication

https://tools.ietf.org/html/rfc7616 says:

5.12.  Parameter Randomness

The security of this protocol is critically dependent on the
randomness of the randomly chosen parameters, such as client and
server nonces.  These should be generated by a strong random or
properly seeded pseudorandom source (see [RFC4086]).

Change-Id: I4da5316cb1eb3f59ae06c070ce1c3335e9ee87d6
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge "Merge branch 'stable-4.10' into stable-4.11" into stable-4.11
Matthias Sohn [Thu, 10 May 2018 13:24:45 +0000 (09:24 -0400)]
Merge "Merge branch 'stable-4.10' into stable-4.11" into stable-4.11

6 years agoMerge branch 'stable-4.11' 94/122394/3
Matthias Sohn [Thu, 10 May 2018 11:41:45 +0000 (13:41 +0200)]
Merge branch 'stable-4.11'

* stable-4.11:
  Retry stale file handles on .git/config file

Change-Id: I4fe6152c3c40dde9cb88913cc9706852de0fd712
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-4.10' into stable-4.11 11/122411/1
Matthias Sohn [Thu, 10 May 2018 10:55:30 +0000 (12:55 +0200)]
Merge branch 'stable-4.10' into stable-4.11

* stable-4.10:
  Retry stale file handles on .git/config file

Change-Id: Ice5c8ae8c2992243a81da77e166406bc1930fe0e

6 years agoMerge branch 'stable-4.9' into stable-4.10 01/122401/1
Matthias Sohn [Thu, 10 May 2018 10:51:57 +0000 (12:51 +0200)]
Merge branch 'stable-4.9' into stable-4.10

* stable-4.9:
  Retry stale file handles on .git/config file

Change-Id: I6db7256dbd1c71b23e1231809642ca21e996e066
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
6 years agoMerge branch 'stable-4.8' into stable-4.9 00/122400/1
Matthias Sohn [Thu, 10 May 2018 10:30:05 +0000 (12:30 +0200)]
Merge branch 'stable-4.8' into stable-4.9

* stable-4.8:
  Retry stale file handles on .git/config file

Change-Id: Ib029b5536c038190626e7a7ff43b70f0a5673721