Merge branch 'master' into next

* master: (47 commits)
  Fix @since from commit 64d0aaa2
  Prepare 5.13.0-SNAPSHOT builds
  Prepare 5.12.1-SNAPSHOT builds
  Teach independent negotiation (no pack file) using an option "wait-for-done"
  JGit v5.12.0.202106070339-r
  [license-check] Update list of project dependencies
  [errorprone] Fix warning InputStreamSlowMultibyteRead
  [errorprone] Make operator precedence explicit in OpenSshConfigFile
  Update jetty to 9.4.41.v20210516
  Prepare 5.1.17-SNAPSHOT builds
  JGit v5.1.16.202106041830-r
  Update Orbit to R20210602031627
  Prepare 5.12.0-SNAPSHOT builds
  Fixing visibility for HostEntry constructors.
  JGit v5.12.0.202106021050-rc1
  Prepare 5.12.0-SNAPSHOT builds
  JGit v5.12.0.202106011439-rc1
  Clarify operator precedence to fix errorprone error
  Prepare 5.12.0-SNAPSHOT builds
  Update Orbit to S20210518003616 and ant to 1.10.10.v20210426-1926
  ...

Change-Id: I76a1f155201648a62df11a41a9e02d97f522d00f
This commit is contained in:
Matthias Sohn 2021-06-15 00:05:14 +02:00
commit 6a8afeb9f2
104 changed files with 3219 additions and 737 deletions

View File

@ -12,8 +12,8 @@ maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.9.0, Apache-2.0, approved, c
maven/mavencentral/net.bytebuddy/byte-buddy/1.9.0, Apache-2.0, approved, clearlydefined maven/mavencentral/net.bytebuddy/byte-buddy/1.9.0, Apache-2.0, approved, clearlydefined
maven/mavencentral/net.i2p.crypto/eddsa/0.3.0, CC0, approved, CQ17804 maven/mavencentral/net.i2p.crypto/eddsa/0.3.0, CC0, approved, CQ17804
maven/mavencentral/net.sf.jopt-simple/jopt-simple/4.6, MIT, approved, clearlydefined maven/mavencentral/net.sf.jopt-simple/jopt-simple/4.6, MIT, approved, clearlydefined
maven/mavencentral/org.apache.ant/ant-launcher/1.10.8, Apache-2.0 AND W3C AND LicenseRef-Public-Domain, approved, CQ15560 maven/mavencentral/org.apache.ant/ant-launcher/1.10.10, Apache-2.0 AND W3C AND LicenseRef-Public-Domain, approved, CQ15560
maven/mavencentral/org.apache.ant/ant/1.10.8, Apache-2.0 AND W3C AND LicenseRef-Public-Domain, approved, CQ15560 maven/mavencentral/org.apache.ant/ant/1.10.10, Apache-2.0 AND W3C AND LicenseRef-Public-Domain, approved, CQ15560
maven/mavencentral/org.apache.commons/commons-compress/1.19, Apache-2.0, approved, clearlydefined maven/mavencentral/org.apache.commons/commons-compress/1.19, Apache-2.0, approved, clearlydefined
maven/mavencentral/org.apache.commons/commons-math3/3.2, Apache-2.0, approved, clearlydefined maven/mavencentral/org.apache.commons/commons-math3/3.2, Apache-2.0, approved, clearlydefined
maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0, approved, CQ22761 maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0, approved, CQ22761
@ -26,35 +26,35 @@ maven/mavencentral/org.assertj/assertj-core/3.14.0, Apache-2.0, approved, clearl
maven/mavencentral/org.bouncycastle/bcpg-jdk15on/1.65, Apache-2.0, approved, CQ21975 maven/mavencentral/org.bouncycastle/bcpg-jdk15on/1.65, Apache-2.0, approved, CQ21975
maven/mavencentral/org.bouncycastle/bcpkix-jdk15on/1.65, MIT AND LicenseRef-Public-Domain, approved, CQ21976 maven/mavencentral/org.bouncycastle/bcpkix-jdk15on/1.65, MIT AND LicenseRef-Public-Domain, approved, CQ21976
maven/mavencentral/org.bouncycastle/bcprov-jdk15on/1.65.01, MIT AND LicenseRef-Public-Domain, approved, CQ21977 maven/mavencentral/org.bouncycastle/bcprov-jdk15on/1.65.01, MIT AND LicenseRef-Public-Domain, approved, CQ21977
maven/mavencentral/org.eclipse.jetty/jetty-http/9.4.36.v20210114, , approved, eclipse maven/mavencentral/org.eclipse.jetty/jetty-http/9.4.41.v20210516, , approved, eclipse
maven/mavencentral/org.eclipse.jetty/jetty-io/9.4.36.v20210114, , approved, eclipse maven/mavencentral/org.eclipse.jetty/jetty-io/9.4.41.v20210516, , approved, eclipse
maven/mavencentral/org.eclipse.jetty/jetty-security/9.4.36.v20210114, , approved, eclipse maven/mavencentral/org.eclipse.jetty/jetty-security/9.4.41.v20210516, , approved, eclipse
maven/mavencentral/org.eclipse.jetty/jetty-server/9.4.36.v20210114, , approved, eclipse maven/mavencentral/org.eclipse.jetty/jetty-server/9.4.41.v20210516, , approved, eclipse
maven/mavencentral/org.eclipse.jetty/jetty-servlet/9.4.36.v20210114, , approved, eclipse maven/mavencentral/org.eclipse.jetty/jetty-servlet/9.4.41.v20210516, , approved, eclipse
maven/mavencentral/org.eclipse.jetty/jetty-util-ajax/9.4.36.v20210114, , approved, eclipse maven/mavencentral/org.eclipse.jetty/jetty-util-ajax/9.4.41.v20210516, , approved, eclipse
maven/mavencentral/org.eclipse.jetty/jetty-util/9.4.36.v20210114, , approved, eclipse maven/mavencentral/org.eclipse.jetty/jetty-util/9.4.41.v20210516, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant.test/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant.test/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.archive/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.archive/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.gpg.bc/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.gpg.bc/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.apache/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.apache/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.server/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.server/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.test/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.test/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.http/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.http/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.ssh/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.ssh/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server.test/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server.test/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.test/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.test/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm.test/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm.test/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.test/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.test/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.jsch/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.jsch/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.test/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.test/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ui/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ui/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit/5.11.0-SNAPSHOT, , approved, eclipse maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit/5.12.0-SNAPSHOT, , approved, eclipse
maven/mavencentral/org.hamcrest/hamcrest-core/1.3, BSD-2-Clause, approved, CQ7063 maven/mavencentral/org.hamcrest/hamcrest-core/1.3, BSD-2-Clause, approved, CQ7063
maven/mavencentral/org.mockito/mockito-core/2.23.0, MIT, approved, CQ17976 maven/mavencentral/org.mockito/mockito-core/2.23.0, MIT, approved, CQ17976
maven/mavencentral/org.objenesis/objenesis/2.6, Apache-2.0, approved, CQ15478 maven/mavencentral/org.objenesis/objenesis/2.6, Apache-2.0, approved, CQ15478

View File

@ -237,55 +237,55 @@ maven_jar(
sha1 = "9180733b7df8542621dc12e21e87557e8c99b8cb", sha1 = "9180733b7df8542621dc12e21e87557e8c99b8cb",
) )
JETTY_VER = "9.4.40.v20210413" JETTY_VER = "9.4.41.v20210516"
maven_jar( maven_jar(
name = "jetty-servlet", name = "jetty-servlet",
artifact = "org.eclipse.jetty:jetty-servlet:" + JETTY_VER, artifact = "org.eclipse.jetty:jetty-servlet:" + JETTY_VER,
sha1 = "41abc058d311baae3fe5411223e4108af212a24a", sha1 = "ea45368ea7fd04026038f89e6910f17f70939641",
src_sha1 = "2e5b2319bce4c74d760106db05deed2a405041ce", src_sha1 = "4acf6b0d1449ccd39b195783e3639ab0da51f7bf",
) )
maven_jar( maven_jar(
name = "jetty-security", name = "jetty-security",
artifact = "org.eclipse.jetty:jetty-security:" + JETTY_VER, artifact = "org.eclipse.jetty:jetty-security:" + JETTY_VER,
sha1 = "0c2807eff66ca21b565276e69aa8502524beb204", sha1 = "5ba69b1189a9d1f425ed03cbc2c901e0e6023c4d",
src_sha1 = "b4873ec0ab5acc8a383df4dc9046ad5361b5616f", src_sha1 = "d46f8cb4dad66751d3a588309c6bbc15b80fbad4",
) )
maven_jar( maven_jar(
name = "jetty-server", name = "jetty-server",
artifact = "org.eclipse.jetty:jetty-server:" + JETTY_VER, artifact = "org.eclipse.jetty:jetty-server:" + JETTY_VER,
sha1 = "a6d22f20c863d2d7669dbc2399a1a3b25b0f8a20", sha1 = "25b1963b0a1c56202ec37046adc55861815107ce",
src_sha1 = "09f789d2959ea38813be6bd2b751bba9db3a4494", src_sha1 = "a7f82c9df737316cf0dfafe4a33ca4ae89d780db",
) )
maven_jar( maven_jar(
name = "jetty-http", name = "jetty-http",
artifact = "org.eclipse.jetty:jetty-http:" + JETTY_VER, artifact = "org.eclipse.jetty:jetty-http:" + JETTY_VER,
sha1 = "dea7e5fe28a6580d6900e77d836e650aeecfa9c8", sha1 = "0d460bece4dd9666b46cbd18f8d7fd31cf02ecd9",
src_sha1 = "b161959fac6fd932031022ac3fb8b6c34a422feb", src_sha1 = "6fa009d950b8fdab8e94003e6295c08d42ee85b7",
) )
maven_jar( maven_jar(
name = "jetty-io", name = "jetty-io",
artifact = "org.eclipse.jetty:jetty-io:" + JETTY_VER, artifact = "org.eclipse.jetty:jetty-io:" + JETTY_VER,
sha1 = "c420368a360c20b40a57897676d581462d0a54c0", sha1 = "820eea368623939c2113902b1ca7a98186f64a73",
src_sha1 = "6ae54fba76b91f24ec5880202920f0a61b1b050b", src_sha1 = "4373285dafb5f79210815d9c15de106cc3e9ac4d",
) )
maven_jar( maven_jar(
name = "jetty-util", name = "jetty-util",
artifact = "org.eclipse.jetty:jetty-util:" + JETTY_VER, artifact = "org.eclipse.jetty:jetty-util:" + JETTY_VER,
sha1 = "1ab1a4f33f293110fdfb3da1911b2a00da78019b", sha1 = "548c76ea00d7eb3e2bcea273174e5d030639d109",
src_sha1 = "9d537ad9d22c7edfac0e38ba5afc04632716dca5", src_sha1 = "ba188de552a0c310f69cf12bea887413ce8f0e78",
) )
maven_jar( maven_jar(
name = "jetty-util-ajax", name = "jetty-util-ajax",
artifact = "org.eclipse.jetty:jetty-util-ajax:" + JETTY_VER, artifact = "org.eclipse.jetty:jetty-util-ajax:" + JETTY_VER,
sha1 = "62014fb386f1c3dce53029165fd76435bcb8bb6c", sha1 = "d4c1d66fc62796a17548e6c344fbf89b5889f873",
src_sha1 = "99df1bf89bdd11c9caa0e56cc802b949f896e3d9", src_sha1 = "b60cf77be68137eee4ee13d83c47d684d14b6d90",
) )
BOUNCYCASTLE_VER = "1.65" BOUNCYCASTLE_VER = "1.65"

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.10" sequenceNumber="1619186290"> <target name="jgit-4.10" sequenceNumber="1623012846">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.10" with source configurePhase target "jgit-4.10" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2018-12/" { location "https://download.eclipse.org/releases/2018-12/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.11" sequenceNumber="1619186290"> <target name="jgit-4.11" sequenceNumber="1623012873">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.11" with source configurePhase target "jgit-4.11" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2019-03/" { location "https://download.eclipse.org/releases/2019-03/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.12" sequenceNumber="1619186290"> <target name="jgit-4.12" sequenceNumber="1623012873">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.12" with source configurePhase target "jgit-4.12" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2019-06/" { location "https://download.eclipse.org/releases/2019-06/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.13" sequenceNumber="1619186290"> <target name="jgit-4.13" sequenceNumber="1623012873">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.13" with source configurePhase target "jgit-4.13" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2019-09/" { location "https://download.eclipse.org/releases/2019-09/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.14" sequenceNumber="1619186289"> <target name="jgit-4.14" sequenceNumber="1623012870">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.14" with source configurePhase target "jgit-4.14" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2019-12/201912181000/" { location "https://download.eclipse.org/releases/2019-12/201912181000/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.15" sequenceNumber="1619186289"> <target name="jgit-4.15" sequenceNumber="1623012870">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.15" with source configurePhase target "jgit-4.15" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2020-03/202003181000/" { location "https://download.eclipse.org/releases/2020-03/202003181000/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.16" sequenceNumber="1619186290"> <target name="jgit-4.16" sequenceNumber="1623012874">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.16" with source configurePhase target "jgit-4.16" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2020-06/" { location "https://download.eclipse.org/releases/2020-06/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.17" sequenceNumber="1619186290"> <target name="jgit-4.17" sequenceNumber="1623012875">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.17" with source configurePhase target "jgit-4.17" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2020-09/" { location "https://download.eclipse.org/releases/2020-09/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.18" sequenceNumber="1619186290"> <target name="jgit-4.18" sequenceNumber="1623012874">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.18" with source configurePhase target "jgit-4.18" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2020-12/" { location "https://download.eclipse.org/releases/2020-12/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.19-staging" sequenceNumber="1619186288"> <target name="jgit-4.19-staging" sequenceNumber="1623012870">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.19-staging" with source configurePhase target "jgit-4.19-staging" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/staging/2021-03/" { location "https://download.eclipse.org/staging/2021-03/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.20-staging" sequenceNumber="1619186291"> <target name="jgit-4.20-staging" sequenceNumber="1623012876">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.20-staging" with source configurePhase target "jgit-4.20-staging" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/staging/2021-06/" { location "https://download.eclipse.org/staging/2021-06/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.6" sequenceNumber="1619186309"> <target name="jgit-4.6" sequenceNumber="1623012886">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.6" with source configurePhase target "jgit-4.6" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/neon/" { location "https://download.eclipse.org/releases/neon/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.7" sequenceNumber="1619186297"> <target name="jgit-4.7" sequenceNumber="1623012878">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.7" with source configurePhase target "jgit-4.7" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/oxygen/" { location "https://download.eclipse.org/releases/oxygen/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.8" sequenceNumber="1619186290"> <target name="jgit-4.8" sequenceNumber="1623012874">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.8" with source configurePhase target "jgit-4.8" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/photon/" { location "https://download.eclipse.org/releases/photon/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?> <?pde?>
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
<target name="jgit-4.9" sequenceNumber="1619186290"> <target name="jgit-4.9" sequenceNumber="1623012874">
<locations> <locations>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.jetty.client" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.client.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.continuation.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.http.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.io.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.security.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.server.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.servlet.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
<unit id="org.eclipse.jetty.util.ajax.source" version="9.4.40.v20210413"/> <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
<repository id="jetty-9.4.36" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/"/> <repository id="jetty-9.4.40" location="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="com.google.gson" version="2.8.6.v20201231-1626"/> <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
@ -41,8 +41,8 @@
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
<unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
<unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/> <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
<unit id="org.apache.ant" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.ant.source" version="1.10.9.v20201106-1946"/> <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
<unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
<unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/> <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
@ -86,7 +86,7 @@
<unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/> <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
<unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
<unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/> <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository"/> <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
</location> </location>
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
<unit id="org.eclipse.osgi" version="0.0.0"/> <unit id="org.eclipse.osgi" version="0.0.0"/>

View File

@ -1,7 +1,7 @@
target "jgit-4.9" with source configurePhase target "jgit-4.9" with source configurePhase
include "projects/jetty-9.4.x.tpd" include "projects/jetty-9.4.x.tpd"
include "orbit/S20210406213021.tpd" include "orbit/R20210602031627-2021-06.tpd"
location "https://download.eclipse.org/releases/2018-09/" { location "https://download.eclipse.org/releases/2018-09/" {
org.eclipse.osgi lazy org.eclipse.osgi lazy

View File

@ -1,7 +1,7 @@
target "S20210406213021" with source configurePhase target "R20210602031627-2021-06" with source configurePhase
// see https://download.eclipse.org/tools/orbit/downloads/ // see https://download.eclipse.org/tools/orbit/downloads/
location "https://download.eclipse.org/tools/orbit/downloads/drops/S20210406213021/repository" { location "https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository" {
com.google.gson [2.8.6.v20201231-1626,2.8.6.v20201231-1626] com.google.gson [2.8.6.v20201231-1626,2.8.6.v20201231-1626]
com.google.gson.source [2.8.6.v20201231-1626,2.8.6.v20201231-1626] com.google.gson.source [2.8.6.v20201231-1626,2.8.6.v20201231-1626]
com.jcraft.jsch [0.1.55.v20190404-1902,0.1.55.v20190404-1902] com.jcraft.jsch [0.1.55.v20190404-1902,0.1.55.v20190404-1902]
@ -18,8 +18,8 @@ location "https://download.eclipse.org/tools/orbit/downloads/drops/S202104062130
net.bytebuddy.byte-buddy.source [1.9.0.v20181107-1410,1.9.0.v20181107-1410] net.bytebuddy.byte-buddy.source [1.9.0.v20181107-1410,1.9.0.v20181107-1410]
net.i2p.crypto.eddsa [0.3.0.v20181102-1323,0.3.0.v20181102-1323] net.i2p.crypto.eddsa [0.3.0.v20181102-1323,0.3.0.v20181102-1323]
net.i2p.crypto.eddsa.source [0.3.0.v20181102-1323,0.3.0.v20181102-1323] net.i2p.crypto.eddsa.source [0.3.0.v20181102-1323,0.3.0.v20181102-1323]
org.apache.ant [1.10.9.v20201106-1946,1.10.9.v20201106-1946] org.apache.ant [1.10.10.v20210426-1926,1.10.10.v20210426-1926]
org.apache.ant.source [1.10.9.v20201106-1946,1.10.9.v20201106-1946] org.apache.ant.source [1.10.10.v20210426-1926,1.10.10.v20210426-1926]
org.apache.commons.codec [1.14.0.v20200818-1422,1.14.0.v20200818-1422] org.apache.commons.codec [1.14.0.v20200818-1422,1.14.0.v20200818-1422]
org.apache.commons.codec.source [1.14.0.v20200818-1422,1.14.0.v20200818-1422] org.apache.commons.codec.source [1.14.0.v20200818-1422,1.14.0.v20200818-1422]
org.apache.commons.compress [1.19.0.v20200106-2343,1.19.0.v20200106-2343] org.apache.commons.compress [1.19.0.v20200106-2343,1.19.0.v20200106-2343]

View File

@ -1,22 +1,22 @@
target "jetty-9.4.x" with source configurePhase target "jetty-9.4.x" with source configurePhase
location jetty-9.4.40 "https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.40.v20210413/" { location jetty-9.4.40 "https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.41.v20210516/" {
org.eclipse.jetty.client [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.client [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.client.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.client.source [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.continuation [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.continuation [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.continuation.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.continuation.source [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.http [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.http [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.http.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.http.source [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.io [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.io [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.io.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.io.source [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.security [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.security [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.security.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.security.source [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.server [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.server [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.server.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.server.source [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.servlet [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.servlet [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.servlet.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.servlet.source [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.util [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.util [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.util.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.util.source [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.util.ajax [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.util.ajax [9.4.41.v20210516,9.4.41.v20210516]
org.eclipse.jetty.util.ajax.source [9.4.40.v20210413,9.4.40.v20210413] org.eclipse.jetty.util.ajax.source [9.4.41.v20210516,9.4.41.v20210516]
} }

View File

@ -0,0 +1,75 @@
/*
* Copyright (C) 2021, kylezhao <kylezhao@tencent.com> and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.pgm;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.CLIRepositoryTestCase;
import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Before;
import org.junit.Test;
public class RevListTest extends CLIRepositoryTestCase {
private Git git;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
git = new Git(db);
}
@Test
public void testWithParentsFlag() throws Exception {
List<RevCommit> commits = createCommitsForParentsFlag(git);
String result = toString(
execute("git rev-list HEAD --parents -- Test.txt"));
String expect = toString(
commits.get(3).name() + ' ' + commits.get(1).name(),
commits.get(1).name());
assertEquals(expect, result);
}
@Test
public void testWithoutParentsFlag() throws Exception {
List<RevCommit> commits = createCommitsForParentsFlag(git);
String result = toString(execute("git rev-list HEAD -- Test.txt"));
String expect = toString(commits.get(3).name(), commits.get(1).name());
assertEquals(expect, result);
}
private List<RevCommit> createCommitsForParentsFlag(Git git)
throws Exception {
List<RevCommit> commits = new ArrayList<>();
writeTrashFile("Test1.txt", "Hello world");
git.add().addFilepattern("Test1.txt").call();
commits.add(git.commit().setMessage("commit#0").call());
writeTrashFile("Test.txt", "Hello world!");
git.add().addFilepattern("Test.txt").call();
commits.add(git.commit().setMessage("commit#1").call());
writeTrashFile("Test1.txt", "Hello world!!");
git.add().addFilepattern("Test1.txt").call();
commits.add(git.commit().setMessage("commit#2").call());
writeTrashFile("Test.txt", "Hello world!!!");
git.add().addFilepattern("Test.txt").call();
commits.add(git.commit().setMessage("commit#3").call());
return commits;
}
}

View File

@ -129,6 +129,9 @@ protected void run() throws Exception {
walk.setTreeFilter(AndTreeFilter.create(pathFilter, walk.setTreeFilter(AndTreeFilter.create(pathFilter,
TreeFilter.ANY_DIFF)); TreeFilter.ANY_DIFF));
} }
if (parents) {
walk.setRewriteParents(true);
}
if (revLimiter.size() == 1) if (revLimiter.size() == 1)
walk.setRevFilter(revLimiter.get(0)); walk.setRevFilter(revLimiter.get(0));

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2008, 2017 Google Inc. and others * Copyright (C) 2008, 2021 Google Inc. and others
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at * terms of the Eclipse Distribution License v. 1.0 which is available at
@ -517,4 +517,76 @@ public void testEnVarSubstitution() throws Exception {
assertEquals("/tmp/${TST_VAR/bar", assertEquals("/tmp/${TST_VAR/bar",
c.getValue(SshConstants.IDENTITY_AGENT)); c.getValue(SshConstants.IDENTITY_AGENT));
} }
@Test
public void testNegativeMatch() throws Exception {
config("Host foo.bar !foobar.baz *.baz\n" + "Port 29418\n");
Host h = osc.lookup("foo.bar");
assertNotNull(h);
assertEquals(29418, h.getPort());
h = osc.lookup("foobar.baz");
assertNotNull(h);
assertEquals(22, h.getPort());
h = osc.lookup("foo.baz");
assertNotNull(h);
assertEquals(29418, h.getPort());
}
@Test
public void testNegativeMatch2() throws Exception {
// Negative match after the positive match.
config("Host foo.bar *.baz !foobar.baz\n" + "Port 29418\n");
Host h = osc.lookup("foo.bar");
assertNotNull(h);
assertEquals(29418, h.getPort());
h = osc.lookup("foobar.baz");
assertNotNull(h);
assertEquals(22, h.getPort());
h = osc.lookup("foo.baz");
assertNotNull(h);
assertEquals(29418, h.getPort());
}
@Test
public void testNoMatch() throws Exception {
config("Host !host1 !host2\n" + "Port 29418\n");
Host h = osc.lookup("host1");
assertNotNull(h);
assertEquals(22, h.getPort());
h = osc.lookup("host2");
assertNotNull(h);
assertEquals(22, h.getPort());
h = osc.lookup("host3");
assertNotNull(h);
assertEquals(22, h.getPort());
}
@Test
public void testMultipleMatch() throws Exception {
config("Host foo.bar\nPort 29418\nIdentityFile /foo\n\n"
+ "Host *.bar\nPort 22\nIdentityFile /bar\n"
+ "Host foo.bar\nPort 47\nIdentityFile /baz\n");
Host h = osc.lookup("foo.bar");
assertNotNull(h);
assertEquals(29418, h.getPort());
assertArrayEquals(new Object[] { "/foo", "/bar", "/baz" },
h.getConfig().getValues("IdentityFile"));
}
@Test
public void testWhitespace() throws Exception {
config("Host foo \tbar baz\nPort 29418\n");
Host h = osc.lookup("foo");
assertNotNull(h);
assertEquals(29418, h.getPort());
h = osc.lookup("bar");
assertNotNull(h);
assertEquals(29418, h.getPort());
h = osc.lookup("baz");
assertNotNull(h);
assertEquals(29418, h.getPort());
h = osc.lookup("\tbar");
assertNotNull(h);
assertEquals(22, h.getPort());
}
} }

View File

@ -1,5 +1,6 @@
#Sat Dec 20 21:21:24 CET 2008
eclipse.preferences.version=1 eclipse.preferences.version=1
encoding//tst-rsrc/org/eclipse/jgit/diff/umlaut.patch=ISO-8859-1
encoding//tst-rsrc/org/eclipse/jgit/diff/umlaut_PostImage=ISO-8859-1
encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_BothISO88591.patch=ISO-8859-1 encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_BothISO88591.patch=ISO-8859-1
encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_Convert.patch=ISO-8859-1 encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_Convert.patch=ISO-8859-1
encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_DiffCc.patch=ISO-8859-1 encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_DiffCc.patch=ISO-8859-1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2011, 2020 IBM Corporation and others * Copyright (C) 2011, 2021 IBM Corporation and others
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at * terms of the Eclipse Distribution License v. 1.0 which is available at
@ -9,6 +9,7 @@
*/ */
package org.eclipse.jgit.api; package org.eclipse.jgit.api;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
@ -18,11 +19,20 @@
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import org.eclipse.jgit.api.errors.PatchApplyException; import org.eclipse.jgit.api.errors.PatchApplyException;
import org.eclipse.jgit.api.errors.PatchFormatException; import org.eclipse.jgit.api.errors.PatchFormatException;
import org.eclipse.jgit.attributes.FilterCommand;
import org.eclipse.jgit.attributes.FilterCommandFactory;
import org.eclipse.jgit.attributes.FilterCommandRegistry;
import org.eclipse.jgit.diff.RawText; import org.eclipse.jgit.diff.RawText;
import org.eclipse.jgit.junit.RepositoryTestCase; import org.eclipse.jgit.junit.RepositoryTestCase;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.util.IO;
import org.junit.Test; import org.junit.Test;
public class ApplyCommandTest extends RepositoryTestCase { public class ApplyCommandTest extends RepositoryTestCase {
@ -57,6 +67,260 @@ private ApplyResult init(final String name, final boolean preExists,
} }
} }
@Test
public void testCrLf() throws Exception {
try {
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
ApplyResult result = init("crlf", true, true);
assertEquals(1, result.getUpdatedFiles().size());
assertEquals(new File(db.getWorkTree(), "crlf"),
result.getUpdatedFiles().get(0));
checkFile(new File(db.getWorkTree(), "crlf"),
b.getString(0, b.size(), false));
} finally {
db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF);
}
}
@Test
public void testCrLfOff() throws Exception {
try {
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
ApplyResult result = init("crlf", true, true);
assertEquals(1, result.getUpdatedFiles().size());
assertEquals(new File(db.getWorkTree(), "crlf"),
result.getUpdatedFiles().get(0));
checkFile(new File(db.getWorkTree(), "crlf"),
b.getString(0, b.size(), false));
} finally {
db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF);
}
}
@Test
public void testCrLfEmptyCommitted() throws Exception {
try {
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
ApplyResult result = init("crlf3", true, true);
assertEquals(1, result.getUpdatedFiles().size());
assertEquals(new File(db.getWorkTree(), "crlf3"),
result.getUpdatedFiles().get(0));
checkFile(new File(db.getWorkTree(), "crlf3"),
b.getString(0, b.size(), false));
} finally {
db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF);
}
}
@Test
public void testCrLfNewFile() throws Exception {
try {
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
ApplyResult result = init("crlf4", false, true);
assertEquals(1, result.getUpdatedFiles().size());
assertEquals(new File(db.getWorkTree(), "crlf4"),
result.getUpdatedFiles().get(0));
checkFile(new File(db.getWorkTree(), "crlf4"),
b.getString(0, b.size(), false));
} finally {
db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF);
}
}
@Test
public void testPatchWithCrLf() throws Exception {
try {
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
ApplyResult result = init("crlf2", true, true);
assertEquals(1, result.getUpdatedFiles().size());
assertEquals(new File(db.getWorkTree(), "crlf2"),
result.getUpdatedFiles().get(0));
checkFile(new File(db.getWorkTree(), "crlf2"),
b.getString(0, b.size(), false));
} finally {
db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF);
}
}
@Test
public void testPatchWithCrLf2() throws Exception {
String name = "crlf2";
try (Git git = new Git(db)) {
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
a = new RawText(readFile(name + "_PreImage"));
write(new File(db.getWorkTree(), name),
a.getString(0, a.size(), false));
git.add().addFilepattern(name).call();
git.commit().setMessage("PreImage").call();
b = new RawText(readFile(name + "_PostImage"));
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
ApplyResult result = git.apply()
.setPatch(getTestResource(name + ".patch")).call();
assertEquals(1, result.getUpdatedFiles().size());
assertEquals(new File(db.getWorkTree(), name),
result.getUpdatedFiles().get(0));
checkFile(new File(db.getWorkTree(), name),
b.getString(0, b.size(), false));
} finally {
db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOCRLF);
}
}
// Clean/smudge filter for testFiltering. The smudgetest test resources were
// created with C git using a clean filter sed -e "s/A/E/g" and the smudge
// filter sed -e "s/E/A/g". To keep the test independent of the presence of
// sed, implement this with a built-in filter.
private static class ReplaceFilter extends FilterCommand {
private final char toReplace;
private final char replacement;
ReplaceFilter(InputStream in, OutputStream out, char toReplace,
char replacement) {
super(in, out);
this.toReplace = toReplace;
this.replacement = replacement;
}
@Override
public int run() throws IOException {
int b = in.read();
if (b < 0) {
in.close();
out.close();
return -1;
}
if ((b & 0xFF) == toReplace) {
b = replacement;
}
out.write(b);
return 1;
}
}
@Test
public void testFiltering() throws Exception {
// Set up filter
FilterCommandFactory clean = (repo, in, out) -> {
return new ReplaceFilter(in, out, 'A', 'E');
};
FilterCommandFactory smudge = (repo, in, out) -> {
return new ReplaceFilter(in, out, 'E', 'A');
};
FilterCommandRegistry.register("jgit://builtin/a2e/clean", clean);
FilterCommandRegistry.register("jgit://builtin/a2e/smudge", smudge);
try (Git git = new Git(db)) {
Config config = db.getConfig();
config.setString(ConfigConstants.CONFIG_FILTER_SECTION, "a2e",
"clean", "jgit://builtin/a2e/clean");
config.setString(ConfigConstants.CONFIG_FILTER_SECTION, "a2e",
"smudge", "jgit://builtin/a2e/smudge");
write(new File(db.getWorkTree(), ".gitattributes"),
"smudgetest filter=a2e");
git.add().addFilepattern(".gitattributes").call();
git.commit().setMessage("Attributes").call();
ApplyResult result = init("smudgetest", true, true);
assertEquals(1, result.getUpdatedFiles().size());
assertEquals(new File(db.getWorkTree(), "smudgetest"),
result.getUpdatedFiles().get(0));
checkFile(new File(db.getWorkTree(), "smudgetest"),
b.getString(0, b.size(), false));
} finally {
// Tear down filter
FilterCommandRegistry.unregister("jgit://builtin/a2e/clean");
FilterCommandRegistry.unregister("jgit://builtin/a2e/smudge");
}
}
private void checkBinary(String name, boolean hasPreImage)
throws Exception {
checkBinary(name, hasPreImage, 1);
}
private void checkBinary(String name, boolean hasPreImage,
int numberOfFiles) throws Exception {
try (Git git = new Git(db)) {
byte[] post = IO
.readWholeStream(getTestResource(name + "_PostImage"), 0)
.array();
File f = new File(db.getWorkTree(), name);
if (hasPreImage) {
byte[] pre = IO
.readWholeStream(getTestResource(name + "_PreImage"), 0)
.array();
Files.write(f.toPath(), pre);
git.add().addFilepattern(name).call();
git.commit().setMessage("PreImage").call();
}
ApplyResult result = git.apply()
.setPatch(getTestResource(name + ".patch")).call();
assertEquals(numberOfFiles, result.getUpdatedFiles().size());
assertEquals(f, result.getUpdatedFiles().get(0));
assertArrayEquals(post, Files.readAllBytes(f.toPath()));
}
}
@Test
public void testBinaryDelta() throws Exception {
checkBinary("delta", true);
}
@Test
public void testBinaryLiteral() throws Exception {
checkBinary("literal", true);
}
@Test
public void testBinaryLiteralAdd() throws Exception {
checkBinary("literal_add", false);
}
@Test
public void testEncodingChange() throws Exception {
// This is a text patch that changes a file containing ÄÖÜ in UTF-8 to
// the same characters in ISO-8859-1. The patch file itself uses mixed
// encoding. Since checkFile() works with strings use the binary check.
checkBinary("umlaut", true);
}
@Test
public void testEmptyLine() throws Exception {
// C git accepts completely empty lines as empty context lines.
// According to comments in the C git sources (apply.c), newer GNU diff
// may produce such diffs.
checkBinary("emptyLine", true);
}
@Test
public void testMultiFileNoNewline() throws Exception {
// This test needs two files. One is in the test resources.
try (Git git = new Git(db)) {
Files.write(db.getWorkTree().toPath().resolve("yello"),
"yello".getBytes(StandardCharsets.US_ASCII));
git.add().addFilepattern("yello").call();
git.commit().setMessage("yello").call();
}
checkBinary("hello", true, 2);
}
@Test @Test
public void testAddA1() throws Exception { public void testAddA1() throws Exception {
ApplyResult result = init("A1", false, true); ApplyResult result = init("A1", false, true);

View File

@ -579,6 +579,57 @@ public void testInexactRename_LargeFile() throws Exception {
assertDelete(PATH_Q, bId, FileMode.REGULAR_FILE, entries.get(1)); assertDelete(PATH_Q, bId, FileMode.REGULAR_FILE, entries.get(1));
} }
@Test
public void testExactRenameForBinaryFile_isIdentified() throws Exception {
ObjectId aId = blob("a\nb\nc\n\0\0\0\0d\n");
DiffEntry a = DiffEntry.add(PATH_A, aId);
DiffEntry b = DiffEntry.delete(PATH_Q, aId);
rd.add(a);
rd.add(b);
List<DiffEntry> entries = rd.compute();
assertEquals(1, entries.size());
assertRename(b, a, 100, entries.get(0));
}
@Test
public void testInexactRenameForBinaryFile_identifiedByDefault() throws Exception {
ObjectId aId = blob("a\nb\nc\n\0\0\0\0d\n");
ObjectId bId = blob("a\nb\nc\n\0\0\0d\n");
DiffEntry a = DiffEntry.add(PATH_A, aId);
DiffEntry b = DiffEntry.delete(PATH_Q, bId);
rd.add(a);
rd.add(b);
rd.setRenameScore(40);
List<DiffEntry> entries = rd.compute();
assertEquals(1, entries.size());
assertRename(b, a, 50, entries.get(0));
}
@Test
public void testInexactRenameForBinaryFile_notIdentifiedIfSkipParameterSet() throws Exception {
ObjectId aId = blob("a\nb\nc\n\0\0\0\0d\n");
ObjectId bId = blob("a\nb\nc\n\0\0\0d\n");
DiffEntry a = DiffEntry.add(PATH_A, aId);
DiffEntry b = DiffEntry.delete(PATH_Q, bId);
rd.add(a);
rd.add(b);
rd.setRenameScore(40);
rd.setSkipContentRenamesForBinaryFiles(true);
List<DiffEntry> entries = rd.compute();
assertEquals(2, entries.size());
assertAdd(PATH_A, aId, FileMode.REGULAR_FILE, entries.get(0));
assertDelete(PATH_Q, bId, FileMode.REGULAR_FILE, entries.get(1));
}
@Test @Test
public void testSetRenameScore_IllegalArgs() throws Exception { public void testSetRenameScore_IllegalArgs() throws Exception {
try { try {

View File

@ -46,6 +46,8 @@
import org.eclipse.jgit.storage.file.FileBasedConfig; import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.TreeWalk;
import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.FS;
import org.eclipse.jgit.util.IO;
import org.eclipse.jgit.util.RawParseUtils;
import org.junit.Test; import org.junit.Test;
public class RepoCommandTest extends RepositoryTestCase { public class RepoCommandTest extends RepositoryTestCase {
@ -749,9 +751,55 @@ public void testRevisionBare() throws Exception {
String gitlink = localDb.resolve(Constants.HEAD + ":foo").name(); String gitlink = localDb.resolve(Constants.HEAD + ":foo").name();
assertEquals("The gitlink is same as remote head", assertEquals("The gitlink is same as remote head",
oldCommitId.name(), gitlink); oldCommitId.name(), gitlink);
File dotmodules = new File(localDb.getWorkTree(),
Constants.DOT_GIT_MODULES);
assertTrue(dotmodules.exists());
// The .gitmodules file should have "branch" lines
String gitModulesContents = RawParseUtils
.decode(IO.readFully(dotmodules));
assertTrue(gitModulesContents.contains("branch = branch"));
} }
} }
@Test
public void testRevisionBare_ignoreTags() throws Exception {
Repository remoteDb = createBareRepository();
Repository tempDb = createWorkRepository();
StringBuilder xmlContent = new StringBuilder();
xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
.append("<manifest>")
.append("<remote name=\"remote1\" fetch=\".\" />")
.append("<default revision=\"").append("refs/tags/" + TAG)
.append("\" remote=\"remote1\" />")
.append("<project path=\"foo\" name=\"")
.append(defaultUri)
.append("\" />").append("</manifest>");
JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
xmlContent.toString());
RepoCommand command = new RepoCommand(remoteDb);
command.setPath(
tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
.setURI(rootUri).call();
// Clone it
File directory = createTempDirectory("testReplaceManifestBare");
File dotmodules;
try (Repository localDb = Git.cloneRepository().setDirectory(directory)
.setURI(remoteDb.getDirectory().toURI().toString()).call()
.getRepository()) {
dotmodules = new File(localDb.getWorkTree(),
Constants.DOT_GIT_MODULES);
assertTrue(dotmodules.exists());
}
// The .gitmodules file should not have "branch" lines
String gitModulesContents = RawParseUtils
.decode(IO.readFully(dotmodules));
assertFalse(gitModulesContents.contains("branch"));
assertTrue(gitModulesContents.contains("ref = refs/tags/" + TAG));
}
@Test @Test
public void testCopyFileBare() throws Exception { public void testCopyFileBare() throws Exception {
Repository remoteDb = createBareRepository(); Repository remoteDb = createBareRepository();

View File

@ -190,14 +190,27 @@ public void simpleNoForce() throws IOException {
if (atomic) { if (atomic) {
assertResults(cmds, TRANSACTION_ABORTED, REJECTED_NONFASTFORWARD); assertResults(cmds, TRANSACTION_ABORTED, REJECTED_NONFASTFORWARD);
assertRefs("refs/heads/master", A, "refs/heads/masters", B); assertRefs("refs/heads/master", A, "refs/heads/masters", B);
assertEquals(1, refsChangedEvents);
} else { } else {
assertResults(cmds, OK, REJECTED_NONFASTFORWARD); assertResults(cmds, OK, REJECTED_NONFASTFORWARD);
assertRefs("refs/heads/master", B, "refs/heads/masters", B); assertRefs("refs/heads/master", B, "refs/heads/masters", B);
assertEquals(2, refsChangedEvents);
} }
} }
@Test
public void simpleNoForceRefsChangedEvents() throws IOException {
writeLooseRefs("refs/heads/master", A, "refs/heads/masters", B);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
new ReceiveCommand(B, A, "refs/heads/masters",
UPDATE_NONFASTFORWARD));
execute(newBatchUpdate(cmds));
assertEquals(atomic ? initialRefsChangedEvents
: initialRefsChangedEvents + 1, refsChangedEvents);
}
@Test @Test
public void simpleForce() throws IOException { public void simpleForce() throws IOException {
writeLooseRefs("refs/heads/master", A, "refs/heads/masters", B); writeLooseRefs("refs/heads/master", A, "refs/heads/masters", B);
@ -210,7 +223,21 @@ public void simpleForce() throws IOException {
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertRefs("refs/heads/master", B, "refs/heads/masters", A); assertRefs("refs/heads/master", B, "refs/heads/masters", A);
assertEquals(batchesRefUpdates() ? 2 : 3, refsChangedEvents); }
@Test
public void simpleForceRefsChangedEvents() throws IOException {
writeLooseRefs("refs/heads/master", A, "refs/heads/masters", B);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
new ReceiveCommand(B, A, "refs/heads/masters",
UPDATE_NONFASTFORWARD));
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true));
assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
} }
@Test @Test
@ -232,7 +259,27 @@ public boolean isMergedInto(RevCommit base, RevCommit tip) {
assertResults(cmds, OK); assertResults(cmds, OK);
assertRefs("refs/heads/master", A); assertRefs("refs/heads/master", A);
assertEquals(2, refsChangedEvents); }
@Test
public void nonFastForwardDoesNotDoExpensiveMergeCheckRefsChangedEvents()
throws IOException {
writeLooseRef("refs/heads/master", B);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(new ReceiveCommand(B, A,
"refs/heads/master", UPDATE_NONFASTFORWARD));
try (RevWalk rw = new RevWalk(diskRepo) {
@Override
public boolean isMergedInto(RevCommit base, RevCommit tip) {
throw new AssertionError("isMergedInto() should not be called");
}
}) {
newBatchUpdate(cmds).setAllowNonFastForwards(true).execute(rw,
new StrictWorkMonitor());
}
assertEquals(initialRefsChangedEvents + 1, refsChangedEvents);
} }
@Test @Test
@ -251,16 +298,29 @@ public void fileDirectoryConflict() throws IOException {
assertResults(cmds, LOCK_FAILURE, TRANSACTION_ABORTED, assertResults(cmds, LOCK_FAILURE, TRANSACTION_ABORTED,
TRANSACTION_ABORTED); TRANSACTION_ABORTED);
assertRefs("refs/heads/master", A, "refs/heads/masters", B); assertRefs("refs/heads/master", A, "refs/heads/masters", B);
assertEquals(1, refsChangedEvents);
} else { } else {
// Non-atomic updates are applied in order: master succeeds, then // Non-atomic updates are applied in order: master succeeds, then
// master/x fails due to conflict. // master/x fails due to conflict.
assertResults(cmds, OK, LOCK_FAILURE, LOCK_FAILURE); assertResults(cmds, OK, LOCK_FAILURE, LOCK_FAILURE);
assertRefs("refs/heads/master", B, "refs/heads/masters", B); assertRefs("refs/heads/master", B, "refs/heads/masters", B);
assertEquals(2, refsChangedEvents);
} }
} }
@Test
public void fileDirectoryConflictRefsChangedEvents() throws IOException {
writeLooseRefs("refs/heads/master", A, "refs/heads/masters", B);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
new ReceiveCommand(zeroId(), A, "refs/heads/master/x", CREATE),
new ReceiveCommand(zeroId(), A, "refs/heads", CREATE));
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true), false);
assertEquals(atomic ? initialRefsChangedEvents
: initialRefsChangedEvents + 1, refsChangedEvents);
}
@Test @Test
public void conflictThanksToDelete() throws IOException { public void conflictThanksToDelete() throws IOException {
writeLooseRefs("refs/heads/master", A, "refs/heads/masters", B); writeLooseRefs("refs/heads/master", A, "refs/heads/masters", B);
@ -273,15 +333,21 @@ public void conflictThanksToDelete() throws IOException {
assertResults(cmds, OK, OK, OK); assertResults(cmds, OK, OK, OK);
assertRefs("refs/heads/master", B, "refs/heads/masters/x", A); assertRefs("refs/heads/master", B, "refs/heads/masters/x", A);
if (atomic) { }
assertEquals(2, refsChangedEvents);
} else if (!useReftable) { @Test
// The non-atomic case actually produces 5 events, but that's an public void conflictThanksToDeleteRefsChangedEvents() throws IOException {
// implementation detail. We expect at least 4 events, one for the writeLooseRefs("refs/heads/master", A, "refs/heads/masters", B);
// initial read due to writeLooseRef(), and then one for each int initialRefsChangedEvents = refsChangedEvents;
// successful ref update.
assertTrue(refsChangedEvents >= 4); List<ReceiveCommand> cmds = Arrays.asList(
} new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
new ReceiveCommand(zeroId(), A, "refs/heads/masters/x", CREATE),
new ReceiveCommand(B, zeroId(), "refs/heads/masters", DELETE));
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true));
assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 3, refsChangedEvents);
} }
@Test @Test
@ -298,14 +364,28 @@ public void updateToMissingObject() throws IOException {
if (atomic) { if (atomic) {
assertResults(cmds, REJECTED_MISSING_OBJECT, TRANSACTION_ABORTED); assertResults(cmds, REJECTED_MISSING_OBJECT, TRANSACTION_ABORTED);
assertRefs("refs/heads/master", A); assertRefs("refs/heads/master", A);
assertEquals(1, refsChangedEvents);
} else { } else {
assertResults(cmds, REJECTED_MISSING_OBJECT, OK); assertResults(cmds, REJECTED_MISSING_OBJECT, OK);
assertRefs("refs/heads/master", A, "refs/heads/foo2", B); assertRefs("refs/heads/master", A, "refs/heads/foo2", B);
assertEquals(2, refsChangedEvents);
} }
} }
@Test
public void updateToMissingObjectRefsChangedEvents() throws IOException {
writeLooseRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
ObjectId bad = ObjectId
.fromString("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef");
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, bad, "refs/heads/master", UPDATE),
new ReceiveCommand(zeroId(), B, "refs/heads/foo2", CREATE));
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true), false);
assertEquals(atomic ? initialRefsChangedEvents
: initialRefsChangedEvents + 1, refsChangedEvents);
}
@Test @Test
public void addMissingObject() throws IOException { public void addMissingObject() throws IOException {
writeLooseRef("refs/heads/master", A); writeLooseRef("refs/heads/master", A);
@ -320,14 +400,28 @@ public void addMissingObject() throws IOException {
if (atomic) { if (atomic) {
assertResults(cmds, TRANSACTION_ABORTED, REJECTED_MISSING_OBJECT); assertResults(cmds, TRANSACTION_ABORTED, REJECTED_MISSING_OBJECT);
assertRefs("refs/heads/master", A); assertRefs("refs/heads/master", A);
assertEquals(1, refsChangedEvents);
} else { } else {
assertResults(cmds, OK, REJECTED_MISSING_OBJECT); assertResults(cmds, OK, REJECTED_MISSING_OBJECT);
assertRefs("refs/heads/master", B); assertRefs("refs/heads/master", B);
assertEquals(2, refsChangedEvents);
} }
} }
@Test
public void addMissingObjectRefsChangedEvents() throws IOException {
writeLooseRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
ObjectId bad = ObjectId
.fromString("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef");
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
new ReceiveCommand(zeroId(), bad, "refs/heads/foo2", CREATE));
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true), false);
assertEquals(atomic ? initialRefsChangedEvents
: initialRefsChangedEvents + 1, refsChangedEvents);
}
@Test @Test
public void oneNonExistentRef() throws IOException { public void oneNonExistentRef() throws IOException {
List<ReceiveCommand> cmds = Arrays.asList( List<ReceiveCommand> cmds = Arrays.asList(
@ -358,14 +452,26 @@ public void oneRefWrongOldValue() throws IOException {
if (atomic) { if (atomic) {
assertResults(cmds, LOCK_FAILURE, TRANSACTION_ABORTED); assertResults(cmds, LOCK_FAILURE, TRANSACTION_ABORTED);
assertRefs("refs/heads/master", A); assertRefs("refs/heads/master", A);
assertEquals(1, refsChangedEvents);
} else { } else {
assertResults(cmds, LOCK_FAILURE, OK); assertResults(cmds, LOCK_FAILURE, OK);
assertRefs("refs/heads/master", A, "refs/heads/foo2", B); assertRefs("refs/heads/master", A, "refs/heads/foo2", B);
assertEquals(2, refsChangedEvents);
} }
} }
@Test
public void oneRefWrongOldValueRefsChangedEvents() throws IOException {
writeLooseRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(B, B, "refs/heads/master", UPDATE),
new ReceiveCommand(zeroId(), B, "refs/heads/foo2", CREATE));
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true));
assertEquals(atomic ? initialRefsChangedEvents
: initialRefsChangedEvents + 1, refsChangedEvents);
}
@Test @Test
public void nonExistentRef() throws IOException { public void nonExistentRef() throws IOException {
writeLooseRef("refs/heads/master", A); writeLooseRef("refs/heads/master", A);
@ -378,17 +484,31 @@ public void nonExistentRef() throws IOException {
if (atomic) { if (atomic) {
assertResults(cmds, TRANSACTION_ABORTED, LOCK_FAILURE); assertResults(cmds, TRANSACTION_ABORTED, LOCK_FAILURE);
assertRefs("refs/heads/master", A); assertRefs("refs/heads/master", A);
assertEquals(1, refsChangedEvents);
} else { } else {
assertResults(cmds, OK, LOCK_FAILURE); assertResults(cmds, OK, LOCK_FAILURE);
assertRefs("refs/heads/master", B); assertRefs("refs/heads/master", B);
assertEquals(2, refsChangedEvents);
} }
} }
@Test
public void nonExistentRefRefsChangedEvents() throws IOException {
writeLooseRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
new ReceiveCommand(A, zeroId(), "refs/heads/foo2", DELETE));
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true));
assertEquals(atomic ? initialRefsChangedEvents
: initialRefsChangedEvents + 1, refsChangedEvents);
}
@Test @Test
public void noRefLog() throws IOException { public void noRefLog() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
Map<String, ReflogEntry> oldLogs = getLastReflogs("refs/heads/master", Map<String, ReflogEntry> oldLogs = getLastReflogs("refs/heads/master",
"refs/heads/branch"); "refs/heads/branch");
@ -402,7 +522,8 @@ public void noRefLog() throws IOException {
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertRefs("refs/heads/master", B, "refs/heads/branch", B); assertRefs("refs/heads/master", B, "refs/heads/branch", B);
assertEquals(batchesRefUpdates() ? 2 : 3, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
assertReflogUnchanged(oldLogs, "refs/heads/master"); assertReflogUnchanged(oldLogs, "refs/heads/master");
assertReflogUnchanged(oldLogs, "refs/heads/branch"); assertReflogUnchanged(oldLogs, "refs/heads/branch");
} }
@ -411,6 +532,7 @@ public void noRefLog() throws IOException {
public void reflogDefaultIdent() throws IOException { public void reflogDefaultIdent() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
writeRef("refs/heads/branch2", A); writeRef("refs/heads/branch2", A);
int initialRefsChangedEvents = refsChangedEvents;
Map<String, ReflogEntry> oldLogs = getLastReflogs("refs/heads/master", Map<String, ReflogEntry> oldLogs = getLastReflogs("refs/heads/master",
"refs/heads/branch1", "refs/heads/branch2"); "refs/heads/branch1", "refs/heads/branch2");
@ -423,7 +545,8 @@ public void reflogDefaultIdent() throws IOException {
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertRefs("refs/heads/master", B, "refs/heads/branch1", B, assertRefs("refs/heads/master", B, "refs/heads/branch1", B,
"refs/heads/branch2", A); "refs/heads/branch2", A);
assertEquals(batchesRefUpdates() ? 3 : 4, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
assertReflogEquals(reflog(A, B, new PersonIdent(diskRepo), "a reflog"), assertReflogEquals(reflog(A, B, new PersonIdent(diskRepo), "a reflog"),
getLastReflog("refs/heads/master")); getLastReflog("refs/heads/master"));
assertReflogEquals( assertReflogEquals(
@ -436,6 +559,7 @@ public void reflogDefaultIdent() throws IOException {
public void reflogAppendStatusNoMessage() throws IOException { public void reflogAppendStatusNoMessage() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
writeRef("refs/heads/branch1", B); writeRef("refs/heads/branch1", B);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList( List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE), new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
@ -448,7 +572,8 @@ public void reflogAppendStatusNoMessage() throws IOException {
assertResults(cmds, OK, OK, OK); assertResults(cmds, OK, OK, OK);
assertRefs("refs/heads/master", B, "refs/heads/branch1", A, assertRefs("refs/heads/master", B, "refs/heads/branch1", A,
"refs/heads/branch2", A); "refs/heads/branch2", A);
assertEquals(batchesRefUpdates() ? 3 : 5, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 3, refsChangedEvents);
assertReflogEquals( assertReflogEquals(
// Always forced; setAllowNonFastForwards(true) bypasses the // Always forced; setAllowNonFastForwards(true) bypasses the
// check. // check.
@ -465,6 +590,7 @@ public void reflogAppendStatusNoMessage() throws IOException {
@Test @Test
public void reflogAppendStatusFastForward() throws IOException { public void reflogAppendStatusFastForward() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays List<ReceiveCommand> cmds = Arrays
.asList(new ReceiveCommand(A, B, "refs/heads/master", UPDATE)); .asList(new ReceiveCommand(A, B, "refs/heads/master", UPDATE));
@ -472,7 +598,7 @@ public void reflogAppendStatusFastForward() throws IOException {
assertResults(cmds, OK); assertResults(cmds, OK);
assertRefs("refs/heads/master", B); assertRefs("refs/heads/master", B);
assertEquals(2, refsChangedEvents); assertEquals(initialRefsChangedEvents + 1, refsChangedEvents);
assertReflogEquals( assertReflogEquals(
reflog(A, B, new PersonIdent(diskRepo), "fast-forward"), reflog(A, B, new PersonIdent(diskRepo), "fast-forward"),
getLastReflog("refs/heads/master")); getLastReflog("refs/heads/master"));
@ -481,6 +607,7 @@ public void reflogAppendStatusFastForward() throws IOException {
@Test @Test
public void reflogAppendStatusWithMessage() throws IOException { public void reflogAppendStatusWithMessage() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList( List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE), new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
@ -489,7 +616,8 @@ public void reflogAppendStatusWithMessage() throws IOException {
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertRefs("refs/heads/master", B, "refs/heads/branch", A); assertRefs("refs/heads/master", B, "refs/heads/branch", A);
assertEquals(batchesRefUpdates() ? 2 : 3, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
assertReflogEquals( assertReflogEquals(
reflog(A, B, new PersonIdent(diskRepo), reflog(A, B, new PersonIdent(diskRepo),
"a reflog: fast-forward"), "a reflog: fast-forward"),
@ -503,6 +631,7 @@ public void reflogAppendStatusWithMessage() throws IOException {
@Test @Test
public void reflogCustomIdent() throws IOException { public void reflogCustomIdent() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList( List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE), new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
@ -513,7 +642,8 @@ public void reflogCustomIdent() throws IOException {
.setRefLogIdent(ident)); .setRefLogIdent(ident));
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertEquals(batchesRefUpdates() ? 2 : 3, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
assertRefs("refs/heads/master", B, "refs/heads/branch", B); assertRefs("refs/heads/master", B, "refs/heads/branch", B);
assertReflogEquals(reflog(A, B, ident, "a reflog"), assertReflogEquals(reflog(A, B, ident, "a reflog"),
getLastReflog("refs/heads/master"), true); getLastReflog("refs/heads/master"), true);
@ -525,6 +655,7 @@ public void reflogCustomIdent() throws IOException {
public void reflogDelete() throws IOException { public void reflogDelete() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
writeRef("refs/heads/branch", A); writeRef("refs/heads/branch", A);
int initialRefsChangedEvents = refsChangedEvents;
assertEquals(2, getLastReflogs("refs/heads/master", "refs/heads/branch") assertEquals(2, getLastReflogs("refs/heads/master", "refs/heads/branch")
.size()); .size());
@ -535,7 +666,8 @@ public void reflogDelete() throws IOException {
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertRefs("refs/heads/branch", B); assertRefs("refs/heads/branch", B);
assertEquals(batchesRefUpdates() ? 3 : 4, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
if (useReftable) { if (useReftable) {
// reftable retains reflog entries for deleted branches. // reftable retains reflog entries for deleted branches.
assertReflogEquals( assertReflogEquals(
@ -551,6 +683,7 @@ public void reflogDelete() throws IOException {
@Test @Test
public void reflogFileDirectoryConflict() throws IOException { public void reflogFileDirectoryConflict() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList( List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, zeroId(), "refs/heads/master", DELETE), new ReceiveCommand(A, zeroId(), "refs/heads/master", DELETE),
@ -559,7 +692,8 @@ public void reflogFileDirectoryConflict() throws IOException {
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertRefs("refs/heads/master/x", A); assertRefs("refs/heads/master/x", A);
assertEquals(batchesRefUpdates() ? 2 : 3, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
if (!useReftable) { if (!useReftable) {
// reftable retains reflog entries for deleted branches. // reftable retains reflog entries for deleted branches.
assertNull(getLastReflog("refs/heads/master")); assertNull(getLastReflog("refs/heads/master"));
@ -572,6 +706,7 @@ public void reflogFileDirectoryConflict() throws IOException {
@Test @Test
public void reflogOnLockFailure() throws IOException { public void reflogOnLockFailure() throws IOException {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
Map<String, ReflogEntry> oldLogs = getLastReflogs("refs/heads/master", Map<String, ReflogEntry> oldLogs = getLastReflogs("refs/heads/master",
"refs/heads/branch"); "refs/heads/branch");
@ -583,12 +718,12 @@ public void reflogOnLockFailure() throws IOException {
if (atomic) { if (atomic) {
assertResults(cmds, TRANSACTION_ABORTED, LOCK_FAILURE); assertResults(cmds, TRANSACTION_ABORTED, LOCK_FAILURE);
assertEquals(1, refsChangedEvents); assertEquals(initialRefsChangedEvents, refsChangedEvents);
assertReflogUnchanged(oldLogs, "refs/heads/master"); assertReflogUnchanged(oldLogs, "refs/heads/master");
assertReflogUnchanged(oldLogs, "refs/heads/branch"); assertReflogUnchanged(oldLogs, "refs/heads/branch");
} else { } else {
assertResults(cmds, OK, LOCK_FAILURE); assertResults(cmds, OK, LOCK_FAILURE);
assertEquals(2, refsChangedEvents); assertEquals(initialRefsChangedEvents + 1, refsChangedEvents);
assertReflogEquals( assertReflogEquals(
reflog(A, B, new PersonIdent(diskRepo), "a reflog"), reflog(A, B, new PersonIdent(diskRepo), "a reflog"),
getLastReflog("refs/heads/master")); getLastReflog("refs/heads/master"));
@ -599,6 +734,7 @@ public void reflogOnLockFailure() throws IOException {
@Test @Test
public void overrideRefLogMessage() throws Exception { public void overrideRefLogMessage() throws Exception {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList( List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE), new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
@ -609,7 +745,8 @@ public void overrideRefLogMessage() throws Exception {
.setRefLogMessage("a reflog", true)); .setRefLogMessage("a reflog", true));
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertEquals(batchesRefUpdates() ? 2 : 3, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
assertReflogEquals(reflog(A, B, ident, "custom log"), assertReflogEquals(reflog(A, B, ident, "custom log"),
getLastReflog("refs/heads/master"), true); getLastReflog("refs/heads/master"), true);
assertReflogEquals(reflog(zeroId(), B, ident, "a reflog: created"), assertReflogEquals(reflog(zeroId(), B, ident, "a reflog: created"),
@ -619,6 +756,7 @@ public void overrideRefLogMessage() throws Exception {
@Test @Test
public void overrideDisableRefLog() throws Exception { public void overrideDisableRefLog() throws Exception {
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
Map<String, ReflogEntry> oldLogs = getLastReflogs("refs/heads/master", Map<String, ReflogEntry> oldLogs = getLastReflogs("refs/heads/master",
"refs/heads/branch"); "refs/heads/branch");
@ -630,7 +768,8 @@ public void overrideDisableRefLog() throws Exception {
execute(newBatchUpdate(cmds).setRefLogMessage("a reflog", true)); execute(newBatchUpdate(cmds).setRefLogMessage("a reflog", true));
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertEquals(batchesRefUpdates() ? 2 : 3, refsChangedEvents); assertEquals(batchesRefUpdates() ? initialRefsChangedEvents + 1
: initialRefsChangedEvents + 2, refsChangedEvents);
assertReflogUnchanged(oldLogs, "refs/heads/master"); assertReflogUnchanged(oldLogs, "refs/heads/master");
assertReflogEquals( assertReflogEquals(
reflog(zeroId(), B, new PersonIdent(diskRepo), reflog(zeroId(), B, new PersonIdent(diskRepo),
@ -641,6 +780,7 @@ public void overrideDisableRefLog() throws Exception {
@Test @Test
public void refLogNotWrittenWithoutConfigOption() throws Exception { public void refLogNotWrittenWithoutConfigOption() throws Exception {
assumeFalse(useReftable); assumeFalse(useReftable);
setLogAllRefUpdates(false); setLogAllRefUpdates(false);
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
@ -661,6 +801,7 @@ public void refLogNotWrittenWithoutConfigOption() throws Exception {
@Test @Test
public void forceRefLogInUpdate() throws Exception { public void forceRefLogInUpdate() throws Exception {
assumeFalse(useReftable); assumeFalse(useReftable);
setLogAllRefUpdates(false); setLogAllRefUpdates(false);
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
assertTrue(getLastReflogs("refs/heads/master", "refs/heads/branch") assertTrue(getLastReflogs("refs/heads/master", "refs/heads/branch")
@ -683,6 +824,7 @@ public void forceRefLogInUpdate() throws Exception {
@Test @Test
public void forceRefLogInCommand() throws Exception { public void forceRefLogInCommand() throws Exception {
assumeFalse(useReftable); assumeFalse(useReftable);
setLogAllRefUpdates(false); setLogAllRefUpdates(false);
writeRef("refs/heads/master", A); writeRef("refs/heads/master", A);
@ -723,19 +865,39 @@ public void packedRefsLockFailure() throws Exception {
if (atomic) { if (atomic) {
assertResults(cmds, LOCK_FAILURE, TRANSACTION_ABORTED); assertResults(cmds, LOCK_FAILURE, TRANSACTION_ABORTED);
assertRefs("refs/heads/master", A); assertRefs("refs/heads/master", A);
assertEquals(1, refsChangedEvents);
} else { } else {
// Only operates on loose refs, doesn't care that packed-refs is // Only operates on loose refs, doesn't care that packed-refs is
// locked. // locked.
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertRefs("refs/heads/master", B, "refs/heads/branch", B); assertRefs("refs/heads/master", B, "refs/heads/branch", B);
assertEquals(3, refsChangedEvents);
} }
} finally { } finally {
myLock.unlock(); myLock.unlock();
} }
} }
@Test
public void packedRefsLockFailureRefsChangedEvents() throws Exception {
assumeFalse(useReftable);
writeLooseRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
new ReceiveCommand(zeroId(), B, "refs/heads/branch", CREATE));
LockFile myLock = refdir.lockPackedRefs();
try {
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true));
assertEquals(atomic ? initialRefsChangedEvents
: initialRefsChangedEvents + 2, refsChangedEvents);
} finally {
myLock.unlock();
}
}
@Test @Test
public void oneRefLockFailure() throws Exception { public void oneRefLockFailure() throws Exception {
assumeFalse(useReftable); assumeFalse(useReftable);
@ -757,20 +919,42 @@ public void oneRefLockFailure() throws Exception {
if (atomic) { if (atomic) {
assertResults(cmds, TRANSACTION_ABORTED, LOCK_FAILURE); assertResults(cmds, TRANSACTION_ABORTED, LOCK_FAILURE);
assertRefs("refs/heads/master", A); assertRefs("refs/heads/master", A);
assertEquals(1, refsChangedEvents);
} else { } else {
assertResults(cmds, OK, LOCK_FAILURE); assertResults(cmds, OK, LOCK_FAILURE);
assertRefs("refs/heads/branch", B, "refs/heads/master", A); assertRefs("refs/heads/branch", B, "refs/heads/master", A);
assertEquals(2, refsChangedEvents);
} }
} finally { } finally {
myLock.unlock(); myLock.unlock();
} }
} }
@Test
public void oneRefLockFailureRefsChangedEvents() throws Exception {
assumeFalse(useReftable);
writeLooseRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(zeroId(), B, "refs/heads/branch", CREATE),
new ReceiveCommand(A, B, "refs/heads/master", UPDATE));
LockFile myLock = new LockFile(refdir.fileFor("refs/heads/master"));
assertTrue(myLock.lock());
try {
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true));
assertEquals(atomic ? initialRefsChangedEvents
: initialRefsChangedEvents + 1, refsChangedEvents);
} finally {
myLock.unlock();
}
}
@Test @Test
public void singleRefUpdateDoesNotRequirePackedRefsLock() throws Exception { public void singleRefUpdateDoesNotRequirePackedRefsLock() throws Exception {
assumeFalse(useReftable); assumeFalse(useReftable);
writeLooseRef("refs/heads/master", A); writeLooseRef("refs/heads/master", A);
List<ReceiveCommand> cmds = Arrays List<ReceiveCommand> cmds = Arrays
@ -782,13 +966,33 @@ public void singleRefUpdateDoesNotRequirePackedRefsLock() throws Exception {
assertFalse(getLockFile("refs/heads/master").exists()); assertFalse(getLockFile("refs/heads/master").exists());
assertResults(cmds, OK); assertResults(cmds, OK);
assertEquals(2, refsChangedEvents);
assertRefs("refs/heads/master", B); assertRefs("refs/heads/master", B);
} finally { } finally {
myLock.unlock(); myLock.unlock();
} }
} }
@Test
public void singleRefUpdateDoesNotRequirePackedRefsLockRefsChangedEvents()
throws Exception {
assumeFalse(useReftable);
writeLooseRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays
.asList(new ReceiveCommand(A, B, "refs/heads/master", UPDATE));
LockFile myLock = refdir.lockPackedRefs();
try {
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true));
assertEquals(initialRefsChangedEvents + 1, refsChangedEvents);
} finally {
myLock.unlock();
}
}
@Test @Test
public void atomicUpdateRespectsInProcessLock() throws Exception { public void atomicUpdateRespectsInProcessLock() throws Exception {
assumeTrue(atomic); assumeTrue(atomic);
@ -838,10 +1042,56 @@ public void atomicUpdateRespectsInProcessLock() throws Exception {
} }
assertResults(cmds, OK, OK); assertResults(cmds, OK, OK);
assertEquals(2, refsChangedEvents);
assertRefs("refs/heads/master", B, "refs/heads/branch", B); assertRefs("refs/heads/master", B, "refs/heads/branch", B);
} }
@Test
public void atomicUpdateRespectsInProcessLockRefsChangedEvents()
throws Exception {
assumeTrue(atomic);
assumeFalse(useReftable);
writeLooseRef("refs/heads/master", A);
int initialRefsChangedEvents = refsChangedEvents;
List<ReceiveCommand> cmds = Arrays.asList(
new ReceiveCommand(A, B, "refs/heads/master", UPDATE),
new ReceiveCommand(zeroId(), B, "refs/heads/branch", CREATE));
Thread t = new Thread(() -> {
try {
execute(newBatchUpdate(cmds).setAllowNonFastForwards(true));
} catch (Exception e) {
throw new RuntimeException(e);
}
});
ReentrantLock l = refdir.inProcessPackedRefsLock;
l.lock();
try {
t.start();
long timeoutSecs = 10;
// Hold onto the lock until we observe the worker thread has
// attempted to
// acquire it.
while (l.getQueueLength() == 0) {
Thread.sleep(3);
}
// Once we unlock, the worker thread should finish the update
// promptly.
l.unlock();
t.join(SECONDS.toMillis(timeoutSecs));
} finally {
if (l.isHeldByCurrentThread()) {
l.unlock();
}
}
assertEquals(initialRefsChangedEvents + 1, refsChangedEvents);
}
private void setLogAllRefUpdates(boolean enable) throws Exception { private void setLogAllRefUpdates(boolean enable) throws Exception {
StoredConfig cfg = diskRepo.getConfig(); StoredConfig cfg = diskRepo.getConfig();
cfg.load(); cfg.load();
@ -855,6 +1105,11 @@ private void writeLooseRef(String name, AnyObjectId id) throws IOException {
writeRef(name, id); writeRef(name, id);
} else { } else {
write(new File(diskRepo.getDirectory(), name), id.name() + "\n"); write(new File(diskRepo.getDirectory(), name), id.name() + "\n");
// force the refs-changed event to be fired for the loose ref that
// was created. We do this to get the events fired during the test
// 'setup' out of the way and this allows us to now accurately
// assert only for the new events fired during the BatchRefUpdate.
refdir.exactRef(name);
} }
} }
@ -957,11 +1212,11 @@ private void assertRefs(Object... args) throws IOException {
} }
enum Result { enum Result {
OK(ReceiveCommand.Result.OK), LOCK_FAILURE( OK(ReceiveCommand.Result.OK),
ReceiveCommand.Result.LOCK_FAILURE), REJECTED_NONFASTFORWARD( LOCK_FAILURE(ReceiveCommand.Result.LOCK_FAILURE),
ReceiveCommand.Result.REJECTED_NONFASTFORWARD), REJECTED_MISSING_OBJECT( REJECTED_NONFASTFORWARD(ReceiveCommand.Result.REJECTED_NONFASTFORWARD),
ReceiveCommand.Result.REJECTED_MISSING_OBJECT), TRANSACTION_ABORTED( REJECTED_MISSING_OBJECT(ReceiveCommand.Result.REJECTED_MISSING_OBJECT),
ReceiveCommand::isTransactionAborted); TRANSACTION_ABORTED(ReceiveCommand::isTransactionAborted);
@SuppressWarnings("ImmutableEnumChecker") @SuppressWarnings("ImmutableEnumChecker")
final Predicate<? super ReceiveCommand> p; final Predicate<? super ReceiveCommand> p;

View File

@ -998,6 +998,108 @@ public void testV2FetchClientStopsNegotiation() throws Exception {
assertTrue(client.getObjectDatabase().has(barChild.toObjectId())); assertTrue(client.getObjectDatabase().has(barChild.toObjectId()));
} }
@Test
public void testV2FetchWithoutWaitForDoneReceivesPackfile()
throws Exception {
String commonInBlob = "abcdefghijklmnopqrstuvwxyz";
RevBlob parentBlob = remote.blob(commonInBlob + "a");
RevCommit parent = remote
.commit(remote.tree(remote.file("foo", parentBlob)));
remote.update("branch1", parent);
RevCommit localParent = null;
RevCommit localChild = null;
try (TestRepository<InMemoryRepository> local = new TestRepository<>(
client)) {
RevBlob localParentBlob = local.blob(commonInBlob + "a");
localParent = local
.commit(local.tree(local.file("foo", localParentBlob)));
RevBlob localChildBlob = local.blob(commonInBlob + "b");
localChild = local.commit(
local.tree(local.file("foo", localChildBlob)), localParent);
local.update("branch1", localChild);
}
ByteArrayInputStream recvStream = uploadPackV2("command=fetch\n",
PacketLineIn.delimiter(),
"have " + localParent.toObjectId().getName() + "\n",
"have " + localChild.toObjectId().getName() + "\n",
PacketLineIn.end());
PacketLineIn pckIn = new PacketLineIn(recvStream);
assertThat(pckIn.readString(), is("acknowledgments"));
assertThat(Arrays.asList(pckIn.readString()),
hasItems("ACK " + parent.toObjectId().getName()));
assertThat(pckIn.readString(), is("ready"));
assertTrue(PacketLineIn.isDelimiter(pckIn.readString()));
assertThat(pckIn.readString(), is("packfile"));
parsePack(recvStream);
}
@Test
public void testV2FetchWithWaitForDoneOnlyDoesNegotiation()
throws Exception {
String commonInBlob = "abcdefghijklmnopqrstuvwxyz";
RevBlob parentBlob = remote.blob(commonInBlob + "a");
RevCommit parent = remote
.commit(remote.tree(remote.file("foo", parentBlob)));
remote.update("branch1", parent);
RevCommit localParent = null;
RevCommit localChild = null;
try (TestRepository<InMemoryRepository> local = new TestRepository<>(
client)) {
RevBlob localParentBlob = local.blob(commonInBlob + "a");
localParent = local
.commit(local.tree(local.file("foo", localParentBlob)));
RevBlob localChildBlob = local.blob(commonInBlob + "b");
localChild = local.commit(
local.tree(local.file("foo", localChildBlob)), localParent);
local.update("branch1", localChild);
}
ByteArrayInputStream recvStream = uploadPackV2("command=fetch\n",
PacketLineIn.delimiter(), "wait-for-done\n",
"have " + localParent.toObjectId().getName() + "\n",
"have " + localChild.toObjectId().getName() + "\n",
PacketLineIn.end());
PacketLineIn pckIn = new PacketLineIn(recvStream);
assertThat(pckIn.readString(), is("acknowledgments"));
assertThat(Arrays.asList(pckIn.readString()),
hasItems("ACK " + parent.toObjectId().getName()));
assertTrue(PacketLineIn.isEnd(pckIn.readString()));
}
@Test
public void testV2FetchWithWaitForDoneOnlyDoesNegotiationAndNothingToAck()
throws Exception {
String commonInBlob = "abcdefghijklmnopqrstuvwxyz";
RevCommit localParent = null;
RevCommit localChild = null;
try (TestRepository<InMemoryRepository> local = new TestRepository<>(
client)) {
RevBlob localParentBlob = local.blob(commonInBlob + "a");
localParent = local
.commit(local.tree(local.file("foo", localParentBlob)));
RevBlob localChildBlob = local.blob(commonInBlob + "b");
localChild = local.commit(
local.tree(local.file("foo", localChildBlob)), localParent);
local.update("branch1", localChild);
}
ByteArrayInputStream recvStream = uploadPackV2("command=fetch\n",
PacketLineIn.delimiter(), "wait-for-done\n",
"have " + localParent.toObjectId().getName() + "\n",
"have " + localChild.toObjectId().getName() + "\n",
PacketLineIn.end());
PacketLineIn pckIn = new PacketLineIn(recvStream);
assertThat(pckIn.readString(), is("acknowledgments"));
assertThat(pckIn.readString(), is("NAK"));
assertTrue(PacketLineIn.isEnd(pckIn.readString()));
}
@Test @Test
public void testV2FetchThinPack() throws Exception { public void testV2FetchThinPack() throws Exception {
String commonInBlob = "abcdefghijklmnopqrstuvwxyz"; String commonInBlob = "abcdefghijklmnopqrstuvwxyz";

View File

@ -0,0 +1,87 @@
/*
* Copyright (C) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.util;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import java.nio.charset.StandardCharsets;
import org.junit.Test;
/**
* Tests for {@link Base85}.
*/
public class Base85Test {
private static final String VALID_CHARS = "0123456789"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+ "!#$%&()*+-;<=>?@^_`{|}~";
@Test
public void testChars() {
for (int i = 0; i < 256; i++) {
byte[] testData = { '1', '2', '3', '4', (byte) i };
if (VALID_CHARS.indexOf(i) >= 0) {
byte[] decoded = Base85.decode(testData, 4);
assertNotNull(decoded);
} else {
assertThrows(IllegalArgumentException.class,
() -> Base85.decode(testData, 4));
}
}
}
private void roundtrip(byte[] data, int expectedLength) {
byte[] encoded = Base85.encode(data);
assertEquals(expectedLength, encoded.length);
assertArrayEquals(data, Base85.decode(encoded, data.length));
}
private void roundtrip(String data, int expectedLength) {
roundtrip(data.getBytes(StandardCharsets.US_ASCII), expectedLength);
}
@Test
public void testPadding() {
roundtrip("", 0);
roundtrip("a", 5);
roundtrip("ab", 5);
roundtrip("abc", 5);
roundtrip("abcd", 5);
roundtrip("abcde", 10);
roundtrip("abcdef", 10);
roundtrip("abcdefg", 10);
roundtrip("abcdefgh", 10);
roundtrip("abcdefghi", 15);
}
@Test
public void testBinary() {
roundtrip(new byte[] { 1 }, 5);
roundtrip(new byte[] { 1, 2 }, 5);
roundtrip(new byte[] { 1, 2, 3 }, 5);
roundtrip(new byte[] { 1, 2, 3, 4 }, 5);
roundtrip(new byte[] { 1, 2, 3, 4, 5 }, 10);
roundtrip(new byte[] { 1, 2, 3, 4, 5, 0, 0, 0 }, 10);
roundtrip(new byte[] { 1, 2, 3, 4, 0, 0, 0, 5 }, 10);
}
@Test
public void testOverflow() {
IllegalArgumentException e = assertThrows(
IllegalArgumentException.class,
() -> Base85.decode(new byte[] { '~', '~', '~', '~', '~' }, 4));
assertTrue(e.getMessage().contains("overflow"));
}
}

View File

@ -0,0 +1,103 @@
/*
* Copyright (C) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.util.io;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.zip.InflaterInputStream;
import org.junit.Test;
/**
* Crude tests for the {@link BinaryDeltaInputStream} using delta diffs
* generated by C git.
*/
public class BinaryDeltaInputStreamTest {
private InputStream getBinaryHunk(String name) {
return this.getClass().getResourceAsStream(name);
}
@Test
public void testBinaryDelta() throws Exception {
// Prepare our test data
byte[] data = new byte[8192];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (255 - (i % 256));
}
// Same, but with five 'x' inserted in the middle.
int middle = data.length / 2;
byte[] newData = new byte[data.length + 5];
System.arraycopy(data, 0, newData, 0, middle);
for (int i = 0; i < 5; i++) {
newData[middle + i] = 'x';
}
System.arraycopy(data, middle, newData, middle + 5, middle);
// delta1.forward has the instructions
// @formatter:off
// COPY 0 4096
// INSERT 5 xxxxx
// COPY 0 4096
// @formatter:on
// Note that the way we built newData could be expressed as
// @formatter:off
// COPY 0 4096
// INSERT 5 xxxxx
// COPY 4096 4096
// @formatter:on
try (ByteArrayOutputStream out = new ByteArrayOutputStream();
BinaryDeltaInputStream input = new BinaryDeltaInputStream(data,
new InflaterInputStream(new BinaryHunkInputStream(
getBinaryHunk("delta1.forward"))))) {
byte[] buf = new byte[1024];
int n;
while ((n = input.read(buf)) >= 0) {
out.write(buf, 0, n);
}
assertArrayEquals(newData, out.toByteArray());
assertTrue(input.isFullyConsumed());
}
// delta1.reverse has the instructions
// @formatter:off
// COPY 0 4096
// COPY 256 3840
// COPY 256 256
// @formatter:on
// Note that there are alternatives, for instance
// @formatter:off
// COPY 0 4096
// COPY 4101 4096
// @formatter:on
// or
// @formatter:off
// COPY 0 4096
// COPY 0 4096
// @formatter:on
try (ByteArrayOutputStream out = new ByteArrayOutputStream();
BinaryDeltaInputStream input = new BinaryDeltaInputStream(
newData,
new InflaterInputStream(new BinaryHunkInputStream(
getBinaryHunk("delta1.reverse"))))) {
long expectedSize = input.getExpectedResultSize();
assertEquals(data.length, expectedSize);
byte[] buf = new byte[1024];
int n;
while ((n = input.read(buf)) >= 0) {
out.write(buf, 0, n);
}
assertArrayEquals(data, out.toByteArray());
assertTrue(input.isFullyConsumed());
}
}
}

View File

@ -0,0 +1,146 @@
/*
* Copyright (C) 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.util.io;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
import org.junit.Test;
/**
* Tests for {@link BinaryHunkInputStream} and {@link BinaryHunkOutputStream}.
*/
public class BinaryHunkStreamTest {
@Test
public void testRoundtripWholeBuffer() throws IOException {
for (int length = 1; length < 520 + 52; length++) {
byte[] data = new byte[length];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (255 - (i % 256));
}
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
BinaryHunkOutputStream out = new BinaryHunkOutputStream(
bos)) {
out.write(data);
out.flush();
byte[] encoded = bos.toByteArray();
assertFalse(Arrays.equals(data, encoded));
try (BinaryHunkInputStream in = new BinaryHunkInputStream(
new ByteArrayInputStream(encoded))) {
byte[] decoded = new byte[data.length];
int newLength = in.read(decoded);
assertEquals(newLength, decoded.length);
assertEquals(-1, in.read());
assertArrayEquals(data, decoded);
}
}
}
}
@Test
public void testRoundtripChunks() throws IOException {
for (int length = 1; length < 520 + 52; length++) {
byte[] data = new byte[length];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (255 - (i % 256));
}
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
BinaryHunkOutputStream out = new BinaryHunkOutputStream(
bos)) {
out.write(data, 0, data.length / 2);
out.write(data, data.length / 2, data.length - data.length / 2);
out.flush();
byte[] encoded = bos.toByteArray();
assertFalse(Arrays.equals(data, encoded));
try (BinaryHunkInputStream in = new BinaryHunkInputStream(
new ByteArrayInputStream(encoded))) {
byte[] decoded = new byte[data.length];
int p = 0;
int n;
while ((n = in.read(decoded, p,
Math.min(decoded.length - p, 57))) >= 0) {
p += n;
if (p == decoded.length) {
break;
}
}
assertEquals(p, decoded.length);
assertEquals(-1, in.read());
assertArrayEquals(data, decoded);
}
}
}
}
@Test
public void testRoundtripBytes() throws IOException {
for (int length = 1; length < 520 + 52; length++) {
byte[] data = new byte[length];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (255 - (i % 256));
}
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
BinaryHunkOutputStream out = new BinaryHunkOutputStream(
bos)) {
for (int i = 0; i < data.length; i++) {
out.write(data[i]);
}
out.flush();
byte[] encoded = bos.toByteArray();
assertFalse(Arrays.equals(data, encoded));
try (BinaryHunkInputStream in = new BinaryHunkInputStream(
new ByteArrayInputStream(encoded))) {
byte[] decoded = new byte[data.length];
for (int i = 0; i < decoded.length; i++) {
int val = in.read();
assertTrue(0 <= val && val <= 255);
decoded[i] = (byte) val;
}
assertEquals(-1, in.read());
assertArrayEquals(data, decoded);
}
}
}
}
@Test
public void testRoundtripWithClose() throws IOException {
for (int length = 1; length < 520 + 52; length++) {
byte[] data = new byte[length];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (255 - (i % 256));
}
try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
try (BinaryHunkOutputStream out = new BinaryHunkOutputStream(
bos)) {
out.write(data);
}
byte[] encoded = bos.toByteArray();
assertFalse(Arrays.equals(data, encoded));
try (BinaryHunkInputStream in = new BinaryHunkInputStream(
new ByteArrayInputStream(encoded))) {
byte[] decoded = new byte[data.length];
int newLength = in.read(decoded);
assertEquals(newLength, decoded.length);
assertEquals(-1, in.read());
assertArrayEquals(data, decoded);
}
}
}
}
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<component id="org.eclipse.jgit" version="2">
<resource path="src/org/eclipse/jgit/transport/SshConstants.java" type="org.eclipse.jgit.transport.SshConstants">
<filter id="1142947843">
<message_arguments>
<message_argument value="5.11.1"/>
<message_argument value="PUBKEY_ACCEPTED_ALGORITHMS"/>
</message_arguments>
</filter>
</resource>
</component>

View File

@ -13,6 +13,9 @@ ambiguousObjectAbbreviation=Object abbreviation {0} is ambiguous
aNewObjectIdIsRequired=A NewObjectId is required. aNewObjectIdIsRequired=A NewObjectId is required.
anExceptionOccurredWhileTryingToAddTheIdOfHEAD=An exception occurred while trying to add the Id of HEAD anExceptionOccurredWhileTryingToAddTheIdOfHEAD=An exception occurred while trying to add the Id of HEAD
anSSHSessionHasBeenAlreadyCreated=An SSH session has been already created anSSHSessionHasBeenAlreadyCreated=An SSH session has been already created
applyBinaryBaseOidWrong=Cannot apply binary patch; OID for file {0} does not match
applyBinaryOidTooShort=Binary patch for file {0} does not have full IDs
applyBinaryResultOidWrong=Result of binary patch for file {0} has wrong OID.
applyingCommit=Applying {0} applyingCommit=Applying {0}
archiveFormatAlreadyAbsent=Archive format already absent: {0} archiveFormatAlreadyAbsent=Archive format already absent: {0}
archiveFormatAlreadyRegistered=Archive format already registered with different implementation: {0} archiveFormatAlreadyRegistered=Archive format already registered with different implementation: {0}
@ -37,7 +40,19 @@ badRef=Bad ref: {0}: {1}
badSectionEntry=Bad section entry: {0} badSectionEntry=Bad section entry: {0}
badShallowLine=Bad shallow line: {0} badShallowLine=Bad shallow line: {0}
bareRepositoryNoWorkdirAndIndex=Bare Repository has neither a working tree, nor an index bareRepositoryNoWorkdirAndIndex=Bare Repository has neither a working tree, nor an index
base85invalidChar=Invalid base-85 character: 0x{0}
base85length=Base-85 encoded data must have a length that is a multiple of 5
base85overflow=Base-85 value overflow, does not fit into 32 bits: 0x{0}
base85tooLong=Extra base-85 encoded data for output size of {0} bytes
base85tooShort=Base-85 data decoded into less than {0} bytes
baseLengthIncorrect=base length incorrect baseLengthIncorrect=base length incorrect
binaryDeltaBaseLengthMismatch=Binary delta base length does not match, expected {0}, got {1}
binaryDeltaInvalidOffset=Binary delta offset + length too large: {0} + {1}
binaryDeltaInvalidResultLength=Binary delta expected result length is negative
binaryHunkDecodeError=Binary hunk, line {0}: invalid input
binaryHunkInvalidLength=Binary hunk, line {0}: input corrupt; expected length byte, got 0x{1}
binaryHunkLineTooShort=Binary hunk, line {0}: input ended prematurely
binaryHunkMissingNewline=Binary hunk, line {0}: input line not terminated by newline
bitmapMissingObject=Bitmap at {0} is missing {1}. bitmapMissingObject=Bitmap at {0} is missing {1}.
bitmapsMustBePrepared=Bitmaps must be prepared before they may be written. bitmapsMustBePrepared=Bitmaps must be prepared before they may be written.
blameNotCommittedYet=Not Committed Yet blameNotCommittedYet=Not Committed Yet

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2011, 2020 IBM Corporation and others * Copyright (C) 2011, 2021 IBM Corporation and others
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at * terms of the Eclipse Distribution License v. 1.0 which is available at
@ -9,29 +9,68 @@
*/ */
package org.eclipse.jgit.api; package org.eclipse.jgit.api;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.Writer; import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.zip.InflaterInputStream;
import org.eclipse.jgit.api.errors.FilterFailedException;
import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.PatchApplyException; import org.eclipse.jgit.api.errors.PatchApplyException;
import org.eclipse.jgit.api.errors.PatchFormatException; import org.eclipse.jgit.api.errors.PatchFormatException;
import org.eclipse.jgit.attributes.FilterCommand;
import org.eclipse.jgit.attributes.FilterCommandRegistry;
import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.diff.DiffEntry.ChangeType;
import org.eclipse.jgit.diff.RawText; import org.eclipse.jgit.diff.RawText;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheCheckout;
import org.eclipse.jgit.dircache.DirCacheCheckout.CheckoutMetadata;
import org.eclipse.jgit.dircache.DirCacheIterator;
import org.eclipse.jgit.errors.LargeObjectException;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.CoreConfig.EolStreamType;
import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectLoader;
import org.eclipse.jgit.lib.ObjectStream;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.patch.BinaryHunk;
import org.eclipse.jgit.patch.FileHeader; import org.eclipse.jgit.patch.FileHeader;
import org.eclipse.jgit.patch.FileHeader.PatchType;
import org.eclipse.jgit.patch.HunkHeader; import org.eclipse.jgit.patch.HunkHeader;
import org.eclipse.jgit.patch.Patch; import org.eclipse.jgit.patch.Patch;
import org.eclipse.jgit.treewalk.FileTreeIterator;
import org.eclipse.jgit.treewalk.TreeWalk;
import org.eclipse.jgit.treewalk.TreeWalk.OperationType;
import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
import org.eclipse.jgit.treewalk.filter.NotIgnoredFilter;
import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
import org.eclipse.jgit.util.FS;
import org.eclipse.jgit.util.FS.ExecutionResult;
import org.eclipse.jgit.util.FileUtils; import org.eclipse.jgit.util.FileUtils;
import org.eclipse.jgit.util.IO;
import org.eclipse.jgit.util.RawParseUtils;
import org.eclipse.jgit.util.StringUtils;
import org.eclipse.jgit.util.TemporaryBuffer;
import org.eclipse.jgit.util.TemporaryBuffer.LocalFile;
import org.eclipse.jgit.util.io.BinaryDeltaInputStream;
import org.eclipse.jgit.util.io.BinaryHunkInputStream;
import org.eclipse.jgit.util.io.EolStreamTypeUtil;
import org.eclipse.jgit.util.sha1.SHA1;
/** /**
* Apply a patch to files and/or to the index. * Apply a patch to files and/or to the index.
@ -45,7 +84,7 @@ public class ApplyCommand extends GitCommand<ApplyResult> {
private InputStream in; private InputStream in;
/** /**
* Constructs the command if the patch is to be applied to the index. * Constructs the command.
* *
* @param repo * @param repo
*/ */
@ -79,6 +118,7 @@ public ApplyCommand setPatch(InputStream in) {
public ApplyResult call() throws GitAPIException, PatchFormatException, public ApplyResult call() throws GitAPIException, PatchFormatException,
PatchApplyException { PatchApplyException {
checkCallable(); checkCallable();
setCallable(false);
ApplyResult r = new ApplyResult(); ApplyResult r = new ApplyResult();
try { try {
final Patch p = new Patch(); final Patch p = new Patch();
@ -87,19 +127,22 @@ public ApplyResult call() throws GitAPIException, PatchFormatException,
} finally { } finally {
in.close(); in.close();
} }
if (!p.getErrors().isEmpty()) if (!p.getErrors().isEmpty()) {
throw new PatchFormatException(p.getErrors()); throw new PatchFormatException(p.getErrors());
}
Repository repository = getRepository();
DirCache cache = repository.readDirCache();
for (FileHeader fh : p.getFiles()) { for (FileHeader fh : p.getFiles()) {
ChangeType type = fh.getChangeType(); ChangeType type = fh.getChangeType();
File f = null; File f = null;
switch (type) { switch (type) {
case ADD: case ADD:
f = getFile(fh.getNewPath(), true); f = getFile(fh.getNewPath(), true);
apply(f, fh); apply(repository, fh.getNewPath(), cache, f, fh);
break; break;
case MODIFY: case MODIFY:
f = getFile(fh.getOldPath(), false); f = getFile(fh.getOldPath(), false);
apply(f, fh); apply(repository, fh.getOldPath(), cache, f, fh);
break; break;
case DELETE: case DELETE:
f = getFile(fh.getOldPath(), false); f = getFile(fh.getOldPath(), false);
@ -118,14 +161,14 @@ public ApplyResult call() throws GitAPIException, PatchFormatException,
throw new PatchApplyException(MessageFormat.format( throw new PatchApplyException(MessageFormat.format(
JGitText.get().renameFileFailed, f, dest), e); JGitText.get().renameFileFailed, f, dest), e);
} }
apply(dest, fh); apply(repository, fh.getOldPath(), cache, dest, fh);
break; break;
case COPY: case COPY:
f = getFile(fh.getOldPath(), false); f = getFile(fh.getOldPath(), false);
File target = getFile(fh.getNewPath(), false); File target = getFile(fh.getNewPath(), false);
FileUtils.mkdirs(target.getParentFile(), true); FileUtils.mkdirs(target.getParentFile(), true);
Files.copy(f.toPath(), target.toPath()); Files.copy(f.toPath(), target.toPath());
apply(target, fh); apply(repository, fh.getOldPath(), cache, target, fh);
} }
r.addUpdatedFile(f); r.addUpdatedFile(f);
} }
@ -133,14 +176,13 @@ public ApplyResult call() throws GitAPIException, PatchFormatException,
throw new PatchApplyException(MessageFormat.format( throw new PatchApplyException(MessageFormat.format(
JGitText.get().patchApplyException, e.getMessage()), e); JGitText.get().patchApplyException, e.getMessage()), e);
} }
setCallable(false);
return r; return r;
} }
private File getFile(String path, boolean create) private File getFile(String path, boolean create)
throws PatchApplyException { throws PatchApplyException {
File f = new File(getRepository().getWorkTree(), path); File f = new File(getRepository().getWorkTree(), path);
if (create) if (create) {
try { try {
File parent = f.getParentFile(); File parent = f.getParentFile();
FileUtils.mkdirs(parent, true); FileUtils.mkdirs(parent, true);
@ -149,22 +191,366 @@ private File getFile(String path, boolean create)
throw new PatchApplyException(MessageFormat.format( throw new PatchApplyException(MessageFormat.format(
JGitText.get().createNewFileFailed, f), e); JGitText.get().createNewFileFailed, f), e);
} }
}
return f; return f;
} }
private void apply(Repository repository, String path, DirCache cache,
File f, FileHeader fh) throws IOException, PatchApplyException {
if (PatchType.BINARY.equals(fh.getPatchType())) {
return;
}
boolean convertCrLf = needsCrLfConversion(f, fh);
// Use a TreeWalk with a DirCacheIterator to pick up the correct
// clean/smudge filters. CR-LF handling is completely determined by
// whether the file or the patch have CR-LF line endings.
try (TreeWalk walk = new TreeWalk(repository)) {
walk.setOperationType(OperationType.CHECKIN_OP);
FileTreeIterator files = new FileTreeIterator(repository);
int fileIdx = walk.addTree(files);
int cacheIdx = walk.addTree(new DirCacheIterator(cache));
files.setDirCacheIterator(walk, cacheIdx);
walk.setFilter(AndTreeFilter.create(
PathFilterGroup.createFromStrings(path),
new NotIgnoredFilter(fileIdx)));
walk.setRecursive(true);
if (walk.next()) {
// If the file on disk has no newline characters, convertCrLf
// will be false. In that case we want to honor the normal git
// settings.
EolStreamType streamType = convertCrLf ? EolStreamType.TEXT_CRLF
: walk.getEolStreamType(OperationType.CHECKOUT_OP);
String command = walk.getFilterCommand(
Constants.ATTR_FILTER_TYPE_SMUDGE);
CheckoutMetadata checkOut = new CheckoutMetadata(streamType, command);
FileTreeIterator file = walk.getTree(fileIdx,
FileTreeIterator.class);
if (file != null) {
if (PatchType.GIT_BINARY.equals(fh.getPatchType())) {
applyBinary(repository, path, f, fh,
file::openEntryStream, file.getEntryObjectId(),
checkOut);
} else {
command = walk.getFilterCommand(
Constants.ATTR_FILTER_TYPE_CLEAN);
RawText raw;
// Can't use file.openEntryStream() as it would do CR-LF
// conversion as usual, not as wanted by us.
try (InputStream input = filterClean(repository, path,
new FileInputStream(f), convertCrLf, command)) {
raw = new RawText(
IO.readWholeStream(input, 0).array());
}
applyText(repository, path, raw, f, fh, checkOut);
}
return;
}
}
}
// File ignored?
RawText raw;
CheckoutMetadata checkOut;
if (PatchType.GIT_BINARY.equals(fh.getPatchType())) {
checkOut = new CheckoutMetadata(EolStreamType.DIRECT, null);
applyBinary(repository, path, f, fh, () -> new FileInputStream(f),
null, checkOut);
} else {
if (convertCrLf) {
try (InputStream input = EolStreamTypeUtil.wrapInputStream(
new FileInputStream(f), EolStreamType.TEXT_LF)) {
raw = new RawText(IO.readWholeStream(input, 0).array());
}
checkOut = new CheckoutMetadata(EolStreamType.TEXT_CRLF, null);
} else {
raw = new RawText(f);
checkOut = new CheckoutMetadata(EolStreamType.DIRECT, null);
}
applyText(repository, path, raw, f, fh, checkOut);
}
}
private boolean needsCrLfConversion(File f, FileHeader fileHeader)
throws IOException {
if (PatchType.GIT_BINARY.equals(fileHeader.getPatchType())) {
return false;
}
if (!hasCrLf(fileHeader)) {
try (InputStream input = new FileInputStream(f)) {
return RawText.isCrLfText(input);
}
}
return false;
}
private static boolean hasCrLf(FileHeader fileHeader) {
if (PatchType.GIT_BINARY.equals(fileHeader.getPatchType())) {
return false;
}
for (HunkHeader header : fileHeader.getHunks()) {
byte[] buf = header.getBuffer();
int hunkEnd = header.getEndOffset();
int lineStart = header.getStartOffset();
while (lineStart < hunkEnd) {
int nextLineStart = RawParseUtils.nextLF(buf, lineStart);
if (nextLineStart > hunkEnd) {
nextLineStart = hunkEnd;
}
if (nextLineStart <= lineStart) {
break;
}
if (nextLineStart - lineStart > 1) {
char first = (char) (buf[lineStart] & 0xFF);
if (first == ' ' || first == '-') {
// It's an old line. Does it end in CR-LF?
if (buf[nextLineStart - 2] == '\r') {
return true;
}
}
}
lineStart = nextLineStart;
}
}
return false;
}
private InputStream filterClean(Repository repository, String path,
InputStream fromFile, boolean convertCrLf, String filterCommand)
throws IOException {
InputStream input = fromFile;
if (convertCrLf) {
input = EolStreamTypeUtil.wrapInputStream(input,
EolStreamType.TEXT_LF);
}
if (StringUtils.isEmptyOrNull(filterCommand)) {
return input;
}
if (FilterCommandRegistry.isRegistered(filterCommand)) {
LocalFile buffer = new TemporaryBuffer.LocalFile(null);
FilterCommand command = FilterCommandRegistry.createFilterCommand(
filterCommand, repository, input, buffer);
while (command.run() != -1) {
// loop as long as command.run() tells there is work to do
}
return buffer.openInputStreamWithAutoDestroy();
}
FS fs = repository.getFS();
ProcessBuilder filterProcessBuilder = fs.runInShell(filterCommand,
new String[0]);
filterProcessBuilder.directory(repository.getWorkTree());
filterProcessBuilder.environment().put(Constants.GIT_DIR_KEY,
repository.getDirectory().getAbsolutePath());
ExecutionResult result;
try {
result = fs.execute(filterProcessBuilder, in);
} catch (IOException | InterruptedException e) {
throw new IOException(
new FilterFailedException(e, filterCommand, path));
}
int rc = result.getRc();
if (rc != 0) {
throw new IOException(new FilterFailedException(rc, filterCommand,
path, result.getStdout().toByteArray(4096), RawParseUtils
.decode(result.getStderr().toByteArray(4096))));
}
return result.getStdout().openInputStreamWithAutoDestroy();
}
/** /**
* @param f * Something that can supply an {@link InputStream}.
* @param fh
* @throws IOException
* @throws PatchApplyException
*/ */
private void apply(File f, FileHeader fh) private interface StreamSupplier {
InputStream load() throws IOException;
}
/**
* We write the patch result to a {@link TemporaryBuffer} and then use
* {@link DirCacheCheckout}.getContent() to run the result through the CR-LF
* and smudge filters. DirCacheCheckout needs an ObjectLoader, not a
* TemporaryBuffer, so this class bridges between the two, making any Stream
* provided by a {@link StreamSupplier} look like an ordinary git blob to
* DirCacheCheckout.
*/
private static class StreamLoader extends ObjectLoader {
private StreamSupplier data;
private long size;
StreamLoader(StreamSupplier data, long length) {
this.data = data;
this.size = length;
}
@Override
public int getType() {
return Constants.OBJ_BLOB;
}
@Override
public long getSize() {
return size;
}
@Override
public boolean isLarge() {
return true;
}
@Override
public byte[] getCachedBytes() throws LargeObjectException {
throw new LargeObjectException();
}
@Override
public ObjectStream openStream()
throws MissingObjectException, IOException {
return new ObjectStream.Filter(getType(), getSize(),
new BufferedInputStream(data.load()));
}
}
private void initHash(SHA1 hash, long size) {
hash.update(Constants.encodedTypeString(Constants.OBJ_BLOB));
hash.update((byte) ' ');
hash.update(Constants.encodeASCII(size));
hash.update((byte) 0);
}
private ObjectId hash(File f) throws IOException {
SHA1 hash = SHA1.newInstance();
initHash(hash, f.length());
try (InputStream input = new FileInputStream(f)) {
byte[] buf = new byte[8192];
int n;
while ((n = input.read(buf)) >= 0) {
hash.update(buf, 0, n);
}
}
return hash.toObjectId();
}
private void checkOid(ObjectId baseId, ObjectId id, ChangeType type, File f,
String path)
throws PatchApplyException, IOException {
boolean hashOk = false;
if (id != null) {
hashOk = baseId.equals(id);
if (!hashOk && ChangeType.ADD.equals(type)
&& ObjectId.zeroId().equals(baseId)) {
// We create the file first. The OID of an empty file is not the
// zero id!
hashOk = Constants.EMPTY_BLOB_ID.equals(id);
}
} else {
if (ObjectId.zeroId().equals(baseId)) {
// File empty is OK.
hashOk = !f.exists() || f.length() == 0;
} else {
hashOk = baseId.equals(hash(f));
}
}
if (!hashOk) {
throw new PatchApplyException(MessageFormat
.format(JGitText.get().applyBinaryBaseOidWrong, path));
}
}
private void applyBinary(Repository repository, String path, File f,
FileHeader fh, StreamSupplier loader, ObjectId id,
CheckoutMetadata checkOut)
throws PatchApplyException, IOException {
if (!fh.getOldId().isComplete() || !fh.getNewId().isComplete()) {
throw new PatchApplyException(MessageFormat
.format(JGitText.get().applyBinaryOidTooShort, path));
}
BinaryHunk hunk = fh.getForwardBinaryHunk();
// A BinaryHunk has the start at the "literal" or "delta" token. Data
// starts on the next line.
int start = RawParseUtils.nextLF(hunk.getBuffer(),
hunk.getStartOffset());
int length = hunk.getEndOffset() - start;
SHA1 hash = SHA1.newInstance();
// Write to a buffer and copy to the file only if everything was fine
TemporaryBuffer buffer = new TemporaryBuffer.LocalFile(null);
try {
switch (hunk.getType()) {
case LITERAL_DEFLATED:
// This just overwrites the file. We need to check the hash of
// the base.
checkOid(fh.getOldId().toObjectId(), id, fh.getChangeType(), f,
path);
initHash(hash, hunk.getSize());
try (OutputStream out = buffer;
InputStream inflated = new SHA1InputStream(hash,
new InflaterInputStream(
new BinaryHunkInputStream(
new ByteArrayInputStream(
hunk.getBuffer(), start,
length))))) {
DirCacheCheckout.getContent(repository, path, checkOut,
new StreamLoader(() -> inflated, hunk.getSize()),
null, out);
if (!fh.getNewId().toObjectId().equals(hash.toObjectId())) {
throw new PatchApplyException(MessageFormat.format(
JGitText.get().applyBinaryResultOidWrong,
path));
}
}
try (InputStream bufIn = buffer.openInputStream()) {
Files.copy(bufIn, f.toPath(),
StandardCopyOption.REPLACE_EXISTING);
}
break;
case DELTA_DEFLATED:
// Unfortunately delta application needs random access to the
// base to construct the result.
byte[] base;
try (InputStream input = loader.load()) {
base = IO.readWholeStream(input, 0).array();
}
// At least stream the result!
try (BinaryDeltaInputStream input = new BinaryDeltaInputStream(
base,
new InflaterInputStream(new BinaryHunkInputStream(
new ByteArrayInputStream(hunk.getBuffer(),
start, length))))) {
long finalSize = input.getExpectedResultSize();
initHash(hash, finalSize);
try (OutputStream out = buffer;
SHA1InputStream hashed = new SHA1InputStream(hash,
input)) {
DirCacheCheckout.getContent(repository, path, checkOut,
new StreamLoader(() -> hashed, finalSize), null,
out);
if (!fh.getNewId().toObjectId()
.equals(hash.toObjectId())) {
throw new PatchApplyException(MessageFormat.format(
JGitText.get().applyBinaryResultOidWrong,
path));
}
}
}
try (InputStream bufIn = buffer.openInputStream()) {
Files.copy(bufIn, f.toPath(),
StandardCopyOption.REPLACE_EXISTING);
}
break;
default:
break;
}
} finally {
buffer.destroy();
}
}
private void applyText(Repository repository, String path, RawText rt,
File f, FileHeader fh, CheckoutMetadata checkOut)
throws IOException, PatchApplyException { throws IOException, PatchApplyException {
RawText rt = new RawText(f); List<ByteBuffer> oldLines = new ArrayList<>(rt.size());
List<String> oldLines = new ArrayList<>(rt.size()); for (int i = 0; i < rt.size(); i++) {
for (int i = 0; i < rt.size(); i++) oldLines.add(rt.getRawString(i));
oldLines.add(rt.getString(i)); }
List<String> newLines = new ArrayList<>(oldLines); List<ByteBuffer> newLines = new ArrayList<>(oldLines);
int afterLastHunk = 0; int afterLastHunk = 0;
int lineNumberShift = 0; int lineNumberShift = 0;
int lastHunkNewLine = -1; int lastHunkNewLine = -1;
@ -182,9 +568,9 @@ private void apply(File f, FileHeader fh)
b.length); b.length);
RawText hrt = new RawText(b); RawText hrt = new RawText(b);
List<String> hunkLines = new ArrayList<>(hrt.size()); List<ByteBuffer> hunkLines = new ArrayList<>(hrt.size());
for (int i = 0; i < hrt.size(); i++) { for (int i = 0; i < hrt.size(); i++) {
hunkLines.add(hrt.getString(i)); hunkLines.add(hrt.getRawString(i));
} }
if (hh.getNewStartLine() == 0) { if (hh.getNewStartLine() == 0) {
@ -253,8 +639,13 @@ && canApplyAt(hunkLines, newLines, 0)) {
lineNumberShift = applyAt - hh.getNewStartLine() + 1; lineNumberShift = applyAt - hh.getNewStartLine() + 1;
int sz = hunkLines.size(); int sz = hunkLines.size();
for (int j = 1; j < sz; j++) { for (int j = 1; j < sz; j++) {
String hunkLine = hunkLines.get(j); ByteBuffer hunkLine = hunkLines.get(j);
switch (hunkLine.charAt(0)) { if (!hunkLine.hasRemaining()) {
// Completely empty line; accept as empty context line
applyAt++;
continue;
}
switch (hunkLine.array()[hunkLine.position()]) {
case ' ': case ' ':
applyAt++; applyAt++;
break; break;
@ -262,7 +653,7 @@ && canApplyAt(hunkLines, newLines, 0)) {
newLines.remove(applyAt); newLines.remove(applyAt);
break; break;
case '+': case '+':
newLines.add(applyAt++, hunkLine.substring(1)); newLines.add(applyAt++, slice(hunkLine, 1));
break; break;
default: default:
break; break;
@ -271,39 +662,64 @@ && canApplyAt(hunkLines, newLines, 0)) {
afterLastHunk = applyAt; afterLastHunk = applyAt;
} }
if (!isNoNewlineAtEndOfFile(fh)) { if (!isNoNewlineAtEndOfFile(fh)) {
newLines.add(""); //$NON-NLS-1$ newLines.add(null);
} }
if (!rt.isMissingNewlineAtEnd()) { if (!rt.isMissingNewlineAtEnd()) {
oldLines.add(""); //$NON-NLS-1$ oldLines.add(null);
} }
if (!isChanged(oldLines, newLines)) { if (oldLines.equals(newLines)) {
return; // Don't touch the file return; // Unchanged; don't touch the file
} }
try (Writer fw = Files.newBufferedWriter(f.toPath())) {
for (Iterator<String> l = newLines.iterator(); l.hasNext();) { TemporaryBuffer buffer = new TemporaryBuffer.LocalFile(null);
fw.write(l.next()); try {
if (l.hasNext()) { try (OutputStream out = buffer) {
// Don't bother handling line endings - if it was Windows, for (Iterator<ByteBuffer> l = newLines.iterator(); l
// the \r is still there! .hasNext();) {
fw.write('\n'); ByteBuffer line = l.next();
if (line == null) {
// Must be the marker for the final newline
break;
}
out.write(line.array(), line.position(), line.remaining());
if (l.hasNext()) {
out.write('\n');
}
} }
} }
try (OutputStream output = new FileOutputStream(f)) {
DirCacheCheckout.getContent(repository, path, checkOut,
new StreamLoader(buffer::openInputStream,
buffer.length()),
null, output);
}
} finally {
buffer.destroy();
} }
getRepository().getFS().setExecute(f, fh.getNewMode() == FileMode.EXECUTABLE_FILE); repository.getFS().setExecute(f,
fh.getNewMode() == FileMode.EXECUTABLE_FILE);
} }
private boolean canApplyAt(List<String> hunkLines, List<String> newLines, private boolean canApplyAt(List<ByteBuffer> hunkLines,
int line) { List<ByteBuffer> newLines, int line) {
int sz = hunkLines.size(); int sz = hunkLines.size();
int limit = newLines.size(); int limit = newLines.size();
int pos = line; int pos = line;
for (int j = 1; j < sz; j++) { for (int j = 1; j < sz; j++) {
String hunkLine = hunkLines.get(j); ByteBuffer hunkLine = hunkLines.get(j);
switch (hunkLine.charAt(0)) { if (!hunkLine.hasRemaining()) {
// Empty line. Accept as empty context line.
if (pos >= limit || newLines.get(pos).hasRemaining()) {
return false;
}
pos++;
continue;
}
switch (hunkLine.array()[hunkLine.position()]) {
case ' ': case ' ':
case '-': case '-':
if (pos >= limit if (pos >= limit
|| !newLines.get(pos).equals(hunkLine.substring(1))) { || !newLines.get(pos).equals(slice(hunkLine, 1))) {
return false; return false;
} }
pos++; pos++;
@ -315,13 +731,9 @@ private boolean canApplyAt(List<String> hunkLines, List<String> newLines,
return true; return true;
} }
private static boolean isChanged(List<String> ol, List<String> nl) { private ByteBuffer slice(ByteBuffer b, int off) {
if (ol.size() != nl.size()) int newOffset = b.position() + off;
return true; return ByteBuffer.wrap(b.array(), newOffset, b.limit() - newOffset);
for (int i = 0; i < ol.size(); i++)
if (!ol.get(i).equals(nl.get(i)))
return true;
return false;
} }
private boolean isNoNewlineAtEndOfFile(FileHeader fh) { private boolean isNoNewlineAtEndOfFile(FileHeader fh) {
@ -330,8 +742,51 @@ private boolean isNoNewlineAtEndOfFile(FileHeader fh) {
return false; return false;
} }
HunkHeader lastHunk = hunks.get(hunks.size() - 1); HunkHeader lastHunk = hunks.get(hunks.size() - 1);
RawText lhrt = new RawText(lastHunk.getBuffer()); byte[] buf = new byte[lastHunk.getEndOffset()
- lastHunk.getStartOffset()];
System.arraycopy(lastHunk.getBuffer(), lastHunk.getStartOffset(), buf,
0, buf.length);
RawText lhrt = new RawText(buf);
return lhrt.getString(lhrt.size() - 1) return lhrt.getString(lhrt.size() - 1)
.equals("\\ No newline at end of file"); //$NON-NLS-1$ .equals("\\ No newline at end of file"); //$NON-NLS-1$
} }
/**
* An {@link InputStream} that updates a {@link SHA1} on every byte read.
* The hash is supposed to have been initialized before reading starts.
*/
private static class SHA1InputStream extends InputStream {
private final SHA1 hash;
private final InputStream in;
SHA1InputStream(SHA1 hash, InputStream in) {
this.hash = hash;
this.in = in;
}
@Override
public int read() throws IOException {
int b = in.read();
if (b >= 0) {
hash.update((byte) b);
}
return b;
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
int n = in.read(b, off, len);
if (n > 0) {
hash.update(b, off, n);
}
return n;
}
@Override
public void close() throws IOException {
in.close();
}
}
} }

View File

@ -86,6 +86,20 @@ public class MergeCommand extends GitCommand<MergeResult> {
private ProgressMonitor monitor = NullProgressMonitor.INSTANCE; private ProgressMonitor monitor = NullProgressMonitor.INSTANCE;
/**
* Values for the "merge.conflictStyle" git config.
*
* @since 5.12
*/
public enum ConflictStyle {
/** "merge" style: only ours/theirs. This is the default. */
MERGE,
/** "diff3" style: ours/base/theirs. */
DIFF3
}
/** /**
* The modes available for fast forward merges corresponding to the * The modes available for fast forward merges corresponding to the
* <code>--ff</code>, <code>--no-ff</code> and <code>--ff-only</code> * <code>--ff</code>, <code>--no-ff</code> and <code>--ff-only</code>

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2009, Google Inc. * Copyright (C) 2009, Google Inc.
* Copyright (C) 2008-2009, Johannes E. Schindelin <johannes.schindelin@gmx.de> and others * Copyright (C) 2008-2021, Johannes E. Schindelin <johannes.schindelin@gmx.de> and others
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at * terms of the Eclipse Distribution License v. 1.0 which is available at
@ -16,6 +16,7 @@
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.nio.ByteBuffer;
import org.eclipse.jgit.errors.BinaryBlobException; import org.eclipse.jgit.errors.BinaryBlobException;
import org.eclipse.jgit.errors.LargeObjectException; import org.eclipse.jgit.errors.LargeObjectException;
@ -164,6 +165,27 @@ public String getString(int i) {
return getString(i, i + 1, true); return getString(i, i + 1, true);
} }
/**
* Get the raw text for a single line.
*
* @param i
* index of the line to extract. Note this is 0-based, so line
* number 1 is actually index 0.
* @return the text for the line, without a trailing LF, as a
* {@link ByteBuffer} that is backed by a slice of the
* {@link #getRawContent() raw content}, with the buffer's position
* on the start of the line and the limit at the end.
* @since 5.12
*/
public ByteBuffer getRawString(int i) {
int s = getStart(i);
int e = getEnd(i);
if (e > 0 && content[e - 1] == '\n') {
e--;
}
return ByteBuffer.wrap(content, s, e - s);
}
/** /**
* Get the text for a region of lines. * Get the text for a region of lines.
* *

View File

@ -104,6 +104,13 @@ private int sortOf(ChangeType changeType) {
*/ */
private int bigFileThreshold = DEFAULT_BIG_FILE_THRESHOLD; private int bigFileThreshold = DEFAULT_BIG_FILE_THRESHOLD;
/**
* Skip detecting content renames for binary files. Content renames are
* those that are not exact, that is with a slight content modification
* between the two files.
*/
private boolean skipContentRenamesForBinaryFiles = false;
/** Set if the number of adds or deletes was over the limit. */ /** Set if the number of adds or deletes was over the limit. */
private boolean overRenameLimit; private boolean overRenameLimit;
@ -235,6 +242,26 @@ public void setBigFileThreshold(int threshold) {
this.bigFileThreshold = threshold; this.bigFileThreshold = threshold;
} }
/**
* Get skipping detecting content renames for binary files.
*
* @return true if content renames should be skipped for binary files, false otherwise.
* @since 5.12
*/
public boolean getSkipContentRenamesForBinaryFiles() {
return skipContentRenamesForBinaryFiles;
}
/**
* Sets skipping detecting content renames for binary files.
*
* @param value true if content renames should be skipped for binary files, false otherwise.
* @since 5.12
*/
public void setSkipContentRenamesForBinaryFiles(boolean value) {
this.skipContentRenamesForBinaryFiles = value;
}
/** /**
* Check if the detector is over the rename limit. * Check if the detector is over the rename limit.
* <p> * <p>
@ -521,6 +548,7 @@ private void findContentRenames(ContentSource.Pair reader,
d = new SimilarityRenameDetector(reader, deleted, added); d = new SimilarityRenameDetector(reader, deleted, added);
d.setRenameScore(getRenameScore()); d.setRenameScore(getRenameScore());
d.setBigFileThreshold(getBigFileThreshold()); d.setBigFileThreshold(getBigFileThreshold());
d.setSkipBinaryFiles(getSkipContentRenamesForBinaryFiles());
d.compute(pm); d.compute(pm);
overRenameLimit |= d.isTableOverflow(); overRenameLimit |= d.isTableOverflow();
deleted = d.getLeftOverSources(); deleted = d.getLeftOverSources();

View File

@ -102,6 +102,15 @@ public static SimilarityIndex create(ObjectLoader obj) throws IOException,
idGrowAt = growAt(idHashBits); idGrowAt = growAt(idHashBits);
} }
static boolean isBinary(ObjectLoader obj) throws IOException {
if (obj.isLarge()) {
try (ObjectStream in1 = obj.openStream()) {
return RawText.isBinary(in1);
}
}
return RawText.isBinary(obj.getCachedBytes());
}
void hash(ObjectLoader obj) throws MissingObjectException, IOException, void hash(ObjectLoader obj) throws MissingObjectException, IOException,
TableFullException { TableFullException {
if (obj.isLarge()) { if (obj.isLarge()) {
@ -115,9 +124,7 @@ void hash(ObjectLoader obj) throws MissingObjectException, IOException,
private void hashLargeObject(ObjectLoader obj) throws IOException, private void hashLargeObject(ObjectLoader obj) throws IOException,
TableFullException { TableFullException {
boolean text; boolean text;
try (ObjectStream in1 = obj.openStream()) { text = !isBinary(obj);
text = !RawText.isBinary(in1);
}
try (ObjectStream in2 = obj.openStream()) { try (ObjectStream in2 = obj.openStream()) {
hash(in2, in2.getSize(), text); hash(in2, in2.getSize(), text);

View File

@ -26,6 +26,7 @@
import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.ObjectLoader;
import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.ProgressMonitor;
class SimilarityRenameDetector { class SimilarityRenameDetector {
@ -87,6 +88,9 @@ class SimilarityRenameDetector {
*/ */
private int bigFileThreshold = DEFAULT_BIG_FILE_THRESHOLD; private int bigFileThreshold = DEFAULT_BIG_FILE_THRESHOLD;
/** Skip content renames for binary files. */
private boolean skipBinaryFiles = false;
/** Set if any {@link SimilarityIndex.TableFullException} occurs. */ /** Set if any {@link SimilarityIndex.TableFullException} occurs. */
private boolean tableOverflow; private boolean tableOverflow;
@ -107,6 +111,10 @@ void setBigFileThreshold(int threshold) {
bigFileThreshold = threshold; bigFileThreshold = threshold;
} }
void setSkipBinaryFiles(boolean value) {
skipBinaryFiles = value;
}
void compute(ProgressMonitor pm) throws IOException, CancelledException { void compute(ProgressMonitor pm) throws IOException, CancelledException {
if (pm == null) if (pm == null)
pm = NullProgressMonitor.INSTANCE; pm = NullProgressMonitor.INSTANCE;
@ -271,7 +279,12 @@ private int buildMatrix(ProgressMonitor pm)
if (s == null) { if (s == null) {
try { try {
s = hash(OLD, srcEnt); ObjectLoader loader = reader.open(OLD, srcEnt);
if (skipBinaryFiles && SimilarityIndex.isBinary(loader)) {
pm.update(1);
continue SRC;
}
s = hash(loader);
} catch (TableFullException tableFull) { } catch (TableFullException tableFull) {
tableOverflow = true; tableOverflow = true;
continue SRC; continue SRC;
@ -280,7 +293,12 @@ private int buildMatrix(ProgressMonitor pm)
SimilarityIndex d; SimilarityIndex d;
try { try {
d = hash(NEW, dstEnt); ObjectLoader loader = reader.open(NEW, dstEnt);
if (skipBinaryFiles && SimilarityIndex.isBinary(loader)) {
pm.update(1);
continue;
}
d = hash(loader);
} catch (TableFullException tableFull) { } catch (TableFullException tableFull) {
if (dstTooLarge == null) if (dstTooLarge == null)
dstTooLarge = new BitSet(dsts.size()); dstTooLarge = new BitSet(dsts.size());
@ -364,10 +382,10 @@ static int nameScore(String a, String b) {
return (((dirScoreLtr + dirScoreRtl) * 25) + (fileScore * 50)) / 100; return (((dirScoreLtr + dirScoreRtl) * 25) + (fileScore * 50)) / 100;
} }
private SimilarityIndex hash(DiffEntry.Side side, DiffEntry ent) private SimilarityIndex hash(ObjectLoader objectLoader)
throws IOException, TableFullException { throws IOException, TableFullException {
SimilarityIndex r = new SimilarityIndex(); SimilarityIndex r = new SimilarityIndex();
r.hash(reader.open(side, ent)); r.hash(objectLoader);
r.sort(); r.sort();
return r; return r;
} }

View File

@ -12,6 +12,7 @@
import static java.nio.charset.StandardCharsets.UTF_8; import static java.nio.charset.StandardCharsets.UTF_8;
import static org.eclipse.jgit.lib.Constants.DEFAULT_REMOTE_NAME; import static org.eclipse.jgit.lib.Constants.DEFAULT_REMOTE_NAME;
import static org.eclipse.jgit.lib.Constants.R_REMOTES; import static org.eclipse.jgit.lib.Constants.R_REMOTES;
import static org.eclipse.jgit.lib.Constants.R_TAGS;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@ -79,6 +80,13 @@
* @since 3.4 * @since 3.4
*/ */
public class RepoCommand extends GitCommand<RevCommit> { public class RepoCommand extends GitCommand<RevCommit> {
private static final int LOCK_FAILURE_MAX_RETRIES = 5;
// Retry exponentially with delays in this range
private static final int LOCK_FAILURE_MIN_RETRY_DELAY_MILLIS = 50;
private static final int LOCK_FAILURE_MAX_RETRY_DELAY_MILLIS = 5000;
private String manifestPath; private String manifestPath;
private String baseUri; private String baseUri;
private URI targetUri; private URI targetUri;
@ -587,8 +595,11 @@ public RevCommit call() throws GitAPIException {
throw new RemoteUnavailableException(url); throw new RemoteUnavailableException(url);
} }
if (recordRemoteBranch) { if (recordRemoteBranch) {
// can be branch or tag // "branch" field is only for non-tag references.
cfg.setString("submodule", name, "branch", //$NON-NLS-1$ //$NON-NLS-2$ // Keep tags in "ref" field as hint for other tools.
String field = proj.getRevision().startsWith(
R_TAGS) ? "ref" : "branch"; //$NON-NLS-1$ //$NON-NLS-2$
cfg.setString("submodule", name, field, //$NON-NLS-1$
proj.getRevision()); proj.getRevision());
} }
@ -682,50 +693,22 @@ public RevCommit call() throws GitAPIException {
builder.finish(); builder.finish();
ObjectId treeId = index.writeTree(inserter); ObjectId treeId = index.writeTree(inserter);
// Create a Commit object, populate it and write it long prevDelay = 0;
ObjectId headId = repo.resolve(targetBranch + "^{commit}"); //$NON-NLS-1$ for (int i = 0; i < LOCK_FAILURE_MAX_RETRIES - 1; i++) {
if (headId != null && rw.parseCommit(headId).getTree().getId().equals(treeId)) { try {
// No change. Do nothing. return commitTreeOnCurrentTip(
return rw.parseCommit(headId); inserter, rw, treeId);
} catch (ConcurrentRefUpdateException e) {
prevDelay = FileUtils.delay(prevDelay,
LOCK_FAILURE_MIN_RETRY_DELAY_MILLIS,
LOCK_FAILURE_MAX_RETRY_DELAY_MILLIS);
Thread.sleep(prevDelay);
repo.getRefDatabase().refresh();
}
} }
// In the last try, just propagate the exceptions
CommitBuilder commit = new CommitBuilder(); return commitTreeOnCurrentTip(inserter, rw, treeId);
commit.setTreeId(treeId); } catch (GitAPIException | IOException | InterruptedException e) {
if (headId != null)
commit.setParentIds(headId);
commit.setAuthor(author);
commit.setCommitter(author);
commit.setMessage(RepoText.get().repoCommitMessage);
ObjectId commitId = inserter.insert(commit);
inserter.flush();
RefUpdate ru = repo.updateRef(targetBranch);
ru.setNewObjectId(commitId);
ru.setExpectedOldObjectId(headId != null ? headId : ObjectId.zeroId());
Result rc = ru.update(rw);
switch (rc) {
case NEW:
case FORCED:
case FAST_FORWARD:
// Successful. Do nothing.
break;
case REJECTED:
case LOCK_FAILURE:
throw new ConcurrentRefUpdateException(
MessageFormat.format(
JGitText.get().cannotLock, targetBranch),
ru.getRef(),
rc);
default:
throw new JGitInternalException(MessageFormat.format(
JGitText.get().updatingRefFailed,
targetBranch, commitId.name(), rc));
}
return rw.parseCommit(commitId);
} catch (GitAPIException | IOException e) {
throw new ManifestErrorException(e); throw new ManifestErrorException(e);
} }
} }
@ -742,6 +725,51 @@ public RevCommit call() throws GitAPIException {
} }
} }
private RevCommit commitTreeOnCurrentTip(ObjectInserter inserter,
RevWalk rw, ObjectId treeId)
throws IOException, ConcurrentRefUpdateException {
ObjectId headId = repo.resolve(targetBranch + "^{commit}"); //$NON-NLS-1$
if (headId != null && rw.parseCommit(headId).getTree().getId().equals(treeId)) {
// No change. Do nothing.
return rw.parseCommit(headId);
}
CommitBuilder commit = new CommitBuilder();
commit.setTreeId(treeId);
if (headId != null)
commit.setParentIds(headId);
commit.setAuthor(author);
commit.setCommitter(author);
commit.setMessage(RepoText.get().repoCommitMessage);
ObjectId commitId = inserter.insert(commit);
inserter.flush();
RefUpdate ru = repo.updateRef(targetBranch);
ru.setNewObjectId(commitId);
ru.setExpectedOldObjectId(headId != null ? headId : ObjectId.zeroId());
Result rc = ru.update(rw);
switch (rc) {
case NEW:
case FORCED:
case FAST_FORWARD:
// Successful. Do nothing.
break;
case REJECTED:
case LOCK_FAILURE:
throw new ConcurrentRefUpdateException(MessageFormat
.format(JGitText.get().cannotLock, targetBranch),
ru.getRef(), rc);
default:
throw new JGitInternalException(MessageFormat.format(
JGitText.get().updatingRefFailed,
targetBranch, commitId.name(), rc));
}
return rw.parseCommit(commitId);
}
private void addSubmodule(String name, String url, String path, private void addSubmodule(String name, String url, String path,
String revision, List<CopyFile> copyfiles, List<LinkFile> linkfiles, String revision, List<CopyFile> copyfiles, List<LinkFile> linkfiles,
Git git) throws GitAPIException, IOException { Git git) throws GitAPIException, IOException {

View File

@ -41,6 +41,9 @@ public static JGitText get() {
/***/ public String aNewObjectIdIsRequired; /***/ public String aNewObjectIdIsRequired;
/***/ public String anExceptionOccurredWhileTryingToAddTheIdOfHEAD; /***/ public String anExceptionOccurredWhileTryingToAddTheIdOfHEAD;
/***/ public String anSSHSessionHasBeenAlreadyCreated; /***/ public String anSSHSessionHasBeenAlreadyCreated;
/***/ public String applyBinaryBaseOidWrong;
/***/ public String applyBinaryOidTooShort;
/***/ public String applyBinaryResultOidWrong;
/***/ public String applyingCommit; /***/ public String applyingCommit;
/***/ public String archiveFormatAlreadyAbsent; /***/ public String archiveFormatAlreadyAbsent;
/***/ public String archiveFormatAlreadyRegistered; /***/ public String archiveFormatAlreadyRegistered;
@ -65,7 +68,19 @@ public static JGitText get() {
/***/ public String badSectionEntry; /***/ public String badSectionEntry;
/***/ public String badShallowLine; /***/ public String badShallowLine;
/***/ public String bareRepositoryNoWorkdirAndIndex; /***/ public String bareRepositoryNoWorkdirAndIndex;
/***/ public String base85invalidChar;
/***/ public String base85length;
/***/ public String base85overflow;
/***/ public String base85tooLong;
/***/ public String base85tooShort;
/***/ public String baseLengthIncorrect; /***/ public String baseLengthIncorrect;
/***/ public String binaryDeltaBaseLengthMismatch;
/***/ public String binaryDeltaInvalidOffset;
/***/ public String binaryDeltaInvalidResultLength;
/***/ public String binaryHunkDecodeError;
/***/ public String binaryHunkInvalidLength;
/***/ public String binaryHunkLineTooShort;
/***/ public String binaryHunkMissingNewline;
/***/ public String bitmapMissingObject; /***/ public String bitmapMissingObject;
/***/ public String bitmapsMustBePrepared; /***/ public String bitmapsMustBePrepared;
/***/ public String blameNotCommittedYet; /***/ public String blameNotCommittedYet;

View File

@ -244,47 +244,18 @@ public void refresh() {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public boolean isNameConflicting(String name) throws IOException { public boolean isNameConflicting(String name) throws IOException {
RefList<Ref> packed = getPackedRefs();
RefList<LooseRef> loose = getLooseRefs();
// Cannot be nested within an existing reference. // Cannot be nested within an existing reference.
int lastSlash = name.lastIndexOf('/'); int lastSlash = name.lastIndexOf('/');
while (0 < lastSlash) { while (0 < lastSlash) {
String needle = name.substring(0, lastSlash); String needle = name.substring(0, lastSlash);
if (loose.contains(needle) || packed.contains(needle)) if (exactRef(needle) != null) {
return true; return true;
}
lastSlash = name.lastIndexOf('/', lastSlash - 1); lastSlash = name.lastIndexOf('/', lastSlash - 1);
} }
// Cannot be the container of an existing reference. // Cannot be the container of an existing reference.
String prefix = name + '/'; return !getRefsByPrefix(name + '/').isEmpty();
int idx;
idx = -(packed.find(prefix) + 1);
if (idx < packed.size() && packed.get(idx).getName().startsWith(prefix))
return true;
idx = -(loose.find(prefix) + 1);
if (idx < loose.size() && loose.get(idx).getName().startsWith(prefix))
return true;
return false;
}
private RefList<LooseRef> getLooseRefs() {
final RefList<LooseRef> oldLoose = looseRefs.get();
LooseScanner scan = new LooseScanner(oldLoose);
scan.scan(ALL);
RefList<LooseRef> loose;
if (scan.newLoose != null) {
loose = scan.newLoose.toRefList();
if (looseRefs.compareAndSet(oldLoose, loose))
modCnt.incrementAndGet();
} else
loose = oldLoose;
return loose;
} }
@Nullable @Nullable

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2008, 2017, Google Inc. * Copyright (C) 2008, 2017, Google Inc.
* Copyright (C) 2017, 2018, Thomas Wolf <thomas.wolf@paranor.ch> and others * Copyright (C) 2017, 2021, Thomas Wolf <thomas.wolf@paranor.ch> and others
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at * terms of the Eclipse Distribution License v. 1.0 which is available at
@ -21,7 +21,8 @@
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -82,12 +83,6 @@
*/ */
public class OpenSshConfigFile implements SshConfigStore { public class OpenSshConfigFile implements SshConfigStore {
/**
* "Host" name of the HostEntry for the default options before the first
* host block in a config file.
*/
private static final String DEFAULT_NAME = ""; //$NON-NLS-1$
/** The user's home directory, as key files may be relative to here. */ /** The user's home directory, as key files may be relative to here. */
private final File home; private final File home;
@ -105,11 +100,9 @@ public class OpenSshConfigFile implements SshConfigStore {
* fully resolved entries created from that. * fully resolved entries created from that.
*/ */
private static class State { private static class State {
// Keyed by pattern; if a "Host" line has multiple patterns, we generate List<HostEntry> entries = new LinkedList<>();
// duplicate HostEntry objects
Map<String, HostEntry> entries = new LinkedHashMap<>();
// Keyed by user@hostname:port // Previous lookups, keyed by user@hostname:port
Map<String, HostEntry> hosts = new HashMap<>(); Map<String, HostEntry> hosts = new HashMap<>();
@Override @Override
@ -165,14 +158,16 @@ public HostEntry lookup(@NonNull String hostName, int port,
return h; return h;
} }
HostEntry fullConfig = new HostEntry(); HostEntry fullConfig = new HostEntry();
// Initialize with default entries at the top of the file, before the Iterator<HostEntry> entries = cache.entries.iterator();
// first Host block. if (entries.hasNext()) {
fullConfig.merge(cache.entries.get(DEFAULT_NAME)); // Should always have at least the first top entry containing
for (Map.Entry<String, HostEntry> e : cache.entries.entrySet()) { // key-value pairs before the first Host block
String pattern = e.getKey(); fullConfig.merge(entries.next());
if (isHostMatch(pattern, hostName)) { entries.forEachRemaining(entry -> {
fullConfig.merge(e.getValue()); if (entry.matches(hostName)) {
} fullConfig.merge(entry);
}
});
} }
fullConfig.substitute(hostName, port, userName, localUserName, home); fullConfig.substitute(hostName, port, userName, localUserName, home);
cache.hosts.put(cacheKey, fullConfig); cache.hosts.put(cacheKey, fullConfig);
@ -208,20 +203,19 @@ private synchronized State refresh() {
return state; return state;
} }
private Map<String, HostEntry> parse(BufferedReader reader) private List<HostEntry> parse(BufferedReader reader)
throws IOException { throws IOException {
final Map<String, HostEntry> entries = new LinkedHashMap<>(); final List<HostEntry> entries = new LinkedList<>();
final List<HostEntry> current = new ArrayList<>(4);
String line;
// The man page doesn't say so, but the openssh parser (readconf.c) // The man page doesn't say so, but the openssh parser (readconf.c)
// starts out in active mode and thus always applies any lines that // starts out in active mode and thus always applies any lines that
// occur before the first host block. We gather those options in a // occur before the first host block. We gather those options in a
// HostEntry for DEFAULT_NAME. // HostEntry for DEFAULT_NAME.
HostEntry defaults = new HostEntry(); HostEntry defaults = new HostEntry();
current.add(defaults); HostEntry current = defaults;
entries.put(DEFAULT_NAME, defaults); entries.add(defaults);
String line;
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
// OpenSsh ignores trailing comments on a line. Anything after the // OpenSsh ignores trailing comments on a line. Anything after the
// first # on a line is trimmed away (yes, even if the hash is // first # on a line is trimmed away (yes, even if the hash is
@ -246,38 +240,17 @@ private Map<String, HostEntry> parse(BufferedReader reader)
String argValue = parts.length > 1 ? parts[1].trim() : ""; //$NON-NLS-1$ String argValue = parts.length > 1 ? parts[1].trim() : ""; //$NON-NLS-1$
if (StringUtils.equalsIgnoreCase(SshConstants.HOST, keyword)) { if (StringUtils.equalsIgnoreCase(SshConstants.HOST, keyword)) {
current.clear(); current = new HostEntry(parseList(argValue));
for (String name : parseList(argValue)) { entries.add(current);
if (name == null || name.isEmpty()) {
// null should not occur, but better be safe than sorry.
continue;
}
HostEntry c = entries.get(name);
if (c == null) {
c = new HostEntry();
entries.put(name, c);
}
current.add(c);
}
continue;
}
if (current.isEmpty()) {
// We received an option outside of a Host block. We
// don't know who this should match against, so skip.
continue; continue;
} }
if (HostEntry.isListKey(keyword)) { if (HostEntry.isListKey(keyword)) {
List<String> args = validate(keyword, parseList(argValue)); List<String> args = validate(keyword, parseList(argValue));
for (HostEntry entry : current) { current.setValue(keyword, args);
entry.setValue(keyword, args);
}
} else if (!argValue.isEmpty()) { } else if (!argValue.isEmpty()) {
argValue = validate(keyword, dequote(argValue)); argValue = validate(keyword, dequote(argValue));
for (HostEntry entry : current) { current.setValue(keyword, argValue);
entry.setValue(keyword, argValue);
}
} }
} }
@ -300,7 +273,7 @@ private List<String> parseList(String argument) {
int length = argument.length(); int length = argument.length();
while (start < length) { while (start < length) {
// Skip whitespace // Skip whitespace
if (Character.isSpaceChar(argument.charAt(start))) { if (Character.isWhitespace(argument.charAt(start))) {
start++; start++;
continue; continue;
} }
@ -315,7 +288,7 @@ private List<String> parseList(String argument) {
} else { } else {
int stop = start + 1; int stop = start + 1;
while (stop < length while (stop < length
&& !Character.isSpaceChar(argument.charAt(stop))) { && !Character.isWhitespace(argument.charAt(stop))) {
stop++; stop++;
} }
result.add(argument.substring(start, stop)); result.add(argument.substring(start, stop));
@ -358,13 +331,6 @@ protected List<String> validate(String key, List<String> value) {
return value; return value;
} }
private static boolean isHostMatch(String pattern, String name) {
if (pattern.startsWith("!")) { //$NON-NLS-1$
return !patternMatchesHost(pattern.substring(1), name);
}
return patternMatchesHost(pattern, name);
}
private static boolean patternMatchesHost(String pattern, String name) { private static boolean patternMatchesHost(String pattern, String name) {
if (pattern.indexOf('*') >= 0 || pattern.indexOf('?') >= 0) { if (pattern.indexOf('*') >= 0 || pattern.indexOf('?') >= 0) {
final FileNameMatcher fn; final FileNameMatcher fn;
@ -389,9 +355,12 @@ private static String dequote(String value) {
private static String stripWhitespace(String value) { private static String stripWhitespace(String value) {
final StringBuilder b = new StringBuilder(); final StringBuilder b = new StringBuilder();
for (int i = 0; i < value.length(); i++) { int length = value.length();
if (!Character.isSpaceChar(value.charAt(i))) for (int i = 0; i < length; i++) {
b.append(value.charAt(i)); char ch = value.charAt(i);
if (!Character.isWhitespace(ch)) {
b.append(ch);
}
} }
return b.toString(); return b.toString();
} }
@ -511,6 +480,38 @@ public static class HostEntry implements SshConfigStore.HostConfig {
private Map<String, List<String>> listOptions; private Map<String, List<String>> listOptions;
private final List<String> patterns;
/**
* Constructor used to build the merged entry; never matches anything
*/
public HostEntry() {
this.patterns = Collections.emptyList();
}
/**
* @param patterns
* to be used in matching against host name.
*/
public HostEntry(List<String> patterns) {
this.patterns = patterns;
}
boolean matches(String hostName) {
boolean doesMatch = false;
for (String pattern : patterns) {
if (pattern.startsWith("!")) { //$NON-NLS-1$
if (patternMatchesHost(pattern.substring(1), hostName)) {
return false;
}
} else if (!doesMatch
&& patternMatchesHost(pattern, hostName)) {
doesMatch = true;
}
}
return doesMatch;
}
private static String toKey(String key) { private static String toKey(String key) {
String k = ALIASES.get(key); String k = ALIASES.get(key);
return k != null ? k : key; return k != null ? k : key;
@ -886,8 +887,8 @@ public void update(char key, String value) {
public String substitute(String input, String allowed, public String substitute(String input, String allowed,
boolean withEnv) { boolean withEnv) {
if (input == null || input.length() <= 1 if (input == null || input.length() <= 1
|| input.indexOf('%') < 0 || (input.indexOf('%') < 0
&& (!withEnv || input.indexOf("${") < 0)) { //$NON-NLS-1$ && (!withEnv || input.indexOf("${") < 0))) { //$NON-NLS-1$
return input; return input;
} }
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();

View File

@ -13,7 +13,6 @@
import static org.eclipse.jgit.transport.ReceiveCommand.Result.NOT_ATTEMPTED; import static org.eclipse.jgit.transport.ReceiveCommand.Result.NOT_ATTEMPTED;
import static org.eclipse.jgit.transport.ReceiveCommand.Result.REJECTED_OTHER_REASON; import static org.eclipse.jgit.transport.ReceiveCommand.Result.REJECTED_OTHER_REASON;
import static java.util.stream.Collectors.toCollection;
import java.io.IOException; import java.io.IOException;
import java.text.MessageFormat; import java.text.MessageFormat;
@ -29,7 +28,6 @@
import org.eclipse.jgit.annotations.Nullable; import org.eclipse.jgit.annotations.Nullable;
import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.RefUpdate.Result;
import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.transport.PushCertificate; import org.eclipse.jgit.transport.PushCertificate;
import org.eclipse.jgit.transport.ReceiveCommand; import org.eclipse.jgit.transport.ReceiveCommand;
@ -495,42 +493,24 @@ public void execute(RevWalk walk, ProgressMonitor monitor,
} }
} }
if (!commands2.isEmpty()) { if (!commands2.isEmpty()) {
// What part of the name space is already taken // Perform updates that may require more room in the name space
Collection<String> takenNames = refdb.getRefs().stream()
.map(Ref::getName)
.collect(toCollection(HashSet::new));
Collection<String> takenPrefixes = getTakenPrefixes(takenNames);
// Now to the update that may require more room in the name space
for (ReceiveCommand cmd : commands2) { for (ReceiveCommand cmd : commands2) {
try { try {
if (cmd.getResult() == NOT_ATTEMPTED) { if (cmd.getResult() == NOT_ATTEMPTED) {
cmd.updateType(walk); cmd.updateType(walk);
RefUpdate ru = newUpdate(cmd); RefUpdate ru = newUpdate(cmd);
SWITCH: switch (cmd.getType()) { switch (cmd.getType()) {
case DELETE: case DELETE:
// Performed in the first phase // Performed in the first phase
break; break;
case UPDATE: case UPDATE:
case UPDATE_NONFASTFORWARD: case UPDATE_NONFASTFORWARD:
RefUpdate ruu = newUpdate(cmd); RefUpdate ruu = newUpdate(cmd);
cmd.setResult(ruu.update(walk)); cmd.setResult(ruu.update(walk));
break; break;
case CREATE: case CREATE:
for (String prefix : getPrefixes(cmd.getRefName())) { cmd.setResult(ru.update(walk));
if (takenNames.contains(prefix)) { break;
cmd.setResult(Result.LOCK_FAILURE);
break SWITCH;
}
}
if (takenPrefixes.contains(cmd.getRefName())) {
cmd.setResult(Result.LOCK_FAILURE);
break SWITCH;
}
ru.setCheckConflicting(false);
takenPrefixes.addAll(getPrefixes(cmd.getRefName()));
takenNames.add(cmd.getRefName());
cmd.setResult(ru.update(walk));
} }
} }
} catch (IOException err) { } catch (IOException err) {
@ -602,14 +582,6 @@ public void execute(RevWalk walk, ProgressMonitor monitor)
execute(walk, monitor, null); execute(walk, monitor, null);
} }
private static Collection<String> getTakenPrefixes(Collection<String> names) {
Collection<String> ref = new HashSet<>();
for (String name : names) {
addPrefixesTo(name, ref);
}
return ref;
}
/** /**
* Get all path prefixes of a ref name. * Get all path prefixes of a ref name.
* *

View File

@ -397,8 +397,16 @@ public final class ConfigConstants {
/** The "ff" key */ /** The "ff" key */
public static final String CONFIG_KEY_FF = "ff"; public static final String CONFIG_KEY_FF = "ff";
/**
* The "conflictStyle" key.
*
* @since 5.12
*/
public static final String CONFIG_KEY_CONFLICTSTYLE = "conflictStyle";
/** /**
* The "checkstat" key * The "checkstat" key
*
* @since 3.0 * @since 3.0
*/ */
public static final String CONFIG_KEY_CHECKSTAT = "checkstat"; public static final String CONFIG_KEY_CHECKSTAT = "checkstat";

View File

@ -36,6 +36,8 @@ public final class FetchV2Request extends FetchRequest {
private final boolean doneReceived; private final boolean doneReceived;
private final boolean waitForDone;
@NonNull @NonNull
private final List<String> serverOptions; private final List<String> serverOptions;
@ -50,7 +52,8 @@ public final class FetchV2Request extends FetchRequest {
@NonNull Set<ObjectId> clientShallowCommits, int deepenSince, @NonNull Set<ObjectId> clientShallowCommits, int deepenSince,
@NonNull List<String> deepenNotRefs, int depth, @NonNull List<String> deepenNotRefs, int depth,
@NonNull FilterSpec filterSpec, @NonNull FilterSpec filterSpec,
boolean doneReceived, @NonNull Set<String> clientCapabilities, boolean doneReceived, boolean waitForDone,
@NonNull Set<String> clientCapabilities,
@Nullable String agent, @NonNull List<String> serverOptions, @Nullable String agent, @NonNull List<String> serverOptions,
boolean sidebandAll, @NonNull List<String> packfileUriProtocols) { boolean sidebandAll, @NonNull List<String> packfileUriProtocols) {
super(wantIds, depth, clientShallowCommits, filterSpec, super(wantIds, depth, clientShallowCommits, filterSpec,
@ -59,6 +62,7 @@ public final class FetchV2Request extends FetchRequest {
this.peerHas = requireNonNull(peerHas); this.peerHas = requireNonNull(peerHas);
this.wantedRefs = requireNonNull(wantedRefs); this.wantedRefs = requireNonNull(wantedRefs);
this.doneReceived = doneReceived; this.doneReceived = doneReceived;
this.waitForDone = waitForDone;
this.serverOptions = requireNonNull(serverOptions); this.serverOptions = requireNonNull(serverOptions);
this.sidebandAll = sidebandAll; this.sidebandAll = sidebandAll;
this.packfileUriProtocols = packfileUriProtocols; this.packfileUriProtocols = packfileUriProtocols;
@ -90,7 +94,14 @@ boolean wasDoneReceived() {
} }
/** /**
* Options received in server-option lines. The caller can choose to act on * @return true if the request had a "wait-for-done" line
*/
boolean wasWaitForDoneReceived() {
return waitForDone;
}
/**
* Options received in server-option lines. The caller can choose to act on
* these in an application-specific way * these in an application-specific way
* *
* @return Immutable list of server options received in the request * @return Immutable list of server options received in the request
@ -141,6 +152,8 @@ static final class Builder {
boolean doneReceived; boolean doneReceived;
boolean waitForDone;
@Nullable @Nullable
String agent; String agent;
@ -279,6 +292,16 @@ Builder setDoneReceived() {
return this; return this;
} }
/**
* Mark that the "wait-for-done" line has been received.
*
* @return this builder
*/
Builder setWaitForDone() {
waitForDone = true;
return this;
}
/** /**
* Value of an agent line received after the command and before the * Value of an agent line received after the command and before the
* arguments. E.g. "agent=a.b.c/1.0" should set "a.b.c/1.0". * arguments. E.g. "agent=a.b.c/1.0" should set "a.b.c/1.0".
@ -328,7 +351,7 @@ Builder addPackfileUriProtocol(@NonNull String value) {
FetchV2Request build() { FetchV2Request build() {
return new FetchV2Request(peerHas, wantedRefs, wantIds, return new FetchV2Request(peerHas, wantedRefs, wantIds,
clientShallowCommits, deepenSince, deepenNotRefs, clientShallowCommits, deepenSince, deepenNotRefs,
depth, filterSpec, doneReceived, clientCapabilities, depth, filterSpec, doneReceived, waitForDone, clientCapabilities,
agent, Collections.unmodifiableList(serverOptions), agent, Collections.unmodifiableList(serverOptions),
sidebandAll, sidebandAll,
Collections.unmodifiableList(packfileUriProtocols)); Collections.unmodifiableList(packfileUriProtocols));

View File

@ -148,6 +148,13 @@ public final class GitProtocolConstants {
*/ */
public static final String OPTION_SIDEBAND_ALL = "sideband-all"; //$NON-NLS-1$ public static final String OPTION_SIDEBAND_ALL = "sideband-all"; //$NON-NLS-1$
/**
* The server waits for client to send "done" before sending any packs back.
*
* @since 5.13
*/
public static final String OPTION_WAIT_FOR_DONE = "wait-for-done"; //$NON-NLS-1$
/** /**
* The client supports atomic pushes. If this option is used, the server * The client supports atomic pushes. If this option is used, the server
* will update all refs within one atomic transaction. * will update all refs within one atomic transaction.

View File

@ -19,6 +19,7 @@
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDEBAND_ALL; import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDEBAND_ALL;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K; import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK; import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WAIT_FOR_DONE;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WANT_REF; import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WANT_REF;
import java.io.IOException; import java.io.IOException;
@ -123,6 +124,8 @@ FetchV2Request parseFetchRequest(PacketLineIn pckIn)
reqBuilder.addPeerHas(ObjectId.fromString(line2.substring(5))); reqBuilder.addPeerHas(ObjectId.fromString(line2.substring(5)));
} else if (line2.equals("done")) { //$NON-NLS-1$ } else if (line2.equals("done")) { //$NON-NLS-1$
reqBuilder.setDoneReceived(); reqBuilder.setDoneReceived();
} else if (line2.equals(OPTION_WAIT_FOR_DONE)) {
reqBuilder.setWaitForDone();
} else if (line2.equals(OPTION_THIN_PACK)) { } else if (line2.equals(OPTION_THIN_PACK)) {
reqBuilder.addClientCapability(OPTION_THIN_PACK); reqBuilder.addClientCapability(OPTION_THIN_PACK);
} else if (line2.equals(OPTION_NO_PROGRESS)) { } else if (line2.equals(OPTION_NO_PROGRESS)) {

View File

@ -118,7 +118,7 @@ private SshConstants() {
* Key in an ssh config file; defines signature algorithms for public key * Key in an ssh config file; defines signature algorithms for public key
* authentication as a comma-separated list. * authentication as a comma-separated list.
* *
* @since 5.11 * @since 5.11.1
*/ */
public static final String PUBKEY_ACCEPTED_ALGORITHMS = "PubkeyAcceptedAlgorithms"; public static final String PUBKEY_ACCEPTED_ALGORITHMS = "PubkeyAcceptedAlgorithms";

View File

@ -120,7 +120,10 @@ static ProtocolVersion parse(@Nullable String name) {
private final boolean allowReachableSha1InWant; private final boolean allowReachableSha1InWant;
private final boolean allowFilter; private final boolean allowFilter;
private final boolean allowSidebandAll; private final boolean allowSidebandAll;
private final boolean advertiseSidebandAll; private final boolean advertiseSidebandAll;
private final boolean advertiseWaitForDone;
final @Nullable ProtocolVersion protocolVersion; final @Nullable ProtocolVersion protocolVersion;
final String[] hideRefs; final String[] hideRefs;
@ -206,6 +209,8 @@ public TransferConfig(Config rc) {
"uploadpack", "allowsidebandall", false); "uploadpack", "allowsidebandall", false);
advertiseSidebandAll = rc.getBoolean("uploadpack", advertiseSidebandAll = rc.getBoolean("uploadpack",
"advertisesidebandall", false); "advertisesidebandall", false);
advertiseWaitForDone = rc.getBoolean("uploadpack",
"advertisewaitfordone", false);
} }
/** /**
@ -304,6 +309,14 @@ public boolean isAdvertiseSidebandAll() {
return advertiseSidebandAll && allowSidebandAll; return advertiseSidebandAll && allowSidebandAll;
} }
/**
* @return true to advertise wait-for-done all to the clients
* @since 5.13
*/
public boolean isAdvertiseWaitForDone() {
return advertiseWaitForDone;
}
/** /**
* Get {@link org.eclipse.jgit.transport.RefFilter} respecting configured * Get {@link org.eclipse.jgit.transport.RefFilter} respecting configured
* hidden refs. * hidden refs.

View File

@ -33,6 +33,7 @@
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND; import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K; import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK; import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WAIT_FOR_DONE;
import static org.eclipse.jgit.transport.GitProtocolConstants.VERSION_2_REQUEST; import static org.eclipse.jgit.transport.GitProtocolConstants.VERSION_2_REQUEST;
import static org.eclipse.jgit.util.RefMap.toRefMap; import static org.eclipse.jgit.util.RefMap.toRefMap;
@ -1192,9 +1193,10 @@ private void fetchV2(PacketLineOut pckOut) throws IOException {
walk.assumeShallow(req.getClientShallowCommits()); walk.assumeShallow(req.getClientShallowCommits());
if (req.wasDoneReceived()) { if (req.wasDoneReceived()) {
processHaveLines(req.getPeerHas(), ObjectId.zeroId(), processHaveLines(
req.getPeerHas(), ObjectId.zeroId(),
new PacketLineOut(NullOutputStream.INSTANCE, false), new PacketLineOut(NullOutputStream.INSTANCE, false),
accumulator); accumulator, req.wasWaitForDoneReceived() ? Option.WAIT_FOR_DONE : Option.NONE);
} else { } else {
pckOut.writeString( pckOut.writeString(
GitProtocolConstants.SECTION_ACKNOWLEDGMENTS + '\n'); GitProtocolConstants.SECTION_ACKNOWLEDGMENTS + '\n');
@ -1205,8 +1207,8 @@ private void fetchV2(PacketLineOut pckOut) throws IOException {
} }
processHaveLines(req.getPeerHas(), ObjectId.zeroId(), processHaveLines(req.getPeerHas(), ObjectId.zeroId(),
new PacketLineOut(NullOutputStream.INSTANCE, false), new PacketLineOut(NullOutputStream.INSTANCE, false),
accumulator); accumulator, Option.NONE);
if (okToGiveUp()) { if (!req.wasWaitForDoneReceived() && okToGiveUp()) {
pckOut.writeString("ready\n"); //$NON-NLS-1$ pckOut.writeString("ready\n"); //$NON-NLS-1$
} else if (commonBase.isEmpty()) { } else if (commonBase.isEmpty()) {
pckOut.writeString("NAK\n"); //$NON-NLS-1$ pckOut.writeString("NAK\n"); //$NON-NLS-1$
@ -1214,7 +1216,7 @@ private void fetchV2(PacketLineOut pckOut) throws IOException {
sectionSent = true; sectionSent = true;
} }
if (req.wasDoneReceived() || okToGiveUp()) { if (req.wasDoneReceived() || (!req.wasWaitForDoneReceived() && okToGiveUp())) {
if (mayHaveShallow) { if (mayHaveShallow) {
if (sectionSent) if (sectionSent)
pckOut.writeDelim(); pckOut.writeDelim();
@ -1312,6 +1314,9 @@ private List<String> getV2CapabilityAdvertisement() {
? OPTION_SIDEBAND_ALL + ' ' ? OPTION_SIDEBAND_ALL + ' '
: "") : "")
+ (cachedPackUriProvider != null ? "packfile-uris " : "") + (cachedPackUriProvider != null ? "packfile-uris " : "")
+ (transferConfig.isAdvertiseWaitForDone()
? OPTION_WAIT_FOR_DONE + ' '
: "")
+ OPTION_SHALLOW); + OPTION_SHALLOW);
caps.add(CAPABILITY_SERVER_OPTION); caps.add(CAPABILITY_SERVER_OPTION);
return caps; return caps;
@ -1656,7 +1661,7 @@ private boolean negotiate(FetchRequest req,
} }
if (PacketLineIn.isEnd(line)) { if (PacketLineIn.isEnd(line)) {
last = processHaveLines(peerHas, last, pckOut, accumulator); last = processHaveLines(peerHas, last, pckOut, accumulator, Option.NONE);
if (commonBase.isEmpty() || multiAck != MultiAck.OFF) if (commonBase.isEmpty() || multiAck != MultiAck.OFF)
pckOut.writeString("NAK\n"); //$NON-NLS-1$ pckOut.writeString("NAK\n"); //$NON-NLS-1$
if (noDone && sentReady) { if (noDone && sentReady) {
@ -1671,7 +1676,7 @@ private boolean negotiate(FetchRequest req,
peerHas.add(ObjectId.fromString(line.substring(5))); peerHas.add(ObjectId.fromString(line.substring(5)));
accumulator.haves++; accumulator.haves++;
} else if (line.equals("done")) { //$NON-NLS-1$ } else if (line.equals("done")) { //$NON-NLS-1$
last = processHaveLines(peerHas, last, pckOut, accumulator); last = processHaveLines(peerHas, last, pckOut, accumulator, Option.NONE);
if (commonBase.isEmpty()) if (commonBase.isEmpty())
pckOut.writeString("NAK\n"); //$NON-NLS-1$ pckOut.writeString("NAK\n"); //$NON-NLS-1$
@ -1687,8 +1692,14 @@ else if (multiAck != MultiAck.OFF)
} }
} }
private enum Option {
WAIT_FOR_DONE,
NONE;
}
private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last, private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last,
PacketLineOut out, PackStatistics.Accumulator accumulator) PacketLineOut out, PackStatistics.Accumulator accumulator,
Option option)
throws IOException { throws IOException {
preUploadHook.onBeginNegotiateRound(this, wantIds, peerHas.size()); preUploadHook.onBeginNegotiateRound(this, wantIds, peerHas.size());
if (wantAll.isEmpty() && !wantIds.isEmpty()) if (wantAll.isEmpty() && !wantIds.isEmpty())
@ -1754,6 +1765,18 @@ private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last,
// create a pack at this point, let the client know so it stops // create a pack at this point, let the client know so it stops
// telling us about its history. // telling us about its history.
// //
if (option != Option.WAIT_FOR_DONE) {
sentReady = shouldGiveUp(peerHas, out, missCnt);
}
preUploadHook.onEndNegotiateRound(this, wantAll, haveCnt, missCnt, sentReady);
peerHas.clear();
return last;
}
private boolean shouldGiveUp(List<ObjectId> peerHas, PacketLineOut out, int missCnt)
throws IOException {
boolean sentReady = false;
boolean didOkToGiveUp = false; boolean didOkToGiveUp = false;
if (0 < missCnt) { if (0 < missCnt) {
for (int i = peerHas.size() - 1; i >= 0; i--) { for (int i = peerHas.size() - 1; i >= 0; i--) {
@ -1765,10 +1788,12 @@ private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last,
case OFF: case OFF:
break; break;
case CONTINUE: case CONTINUE:
out.writeString("ACK " + id.name() + " continue\n"); //$NON-NLS-1$ //$NON-NLS-2$ out.writeString(
"ACK " + id.name() + " continue\n"); //$NON-NLS-1$ //$NON-NLS-2$
break; break;
case DETAILED: case DETAILED:
out.writeString("ACK " + id.name() + " ready\n"); //$NON-NLS-1$ //$NON-NLS-2$ out.writeString(
"ACK " + id.name() + " ready\n"); //$NON-NLS-1$ //$NON-NLS-2$
sentReady = true; sentReady = true;
break; break;
} }
@ -1778,15 +1803,14 @@ private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last,
} }
} }
if (multiAck == MultiAck.DETAILED && !didOkToGiveUp && okToGiveUp()) { if (multiAck == MultiAck.DETAILED && !didOkToGiveUp
&& okToGiveUp()) {
ObjectId id = peerHas.get(peerHas.size() - 1); ObjectId id = peerHas.get(peerHas.size() - 1);
out.writeString("ACK " + id.name() + " ready\n"); //$NON-NLS-1$ //$NON-NLS-2$ out.writeString("ACK " + id.name() + " ready\n"); //$NON-NLS-1$ //$NON-NLS-2$
sentReady = true; sentReady = true;
} }
preUploadHook.onEndNegotiateRound(this, wantAll, haveCnt, missCnt, sentReady); return sentReady;
peerHas.clear();
return last;
} }
private void parseWants(PackStatistics.Accumulator accumulator) throws IOException { private void parseWants(PackStatistics.Accumulator accumulator) throws IOException {

Some files were not shown because too many files have changed in this diff Show More