diff options
154 files changed, 2862 insertions, 1699 deletions
diff --git a/lib/jmh/BUILD b/lib/jmh/BUILD index deb2a78def..b15e66c2b9 100644 --- a/lib/jmh/BUILD +++ b/lib/jmh/BUILD @@ -9,4 +9,4 @@ java_library( "@jopt//jar", "@math3//jar", ], -)
\ No newline at end of file +) diff --git a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF index bfa786134c..a8e76b254a 100644 --- a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF @@ -5,13 +5,13 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ant.test Bundle-SymbolicName: org.eclipse.jgit.ant.test Bundle-Vendor: %Bundle-Vendor -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: org.apache.tools.ant, - org.eclipse.jgit.ant.tasks;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", + org.eclipse.jgit.ant.tasks;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", org.hamcrest.core;version="[1.1.0,2.0.0)", org.junit;version="[4.12,5.0.0)" diff --git a/org.eclipse.jgit.ant.test/pom.xml b/org.eclipse.jgit.ant.test/pom.xml index 6935af82a4..0a0b1b3656 100644 --- a/org.eclipse.jgit.ant.test/pom.xml +++ b/org.eclipse.jgit.ant.test/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ant.test</artifactId> diff --git a/org.eclipse.jgit.ant/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant/META-INF/MANIFEST.MF index fbce458a35..a0d2fe1531 100644 --- a/org.eclipse.jgit.ant/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ant/META-INF/MANIFEST.MF @@ -3,13 +3,13 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ant Bundle-SymbolicName: org.eclipse.jgit.ant -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: org.apache.tools.ant, - org.eclipse.jgit.storage.file;version="[5.6.0,5.7.0)" + org.eclipse.jgit.storage.file;version="[5.7.0,5.8.0)" Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor -Export-Package: org.eclipse.jgit.ant;version="5.6.0", - org.eclipse.jgit.ant.tasks;version="5.6.0"; +Export-Package: org.eclipse.jgit.ant;version="5.7.0", + org.eclipse.jgit.ant.tasks;version="5.7.0"; uses:="org.apache.tools.ant, org.apache.tools.ant.types" diff --git a/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF index 80c658ec48..21bd52f31e 100644 --- a/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.ant - Sources Bundle-SymbolicName: org.eclipse.jgit.ant.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.ant;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.ant;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.ant/pom.xml b/org.eclipse.jgit.ant/pom.xml index 54f8a4b989..a53c7d00b8 100644 --- a/org.eclipse.jgit.ant/pom.xml +++ b/org.eclipse.jgit.ant/pom.xml @@ -48,7 +48,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ant</artifactId> diff --git a/org.eclipse.jgit.archive/META-INF/MANIFEST.MF b/org.eclipse.jgit.archive/META-INF/MANIFEST.MF index 956d243ba7..93fee3cecb 100644 --- a/org.eclipse.jgit.archive/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.archive/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.archive Bundle-SymbolicName: org.eclipse.jgit.archive -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-1.8 @@ -13,17 +13,17 @@ Import-Package: org.apache.commons.compress.archivers;version="[1.4,2.0)", org.apache.commons.compress.compressors.bzip2;version="[1.4,2.0)", org.apache.commons.compress.compressors.gzip;version="[1.4,2.0)", org.apache.commons.compress.compressors.xz;version="[1.4,2.0)", - org.eclipse.jgit.api;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", + org.eclipse.jgit.api;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", org.osgi.framework;version="[1.3.0,2.0.0)" Bundle-ActivationPolicy: lazy Bundle-Activator: org.eclipse.jgit.archive.FormatActivator -Export-Package: org.eclipse.jgit.archive;version="5.6.0"; +Export-Package: org.eclipse.jgit.archive;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.api, org.apache.commons.compress.archivers, org.osgi.framework", - org.eclipse.jgit.archive.internal;version="5.6.0";x-internal:=true + org.eclipse.jgit.archive.internal;version="5.7.0";x-internal:=true diff --git a/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF index c0b96705fe..65250a75c7 100644 --- a/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.archive - Sources Bundle-SymbolicName: org.eclipse.jgit.archive.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.archive;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.archive;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.archive/pom.xml b/org.eclipse.jgit.archive/pom.xml index 65a1f52170..907420ca75 100644 --- a/org.eclipse.jgit.archive/pom.xml +++ b/org.eclipse.jgit.archive/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.archive</artifactId> diff --git a/org.eclipse.jgit.benchmarks/BUILD b/org.eclipse.jgit.benchmarks/BUILD index 3c6ff0e12b..7e331b101a 100644 --- a/org.eclipse.jgit.benchmarks/BUILD +++ b/org.eclipse.jgit.benchmarks/BUILD @@ -10,4 +10,4 @@ jmh_java_benchmarks( deps = [ "//org.eclipse.jgit:jgit", ], -)
\ No newline at end of file +) diff --git a/org.eclipse.jgit.benchmarks/pom.xml b/org.eclipse.jgit.benchmarks/pom.xml index a25db37f54..f74df6d153 100644 --- a/org.eclipse.jgit.benchmarks/pom.xml +++ b/org.eclipse.jgit.benchmarks/pom.xml @@ -47,7 +47,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.eclipse.jgit</groupId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> <artifactId>org.eclipse.jgit.benchmarks</artifactId> <packaging>jar</packaging> @@ -124,7 +124,7 @@ <dependency> <groupId>com.google.errorprone</groupId> <artifactId>error_prone_core</artifactId> - <version>2.3.3</version> + <version>2.3.4</version> </dependency> </dependencies> </plugin> diff --git a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/CreateFileSnapshotBenchmark.java b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/CreateFileSnapshotBenchmark.java index ffe4a26d8b..21c54c563f 100644 --- a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/CreateFileSnapshotBenchmark.java +++ b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/CreateFileSnapshotBenchmark.java @@ -45,7 +45,6 @@ package org.eclipse.jgit.benchmarks; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.UUID; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.internal.storage.file.FileSnapshot; diff --git a/org.eclipse.jgit.coverage/pom.xml b/org.eclipse.jgit.coverage/pom.xml index 9dfb251080..53a46fc1b9 100644 --- a/org.eclipse.jgit.coverage/pom.xml +++ b/org.eclipse.jgit.coverage/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> @@ -18,88 +18,88 @@ <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ant</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.archive</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.http.apache</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.http.server</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.lfs</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.lfs.server</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.pgm</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ui</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ssh.apache</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.test</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ant.test</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.http.test</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.pgm.test</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.lfs.test</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.lfs.server.test</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> </dependencies> diff --git a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF index ff97910919..f19031f896 100644 --- a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.http.apache Bundle-SymbolicName: org.eclipse.jgit.http.apache -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor @@ -23,11 +23,11 @@ Import-Package: org.apache.http;version="[4.3.0,5.0.0)", org.apache.http.impl.client;version="[4.3.0,5.0.0)", org.apache.http.impl.conn;version="[4.3.0,5.0.0)", org.apache.http.params;version="[4.3.0,5.0.0)", - org.eclipse.jgit.annotations;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.http;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)" -Export-Package: org.eclipse.jgit.transport.http.apache;version="5.6.0"; + org.eclipse.jgit.annotations;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.http;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)" +Export-Package: org.eclipse.jgit.transport.http.apache;version="5.7.0"; uses:="org.apache.http.client, org.eclipse.jgit.transport.http, org.apache.http.entity, diff --git a/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF index 8950164877..6d11830f28 100644 --- a/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.http.apache - Sources Bundle-SymbolicName: org.eclipse.jgit.http.apache.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.http.apache/pom.xml b/org.eclipse.jgit.http.apache/pom.xml index 4be8a980ff..4c94d21174 100644 --- a/org.eclipse.jgit.http.apache/pom.xml +++ b/org.eclipse.jgit.http.apache/pom.xml @@ -48,7 +48,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.http.apache</artifactId> diff --git a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF index bad1d8a869..0e86099903 100644 --- a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF @@ -3,13 +3,13 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.http.server Bundle-SymbolicName: org.eclipse.jgit.http.server -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor -Export-Package: org.eclipse.jgit.http.server;version="5.6.0", - org.eclipse.jgit.http.server.glue;version="5.6.0"; +Export-Package: org.eclipse.jgit.http.server;version="5.7.0", + org.eclipse.jgit.http.server.glue;version="5.7.0"; uses:="javax.servlet,javax.servlet.http", - org.eclipse.jgit.http.server.resolver;version="5.6.0"; + org.eclipse.jgit.http.server.resolver;version="5.7.0"; uses:="org.eclipse.jgit.transport.resolver, org.eclipse.jgit.lib, org.eclipse.jgit.transport, @@ -18,14 +18,14 @@ Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: javax.servlet;version="[2.5.0,3.2.0)", javax.servlet.http;version="[2.5.0,3.2.0)", - org.eclipse.jgit.annotations;version="[5.5.0,5.7.0)", - org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.dfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.transport.parser;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.resolver;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)" + org.eclipse.jgit.annotations;version="[5.7.0,5.8.0)", + org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.dfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.transport.parser;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.resolver;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)" diff --git a/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF index e051fd8283..d85db5e60e 100644 --- a/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.http.server - Sources Bundle-SymbolicName: org.eclipse.jgit.http.server.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.http.server/pom.xml b/org.eclipse.jgit.http.server/pom.xml index 97d90d0b54..e4ce5330ec 100644 --- a/org.eclipse.jgit.http.server/pom.xml +++ b/org.eclipse.jgit.http.server/pom.xml @@ -52,7 +52,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.http.server</artifactId> diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitFilter.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitFilter.java index e9462eeb4c..06970a7693 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitFilter.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitFilter.java @@ -96,6 +96,8 @@ public class GitFilter extends MetaFilter { private ReceivePackFactory<HttpServletRequest> receivePackFactory = new DefaultReceivePackFactory(); + private ReceivePackErrorHandler receivePackErrorHandler; + private final List<Filter> uploadPackFilters = new LinkedList<>(); private final List<Filter> receivePackFilters = new LinkedList<>(); @@ -190,6 +192,17 @@ public class GitFilter extends MetaFilter { } /** + * Set a custom error handler for git-receive-pack. + * + * @param h + * A custom error handler for git-receive-pack. + */ + public void setReceivePackErrorHandler(ReceivePackErrorHandler h) { + assertNotInitialized(); + this.receivePackErrorHandler = h; + } + + /** * Add receive-pack filter * * @param filter @@ -233,7 +246,7 @@ public class GitFilter extends MetaFilter { b = b.through(new ReceivePackServlet.Factory(receivePackFactory)); for (Filter f : receivePackFilters) b = b.through(f); - b.with(new ReceivePackServlet()); + b.with(new ReceivePackServlet(receivePackErrorHandler)); } ServletBinder refs = serve("*/" + Constants.INFO_REFS); diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java index 5e09d012d7..5077e83b36 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java @@ -48,8 +48,6 @@ import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR; import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static org.eclipse.jgit.http.server.ServletUtils.ATTRIBUTE_HANDLER; import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_SIDE_BAND_64K; -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.SideBandOutputStream.CH_ERROR; import static org.eclipse.jgit.transport.SideBandOutputStream.SMALL_BUF; @@ -64,14 +62,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.internal.transport.parser.FirstCommand; -import org.eclipse.jgit.internal.transport.parser.FirstWant; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.transport.PacketLineIn; import org.eclipse.jgit.transport.PacketLineOut; import org.eclipse.jgit.transport.ReceivePack; import org.eclipse.jgit.transport.RequestNotYetReadException; import org.eclipse.jgit.transport.SideBandOutputStream; -import org.eclipse.jgit.transport.UploadPack; /** * Utility functions for handling the Git-over-HTTP protocol. @@ -220,44 +216,15 @@ public class GitSmartHttpTools { private static void sendUploadPackError(HttpServletRequest req, HttpServletResponse res, String textForGit) throws IOException { + // Do not use sideband. Sideband is acceptable only while packfile is + // being sent. Other places, like acknowledgement section, do not + // support sideband. Use an error packet. ByteArrayOutputStream buf = new ByteArrayOutputStream(128); PacketLineOut pckOut = new PacketLineOut(buf); - - boolean sideband; - UploadPack up = (UploadPack) req.getAttribute(ATTRIBUTE_HANDLER); - if (up != null) { - try { - sideband = up.isSideBand(); - } catch (RequestNotYetReadException e) { - sideband = isUploadPackSideBand(req); - } - } else - sideband = isUploadPackSideBand(req); - - if (sideband) - writeSideBand(buf, textForGit); - else - writePacket(pckOut, textForGit); + writePacket(pckOut, textForGit); send(req, res, UPLOAD_PACK_RESULT_TYPE, buf.toByteArray()); } - private static boolean isUploadPackSideBand(HttpServletRequest req) { - try { - // The client may be in a state where they have sent the sideband - // capability and are expecting a response in the sideband, but we might - // not have an UploadPack, or it might not have read any of the request. - // So, cheat and read the first line. - String line = new PacketLineIn(req.getInputStream()).readString(); - FirstWant parsed = FirstWant.fromLine(line); - return (parsed.getCapabilities().contains(OPTION_SIDE_BAND) - || parsed.getCapabilities().contains(OPTION_SIDE_BAND_64K)); - } catch (IOException e) { - // Probably the connection is closed and a subsequent write will fail, but - // try it just in case. - return false; - } - } - private static void sendReceivePackError(HttpServletRequest req, HttpServletResponse res, String textForGit) throws IOException { ByteArrayOutputStream buf = new ByteArrayOutputStream(128); @@ -308,7 +275,7 @@ public class GitSmartHttpTools { private static void writePacket(PacketLineOut pckOut, String textForGit) throws IOException { - pckOut.writeString("error: " + textForGit); + pckOut.writeString("ERR " + textForGit); } private static void send(HttpServletRequest req, HttpServletResponse res, diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackErrorHandler.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackErrorHandler.java new file mode 100644 index 0000000000..ee66cb102f --- /dev/null +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackErrorHandler.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2019, Google LLC 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 + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.http.server; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jgit.transport.ReceivePack; +import org.eclipse.jgit.transport.ServiceMayNotContinueException; + +/** + * Handle git-receive-pack errors. + * + * <p> + * This is an entry point for customizing an error handler for git-receive-pack. + * Right before calling {@link ReceivePack#receiveWithExceptionPropagation}, + * JGit will call this handler if specified through {@link GitFilter}. The + * implementation of this handler is responsible for calling + * {@link ReceivePackRunnable} and handling exceptions for clients. + * + * <p> + * If a custom handler is not specified, JGit will use the default error + * handler. + * + * @since 5.6 + */ +public interface ReceivePackErrorHandler { + /** + * @param req + * The HTTP request + * @param rsp + * The HTTP response + * @param r + * A continuation that handles a git-receive-pack request. + * @throws IOException + */ + void receive(HttpServletRequest req, HttpServletResponse rsp, + ReceivePackRunnable r) throws IOException; + + /** Process a git-receive-pack request. */ + public interface ReceivePackRunnable { + /** + * See {@link ReceivePack#receiveWithExceptionPropagation}. + * + * @throws ServiceMayNotContinueException + * @throws IOException + */ + void receive() throws ServiceMayNotContinueException, IOException; + } + +} diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java index aed36560a8..eb130d0a28 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/ReceivePackServlet.java @@ -71,6 +71,7 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.eclipse.jgit.annotations.Nullable; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.PackProtocolException; import org.eclipse.jgit.errors.UnpackException; @@ -161,6 +162,13 @@ class ReceivePackServlet extends HttpServlet { } } + @Nullable + private final ReceivePackErrorHandler handler; + + ReceivePackServlet(@Nullable ReceivePackErrorHandler handler) { + this.handler = handler; + } + /** {@inheritDoc} */ @Override public void doPost(final HttpServletRequest req, @@ -178,34 +186,42 @@ class ReceivePackServlet extends HttpServlet { }; ReceivePack rp = (ReceivePack) req.getAttribute(ATTRIBUTE_HANDLER); - try { - rp.setBiDirectionalPipe(false); - rsp.setContentType(RECEIVE_PACK_RESULT_TYPE); - - rp.receive(getInputStream(req), out, null); - out.close(); - } catch (CorruptObjectException e ) { - // This should be already reported to the client. - getServletContext().log(MessageFormat.format( - HttpServerText.get().receivedCorruptObject, - e.getMessage(), - ServletUtils.identify(rp.getRepository()))); - consumeRequestBody(req); - out.close(); - - } catch (UnpackException | PackProtocolException e) { - // This should be already reported to the client. - log(rp.getRepository(), e.getCause()); - consumeRequestBody(req); - out.close(); - - } catch (Throwable e) { - log(rp.getRepository(), e); - if (!rsp.isCommitted()) { - rsp.reset(); - sendError(req, rsp, SC_INTERNAL_SERVER_ERROR); + rp.setBiDirectionalPipe(false); + rsp.setContentType(RECEIVE_PACK_RESULT_TYPE); + + if (handler != null) { + handler.receive(req, rsp, () -> { + rp.receiveWithExceptionPropagation(getInputStream(req), out, + null); + out.close(); + }); + } else { + try { + rp.receive(getInputStream(req), out, null); + out.close(); + } catch (CorruptObjectException e ) { + // This should be already reported to the client. + getServletContext().log(MessageFormat.format( + HttpServerText.get().receivedCorruptObject, + e.getMessage(), + ServletUtils.identify(rp.getRepository()))); + consumeRequestBody(req); + out.close(); + + } catch (UnpackException | PackProtocolException e) { + // This should be already reported to the client. + log(rp.getRepository(), e.getCause()); + consumeRequestBody(req); + out.close(); + + } catch (Throwable e) { + log(rp.getRepository(), e); + if (!rsp.isCommitted()) { + rsp.reset(); + sendError(req, rsp, SC_INTERNAL_SERVER_ERROR); + } + return; } - return; } } diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java index 54561e0cfc..6baab5ddd7 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java @@ -70,7 +70,9 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.eclipse.jgit.annotations.Nullable; +import org.eclipse.jgit.errors.PackProtocolException; import org.eclipse.jgit.http.server.UploadPackErrorHandler.UploadPackRunnable; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.InternalHttpServerGlue; @@ -212,7 +214,8 @@ class UploadPackServlet extends HttpServlet { rsp.setContentType(UPLOAD_PACK_RESULT_TYPE); try { - up.upload(getInputStream(req), out, null); + up.uploadWithExceptionPropagation(getInputStream(req), out, + null); out.close(); } catch (ServiceMayNotContinueException e) { if (e.isOutput()) { @@ -245,7 +248,9 @@ class UploadPackServlet extends HttpServlet { log(up.getRepository(), e); if (!rsp.isCommitted()) { rsp.reset(); - sendError(req, rsp, SC_INTERNAL_SERVER_ERROR); + String msg = e instanceof PackProtocolException ? e.getMessage() + : null; + sendError(req, rsp, SC_INTERNAL_SERVER_ERROR, msg); } } } diff --git a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF index 97f1105ad2..d4ea158864 100644 --- a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.http.test Bundle-SymbolicName: org.eclipse.jgit.http.test -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-1.8 @@ -28,25 +28,25 @@ Import-Package: javax.servlet;version="[2.5.0,3.2.0)", org.eclipse.jetty.util.log;version="[9.4.5,10.0.0)", org.eclipse.jetty.util.security;version="[9.4.5,10.0.0)", org.eclipse.jetty.util.thread;version="[9.4.5,10.0.0)", - org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.http.server;version="[5.6.0,5.7.0)", - org.eclipse.jgit.http.server.glue;version="[5.6.0,5.7.0)", - org.eclipse.jgit.http.server.resolver;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.dfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.reftable;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit.http;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.http;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.http.apache;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.resolver;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", + org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.http.server;version="[5.7.0,5.8.0)", + org.eclipse.jgit.http.server.glue;version="[5.7.0,5.8.0)", + org.eclipse.jgit.http.server.resolver;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.dfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.reftable;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit.http;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.http;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.http.apache;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.resolver;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", org.hamcrest;version="[1.1.0,2.0.0)", org.hamcrest.core;version="[1.1.0,2.0.0)", org.junit;version="[4.12,5.0.0)", diff --git a/org.eclipse.jgit.http.test/pom.xml b/org.eclipse.jgit.http.test/pom.xml index e055c58a15..94c97427aa 100644 --- a/org.eclipse.jgit.http.test/pom.xml +++ b/org.eclipse.jgit.http.test/pom.xml @@ -51,7 +51,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.http.test</artifactId> diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java index 99aa06b17c..b23fd28547 100644 --- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java +++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java @@ -1214,7 +1214,7 @@ public class SmartClientSmartServerTest extends AllFactoriesHttpTestCase { Collections.<ObjectId> emptySet()); fail("Successfully served ref with value " + c.getRef(master)); } catch (TransportException err) { - assertEquals("internal server error", err.getMessage()); + assertEquals("Internal server error", err.getMessage()); } } finally { noRefServer.tearDown(); diff --git a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF index 5806277710..5c889f6df8 100644 --- a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.junit.http Bundle-SymbolicName: org.eclipse.jgit.junit.http -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy @@ -22,16 +22,16 @@ Import-Package: javax.servlet;version="[2.5.0,3.2.0)", org.eclipse.jetty.util.log;version="[9.4.5,10.0.0)", org.eclipse.jetty.util.security;version="[9.4.5,10.0.0)", org.eclipse.jetty.util.ssl;version="[9.4.5,10.0.0)", - org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.http.server;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.resolver;version="[5.6.0,5.7.0)", + org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.http.server;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.resolver;version="[5.7.0,5.8.0)", org.junit;version="[4.12,5.0.0)" -Export-Package: org.eclipse.jgit.junit.http;version="5.6.0"; +Export-Package: org.eclipse.jgit.junit.http;version="5.7.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.junit, javax.servlet.http, diff --git a/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF index b454cd0fec..3d79cd9825 100644 --- a/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.junit.http - Sources Bundle-SymbolicName: org.eclipse.jgit.junit.http.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.junit.http/pom.xml b/org.eclipse.jgit.junit.http/pom.xml index c69f194b8a..dbaa2780af 100644 --- a/org.eclipse.jgit.junit.http/pom.xml +++ b/org.eclipse.jgit.junit.http/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.junit.http</artifactId> diff --git a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF index 7ece7603f9..44a0fb6c43 100644 --- a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.junit.ssh Bundle-SymbolicName: org.eclipse.jgit.junit.ssh -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy @@ -30,8 +30,8 @@ Import-Package: org.apache.sshd.common;version="[2.2.0,2.3.0)", org.apache.sshd.server.shell;version="[2.2.0,2.3.0)", org.apache.sshd.server.subsystem;version="[2.2.0,2.3.0)", org.apache.sshd.server.subsystem.sftp;version="[2.2.0,2.3.0)", - org.eclipse.jgit.annotations;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", + org.eclipse.jgit.annotations;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", org.slf4j;version="[1.7.0,2.0.0)" -Export-Package: org.eclipse.jgit.junit.ssh;version="5.6.0" +Export-Package: org.eclipse.jgit.junit.ssh;version="5.7.0" diff --git a/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF index 2438c0085e..98c2db52ed 100644 --- a/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.junit.ssh - Sources Bundle-SymbolicName: org.eclipse.jgit.junit.ssh.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.junit.ssh/pom.xml b/org.eclipse.jgit.junit.ssh/pom.xml index d4591d7338..e81c02db8b 100644 --- a/org.eclipse.jgit.junit.ssh/pom.xml +++ b/org.eclipse.jgit.junit.ssh/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.junit.ssh</artifactId> diff --git a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF index aedfaa99f2..871e329155 100644 --- a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF @@ -3,35 +3,35 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.junit Bundle-SymbolicName: org.eclipse.jgit.junit -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: org.eclipse.jgit.annotations;version="[5.6.0,5.7.0)", - org.eclipse.jgit.api;version="[5.6.0,5.7.0)", - org.eclipse.jgit.api.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.dircache;version="[5.6.0,5.7.0)", - org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.pack;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.merge;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="5.6.0", - org.eclipse.jgit.treewalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk.filter;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util.io;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util.time;version="[5.6.0,5.7.0)", +Import-Package: org.eclipse.jgit.annotations;version="[5.7.0,5.8.0)", + org.eclipse.jgit.api;version="[5.7.0,5.8.0)", + org.eclipse.jgit.api.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.dircache;version="[5.7.0,5.8.0)", + org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.pack;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.merge;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="5.7.0", + org.eclipse.jgit.treewalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk.filter;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util.io;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util.time;version="[5.7.0,5.8.0)", org.junit;version="[4.12,5.0.0)", org.junit.rules;version="[4.12,5.0.0)", org.junit.runner;version="[4.12,5.0.0)", org.junit.runners;version="[4.12,5.0.0)", org.junit.runners.model;version="[4.12,5.0.0)", org.slf4j;version="[1.7.0,2.0.0)" -Export-Package: org.eclipse.jgit.junit;version="5.6.0"; +Export-Package: org.eclipse.jgit.junit;version="5.7.0"; uses:="org.eclipse.jgit.dircache, org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, @@ -44,4 +44,4 @@ Export-Package: org.eclipse.jgit.junit;version="5.6.0"; org.junit.runners.model, org.junit.runner, org.eclipse.jgit.util.time", - org.eclipse.jgit.junit.time;version="5.6.0";uses:="org.eclipse.jgit.util.time" + org.eclipse.jgit.junit.time;version="5.7.0";uses:="org.eclipse.jgit.util.time" diff --git a/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF index d9a24d8dea..5fa88cb2a5 100644 --- a/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.junit - Sources Bundle-SymbolicName: org.eclipse.jgit.junit.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.junit;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.junit;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.junit/pom.xml b/org.eclipse.jgit.junit/pom.xml index af0a7f1c7a..1385f30dcd 100644 --- a/org.eclipse.jgit.junit/pom.xml +++ b/org.eclipse.jgit.junit/pom.xml @@ -52,7 +52,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.junit</artifactId> diff --git a/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF index 4279a4aeb9..c4d3c90f00 100644 --- a/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.lfs.server.test Bundle-SymbolicName: org.eclipse.jgit.lfs.server.test -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-1.8 @@ -28,24 +28,24 @@ Import-Package: javax.servlet;version="[3.1.0,4.0.0)", org.eclipse.jetty.util.log;version="[9.4.5,10.0.0)", org.eclipse.jetty.util.security;version="[9.4.5,10.0.0)", org.eclipse.jetty.util.thread;version="[9.4.5,10.0.0)", - org.eclipse.jgit.api;version="[5.6.0,5.7.0)", - org.eclipse.jgit.api.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit.http;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.server;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.server.fs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.test;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk.filter;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", + org.eclipse.jgit.api;version="[5.7.0,5.8.0)", + org.eclipse.jgit.api.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit.http;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.server;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.server.fs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.test;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk.filter;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", org.hamcrest.core;version="[1.1.0,2.0.0)", org.junit;version="[4.12,5.0.0)", org.junit.rules;version="[4.12,5.0.0)", diff --git a/org.eclipse.jgit.lfs.server.test/pom.xml b/org.eclipse.jgit.lfs.server.test/pom.xml index 6fb9b78c93..a291e0f7bb 100644 --- a/org.eclipse.jgit.lfs.server.test/pom.xml +++ b/org.eclipse.jgit.lfs.server.test/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.lfs.server.test</artifactId> diff --git a/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF index fb0ee06d6e..90ebd90c0c 100644 --- a/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF @@ -3,19 +3,19 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.lfs.server Bundle-SymbolicName: org.eclipse.jgit.lfs.server -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor -Export-Package: org.eclipse.jgit.lfs.server;version="5.6.0"; +Export-Package: org.eclipse.jgit.lfs.server;version="5.7.0"; uses:="javax.servlet.http, org.eclipse.jgit.lfs.lib", - org.eclipse.jgit.lfs.server.fs;version="5.6.0"; + org.eclipse.jgit.lfs.server.fs;version="5.7.0"; uses:="javax.servlet, javax.servlet.http, org.eclipse.jgit.lfs.server, org.eclipse.jgit.lfs.lib", - org.eclipse.jgit.lfs.server.internal;version="5.6.0";x-internal:=true, - org.eclipse.jgit.lfs.server.s3;version="5.6.0"; + org.eclipse.jgit.lfs.server.internal;version="5.7.0";x-internal:=true, + org.eclipse.jgit.lfs.server.s3;version="5.7.0"; uses:="org.eclipse.jgit.lfs.server, org.eclipse.jgit.lfs.lib" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 @@ -25,15 +25,15 @@ Import-Package: com.google.gson;version="[2.8.0,3.0.0)", javax.servlet.http;version="[3.1.0,4.0.0)", org.apache.http;version="[4.3.0,5.0.0)", org.apache.http.client;version="[4.3.0,5.0.0)", - org.eclipse.jgit.annotations;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.internal;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.http;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.http.apache;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", + org.eclipse.jgit.annotations;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.internal;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.http;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.http.apache;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", org.slf4j;version="[1.7.0,2.0.0)" diff --git a/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF index 6f1c3a4731..bac5ee298f 100644 --- a/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.lfs.server - Sources Bundle-SymbolicName: org.eclipse.jgit.lfs.server.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.lfs.server/pom.xml b/org.eclipse.jgit.lfs.server/pom.xml index b95806b17d..a8c577a09d 100644 --- a/org.eclipse.jgit.lfs.server/pom.xml +++ b/org.eclipse.jgit.lfs.server/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.lfs.server</artifactId> diff --git a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF index 549a0ff8f7..e3fcf70ce2 100644 --- a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF @@ -3,22 +3,22 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.lfs.test Bundle-SymbolicName: org.eclipse.jgit.lfs.test -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: org.eclipse.jgit.internal.storage.dfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk.filter;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", +Import-Package: org.eclipse.jgit.internal.storage.dfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk.filter;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", org.hamcrest.core;version="[1.1.0,2.0.0)", org.junit;version="[4.12,5.0.0)", org.junit.runner;version="[4.12,5.0.0)", org.junit.runners;version="[4.12,5.0.0)" -Export-Package: org.eclipse.jgit.lfs.test;version="5.6.0";x-friends:="org.eclipse.jgit.lfs.server.test" +Export-Package: org.eclipse.jgit.lfs.test;version="5.7.0";x-friends:="org.eclipse.jgit.lfs.server.test" diff --git a/org.eclipse.jgit.lfs.test/pom.xml b/org.eclipse.jgit.lfs.test/pom.xml index d1691c3183..778f7a8b6e 100644 --- a/org.eclipse.jgit.lfs.test/pom.xml +++ b/org.eclipse.jgit.lfs.test/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.lfs.test</artifactId> diff --git a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF index 1fd1957afe..a1404f0a47 100644 --- a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF @@ -3,33 +3,33 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.lfs Bundle-SymbolicName: org.eclipse.jgit.lfs -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor -Export-Package: org.eclipse.jgit.lfs;version="5.6.0", - org.eclipse.jgit.lfs.errors;version="5.6.0", - org.eclipse.jgit.lfs.internal;version="5.6.0";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server", - org.eclipse.jgit.lfs.lib;version="5.6.0" +Export-Package: org.eclipse.jgit.lfs;version="5.7.0", + org.eclipse.jgit.lfs.errors;version="5.7.0", + org.eclipse.jgit.lfs.internal;version="5.7.0";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server", + org.eclipse.jgit.lfs.lib;version="5.7.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: com.google.gson;version="[2.8.2,3.0.0)", com.google.gson.stream;version="[2.8.2,3.0.0)", org.apache.http.impl.client;version="[4.2.6,5.0.0)", org.apache.http.impl.conn;version="[4.2.6,5.0.0)", - org.eclipse.jgit.annotations;version="[5.6.0,5.7.0)";resolution:=optional, - org.eclipse.jgit.api.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.attributes;version="[5.6.0,5.7.0)", - org.eclipse.jgit.diff;version="[5.6.0,5.7.0)", - org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.hooks;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.pack;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.http;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk.filter;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util.io;version="[5.6.0,5.7.0)" + org.eclipse.jgit.annotations;version="[5.7.0,5.8.0)";resolution:=optional, + org.eclipse.jgit.api.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.attributes;version="[5.7.0,5.8.0)", + org.eclipse.jgit.diff;version="[5.7.0,5.8.0)", + org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.hooks;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.pack;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.http;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk.filter;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util.io;version="[5.7.0,5.8.0)" diff --git a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF index 382d1561e1..4dacb48474 100644 --- a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.lfs - Sources Bundle-SymbolicName: org.eclipse.jgit.lfs.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.lfs/pom.xml b/org.eclipse.jgit.lfs/pom.xml index f1df7a0833..49daf4238c 100644 --- a/org.eclipse.jgit.lfs/pom.xml +++ b/org.eclipse.jgit.lfs/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.lfs</artifactId> diff --git a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/BuiltinLFS.java b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/BuiltinLFS.java index 3c5826362c..e90d92976a 100644 --- a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/BuiltinLFS.java +++ b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/BuiltinLFS.java @@ -106,6 +106,16 @@ public class BuiltinLFS extends LfsFactory { return null; } + @Override + @Nullable + public PrePushHook getPrePushHook(Repository repo, PrintStream outputStream, + PrintStream errorStream) { + if (isEnabled(repo)) { + return new LfsPrePushHook(repo, outputStream, errorStream); + } + return null; + } + /** * @param db * the repository diff --git a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/LfsPrePushHook.java b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/LfsPrePushHook.java index 3e6a26159b..b3e304fea2 100644 --- a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/LfsPrePushHook.java +++ b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/LfsPrePushHook.java @@ -107,6 +107,20 @@ public class LfsPrePushHook extends PrePushHook { super(repo, outputStream); } + /** + * @param repo + * the repository + * @param outputStream + * not used by this implementation + * @param errorStream + * not used by this implementation + * @since 5.6 + */ + public LfsPrePushHook(Repository repo, PrintStream outputStream, + PrintStream errorStream) { + super(repo, outputStream, errorStream); + } + @Override public void setRefs(Collection<RemoteRefUpdate> toRefs) { this.refs = toRefs; diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml index fb36ac0abc..7c5106380a 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit" label="%featureName" - version="5.6.0.qualifier" + version="5.7.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml index 0cbe270867..cc5f5aeb83 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml index de604cd6e0..17a732b4aa 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit.http.apache" label="%featureName" - version="5.6.0.qualifier" + version="5.7.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import plugin="org.eclipse.jgit" version="5.6.0" match="equivalent"/> + <import plugin="org.eclipse.jgit" version="5.7.0" match="equivalent"/> </requires> <plugin diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml index 81e69d24f0..66d7b300df 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml index 4604b4f8a0..2b46472561 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit.junit" label="%featureName" - version="5.6.0.qualifier" + version="5.7.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -24,7 +24,7 @@ <requires> <import plugin="com.jcraft.jsch"/> - <import plugin="org.eclipse.jgit" version="5.6.0" match="equivalent"/> + <import plugin="org.eclipse.jgit" version="5.7.0" match="equivalent"/> </requires> <plugin diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml index 5d07fa479b..479dcc0d6f 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml index 1b2897d04c..bc8ff0bd53 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit.lfs" label="%featureName" - version="5.6.0.qualifier" + version="5.7.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import feature="org.eclipse.jgit" version="5.6.0" match="equivalent"/> + <import feature="org.eclipse.jgit" version="5.7.0" match="equivalent"/> </requires> <plugin diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml index 0a828971bd..8805bba37f 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml index dd662c9f28..62df45ef80 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit.pgm" label="%featureName" - version="5.6.0.qualifier" + version="5.7.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -35,9 +35,9 @@ version="0.0.0"/> <requires> - <import feature="org.eclipse.jgit" version="5.6.0" match="equivalent"/> - <import feature="org.eclipse.jgit.lfs" version="5.6.0" match="equivalent"/> - <import feature="org.eclipse.jgit.ssh.apache" version="5.6.0" match="equivalent"/> + <import feature="org.eclipse.jgit" version="5.7.0" match="equivalent"/> + <import feature="org.eclipse.jgit.lfs" version="5.7.0" match="equivalent"/> + <import feature="org.eclipse.jgit.ssh.apache" version="5.7.0" match="equivalent"/> </requires> <plugin diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml index 504c1a8c90..a0906c5004 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml index 8f21d1d92f..77a6d1a690 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.repository</artifactId> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml index d4828e47c3..caa0dcb09c 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit.source" label="%featureName" - version="5.6.0.qualifier" + version="5.7.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import feature="org.eclipse.jgit" version="5.6.0" match="equivalent"/> + <import feature="org.eclipse.jgit" version="5.7.0" match="equivalent"/> </requires> <plugin diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml index 933cc8f495..5ab60597e5 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId> @@ -63,7 +63,7 @@ <dependency> <groupId>org.eclipse.jgit.feature</groupId> <artifactId>org.eclipse.jgit</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </dependency> </dependencies> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml index 2582a77e77..41d251baf3 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml @@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit.ssh.apache" label="%featureName" - version="5.6.0.qualifier" + version="5.7.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import feature="org.eclipse.jgit" version="5.6.0" match="equivalent"/> + <import feature="org.eclipse.jgit" version="5.7.0" match="equivalent"/> </requires> <plugin diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml index 6fa69eae07..d7e8c61623 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF index 068c15dd98..ff1d81c113 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF @@ -2,4 +2,4 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: JGit Target Platform Bundle Bundle-SymbolicName: org.eclipse.jgit.target -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.target index 0dd5f82d42..4a0d80d7f6 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.10" sequenceNumber="1573254319"> +<target name="jgit-4.10" sequenceNumber="1575495623"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.tpd index 545ad951ed..e85e619ed7 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.tpd @@ -1,7 +1,7 @@ target "jgit-4.10" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/releases/2018-12/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.target index 673c1b11be..3d3bb38512 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.11" sequenceNumber="1573254399"> +<target name="jgit-4.11" sequenceNumber="1575495623"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.tpd index 0e3ce8f260..cd09465a4b 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.tpd @@ -1,7 +1,7 @@ target "jgit-4.11" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/releases/2019-03/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.target index 385c23cf94..380636cfa9 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.12" sequenceNumber="1573254399"> +<target name="jgit-4.12" sequenceNumber="1575495623"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.tpd index e345b9aa6d..8904b99c65 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.tpd @@ -1,7 +1,7 @@ target "jgit-4.12" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/releases/2019-06/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.target index 29c23fefd0..e0fb34239e 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.13" sequenceNumber="1573254399"> +<target name="jgit-4.13" sequenceNumber="1575495624"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.tpd index 078c0ae5fb..1e5f36f776 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.tpd @@ -1,7 +1,7 @@ target "jgit-4.13" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/releases/2019-09/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14-staging.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14-staging.target index 1d302afecb..f3b5965c42 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14-staging.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14-staging.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.14-staging" sequenceNumber="1573254400"> +<target name="jgit-4.14-staging" sequenceNumber="1575495626"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14-staging.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14-staging.tpd index c6e647387d..d58281b75c 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14-staging.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14-staging.tpd @@ -1,7 +1,7 @@ target "jgit-4.14-staging" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/staging/2019-12/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.target index 4b5cfb8b5a..0c82ed63a3 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.6" sequenceNumber="1573254410"> +<target name="jgit-4.6" sequenceNumber="1575495636"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.tpd index 0b8b0d9234..f29a8252b1 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.tpd @@ -1,7 +1,7 @@ target "jgit-4.6" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/releases/neon/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.target index bb2c342797..1d7acecb5b 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.7" sequenceNumber="1573254402"> +<target name="jgit-4.7" sequenceNumber="1575495628"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.tpd index c550b4b4d4..97a2b12e2d 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.tpd @@ -1,7 +1,7 @@ target "jgit-4.7" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/releases/oxygen/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.target index d8ba4307c3..8b6bd8caff 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.8" sequenceNumber="1573254398"> +<target name="jgit-4.8" sequenceNumber="1575495623"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.tpd index fc8d6b4fcb..1fea5c19ee 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.tpd @@ -1,7 +1,7 @@ target "jgit-4.8" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/releases/photon/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.target index c95e05f847..67c389bbb7 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.target @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.9" sequenceNumber="1573254399"> +<target name="jgit-4.9" sequenceNumber="1575495623"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.jetty.client" version="9.4.22.v20191022"/> @@ -57,12 +57,12 @@ <unit id="org.apache.sshd.osgi.source" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp" version="2.2.0.v20190425-2127"/> <unit id="org.apache.sshd.sftp.source" version="2.2.0.v20190425-2127"/> - <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191104-1935"/> - <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191104-1935"/> + <unit id="org.bouncycastle.bcpg" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpg.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov" version="1.64.0.v20191109-0815"/> + <unit id="org.bouncycastle.bcprov.source" version="1.64.0.v20191109-0815"/> <unit id="org.hamcrest" version="1.1.0.v20090501071000"/> <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> @@ -82,7 +82,7 @@ <unit id="org.slf4j.impl.log4j12.source" version="1.7.2.v20131105-2200"/> <unit id="org.tukaani.xz" 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/I20191106190530/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/> </location> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="org.eclipse.osgi" version="0.0.0"/> diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.tpd index 27bb6db7c2..af165488b1 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.tpd @@ -1,7 +1,7 @@ target "jgit-4.9" with source configurePhase include "projects/jetty-9.4.22.tpd" -include "orbit/I20191106190530.tpd" +include "orbit/R20191126223242-2019-12.tpd" location "http://download.eclipse.org/releases/2018-09/" { org.eclipse.osgi lazy diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/I20191106190530.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20191126223242-2019-12.tpd index c42871466e..679e919cdb 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/I20191106190530.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20191126223242-2019-12.tpd @@ -1,7 +1,7 @@ -target "I20191106190530" with source configurePhase +target "R20191126223242-2019-12" with source configurePhase // see http://download.eclipse.org/tools/orbit/downloads/ -location "https://download.eclipse.org/tools/orbit/downloads/drops/I20191106190530/repository" { +location "https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository" { com.google.gson [2.8.2.v20180104-1110,2.8.2.v20180104-1110] com.google.gson.source [2.8.2.v20180104-1110,2.8.2.v20180104-1110] com.jcraft.jsch [0.1.55.v20190404-1902,0.1.55.v20190404-1902] @@ -36,12 +36,12 @@ location "https://download.eclipse.org/tools/orbit/downloads/drops/I201911061905 org.apache.sshd.osgi.source [2.2.0.v20190425-2127,2.2.0.v20190425-2127] org.apache.sshd.sftp [2.2.0.v20190425-2127,2.2.0.v20190425-2127] org.apache.sshd.sftp.source [2.2.0.v20190425-2127,2.2.0.v20190425-2127] - org.bouncycastle.bcpg [1.64.0.v20191104-1935,1.64.0.v20191104-1935] - org.bouncycastle.bcpg.source [1.64.0.v20191104-1935,1.64.0.v20191104-1935] - org.bouncycastle.bcpkix [1.64.0.v20191104-1935,1.64.0.v20191104-1935] - org.bouncycastle.bcpkix.source [1.64.0.v20191104-1935,1.64.0.v20191104-1935] - org.bouncycastle.bcprov [1.64.0.v20191104-1935,1.64.0.v20191104-1935] - org.bouncycastle.bcprov.source [1.64.0.v20191104-1935,1.64.0.v20191104-1935] + org.bouncycastle.bcpg [1.64.0.v20191109-0815,1.64.0.v20191109-0815] + org.bouncycastle.bcpg.source [1.64.0.v20191109-0815,1.64.0.v20191109-0815] + org.bouncycastle.bcpkix [1.64.0.v20191109-0815,1.64.0.v20191109-0815] + org.bouncycastle.bcpkix.source [1.64.0.v20191109-0815,1.64.0.v20191109-0815] + org.bouncycastle.bcprov [1.64.0.v20191109-0815,1.64.0.v20191109-0815] + org.bouncycastle.bcprov.source [1.64.0.v20191109-0815,1.64.0.v20191109-0815] org.hamcrest [1.1.0.v20090501071000,1.1.0.v20090501071000] org.hamcrest.core [1.3.0.v20180420-1519,1.3.0.v20180420-1519] org.hamcrest.core.source [1.3.0.v20180420-1519,1.3.0.v20180420-1519] diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/S20191025144108-2019-12.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/S20191025144108-2019-12.tpd deleted file mode 100644 index 6f858ff5da..0000000000 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/S20191025144108-2019-12.tpd +++ /dev/null @@ -1,65 +0,0 @@ -target "S20191025144108-2019-12" with source configurePhase -// see http://download.eclipse.org/tools/orbit/downloads/ - -location "https://download.eclipse.org/tools/orbit/downloads/drops/S20191025144108/repository" { - com.google.gson [2.8.2.v20180104-1110,2.8.2.v20180104-1110] - com.google.gson.source [2.8.2.v20180104-1110,2.8.2.v20180104-1110] - com.jcraft.jsch [0.1.55.v20190404-1902,0.1.55.v20190404-1902] - com.jcraft.jsch.source [0.1.55.v20190404-1902,0.1.55.v20190404-1902] - com.jcraft.jzlib [1.1.1.v201205102305,1.1.1.v201205102305] - com.jcraft.jzlib.source [1.1.1.v201205102305,1.1.1.v201205102305] - javaewah [1.1.6.v20160919-1400,1.1.6.v20160919-1400] - javaewah.source [1.1.6.v20160919-1400,1.1.6.v20160919-1400] - javax.servlet [3.1.0.v201410161800,3.1.0.v201410161800] - javax.servlet.source [3.1.0.v201410161800,3.1.0.v201410161800] - net.bytebuddy.byte-buddy [1.9.0.v20181107-1410,1.9.0.v20181107-1410] - net.bytebuddy.byte-buddy-agent [1.9.0.v20181106-1534,1.9.0.v20181106-1534] - net.bytebuddy.byte-buddy-agent.source [1.9.0.v20181106-1534,1.9.0.v20181106-1534] - 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.source [0.3.0.v20181102-1323,0.3.0.v20181102-1323] - org.apache.ant [1.10.7.v20190926-0324,1.10.7.v20190926-0324] - org.apache.ant.source [1.10.7.v20190926-0324,1.10.7.v20190926-0324] - org.apache.commons.codec [1.10.0.v20180409-1845,1.10.0.v20180409-1845] - org.apache.commons.codec.source [1.10.0.v20180409-1845,1.10.0.v20180409-1845] - org.apache.commons.compress [1.18.0.v20181121-2221,1.18.0.v20181121-2221] - org.apache.commons.compress.source [1.18.0.v20181121-2221,1.18.0.v20181121-2221] - org.apache.commons.logging [1.2.0.v20180409-1502,1.2.0.v20180409-1502] - org.apache.commons.logging.source [1.2.0.v20180409-1502,1.2.0.v20180409-1502] - org.apache.httpcomponents.httpclient [4.5.6.v20190503-0009,4.5.6.v20190503-0009] - org.apache.httpcomponents.httpclient.source [4.5.6.v20190503-0009,4.5.6.v20190503-0009] - org.apache.httpcomponents.httpcore [4.4.10.v20190123-2214,4.4.10.v20190123-2214] - org.apache.httpcomponents.httpcore.source [4.4.10.v20190123-2214,4.4.10.v20190123-2214] - org.apache.log4j [1.2.15.v201012070815,1.2.15.v201012070815] - org.apache.log4j.source [1.2.15.v201012070815,1.2.15.v201012070815] - org.apache.sshd.osgi [2.2.0.v20190425-2127,2.2.0.v20190425-2127] - org.apache.sshd.osgi.source [2.2.0.v20190425-2127,2.2.0.v20190425-2127] - org.apache.sshd.sftp [2.2.0.v20190425-2127,2.2.0.v20190425-2127] - org.apache.sshd.sftp.source [2.2.0.v20190425-2127,2.2.0.v20190425-2127] - org.bouncycastle.bcpg [1.61.0.v20190602-1335,1.61.0.v20190602-1335] - org.bouncycastle.bcpg.source [1.61.0.v20190602-1335,1.61.0.v20190602-1335] - org.bouncycastle.bcpkix [1.61.0.v20190602-1335,1.61.0.v20190602-1335] - org.bouncycastle.bcpkix.source [1.61.0.v20190602-1335,1.61.0.v20190602-1335] - org.bouncycastle.bcprov [1.61.0.v20190602-1335,1.61.0.v20190602-1335] - org.bouncycastle.bcprov.source [1.61.0.v20190602-1335,1.61.0.v20190602-1335] - org.hamcrest [1.1.0.v20090501071000,1.1.0.v20090501071000] - org.hamcrest.core [1.3.0.v20180420-1519,1.3.0.v20180420-1519] - org.hamcrest.core.source [1.3.0.v20180420-1519,1.3.0.v20180420-1519] - org.hamcrest.library [1.3.0.v20180524-2246,1.3.0.v20180524-2246] - org.hamcrest.library.source [1.3.0.v20180524-2246,1.3.0.v20180524-2246] - org.junit [4.12.0.v201504281640,4.12.0.v201504281640] - org.junit.source [4.12.0.v201504281640,4.12.0.v201504281640] - org.kohsuke.args4j [2.33.0.v20160323-2218,2.33.0.v20160323-2218] - org.kohsuke.args4j.source [2.33.0.v20160323-2218,2.33.0.v20160323-2218] - org.mockito [2.23.0.v20190527-1420,2.23.0.v20190527-1420] - org.mockito.source [2.23.0.v20190527-1420,2.23.0.v20190527-1420] - org.objenesis [2.6.0.v20180420-1519,2.6.0.v20180420-1519] - org.objenesis.source [2.6.0.v20180420-1519,2.6.0.v20180420-1519] - org.slf4j.api [1.7.2.v20121108-1250,1.7.2.v20121108-1250] - org.slf4j.api.source [1.7.2.v20121108-1250,1.7.2.v20121108-1250] - org.slf4j.impl.log4j12 [1.7.2.v20131105-2200,1.7.2.v20131105-2200] - org.slf4j.impl.log4j12.source [1.7.2.v20131105-2200,1.7.2.v20131105-2200] - org.tukaani.xz [1.8.0.v20180207-1613,1.8.0.v20180207-1613] - org.tukaani.xz.source [1.8.0.v20180207-1613,1.8.0.v20180207-1613] -} - diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml index e8d9df0467..6f0a99450f 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml @@ -49,7 +49,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.target</artifactId> diff --git a/org.eclipse.jgit.packaging/pom.xml b/org.eclipse.jgit.packaging/pom.xml index 47a8030183..6eeb61745d 100644 --- a/org.eclipse.jgit.packaging/pom.xml +++ b/org.eclipse.jgit.packaging/pom.xml @@ -49,7 +49,7 @@ <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> <packaging>pom</packaging> <name>JGit Tycho Parent</name> diff --git a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF index fc36051db5..b48c1e5ff2 100644 --- a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF @@ -3,28 +3,28 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.pgm.test Bundle-SymbolicName: org.eclipse.jgit.pgm.test -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: org.eclipse.jgit.api;version="[5.6.0,5.7.0)", - org.eclipse.jgit.api.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.diff;version="[5.6.0,5.7.0)", - org.eclipse.jgit.dircache;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="5.6.0", - org.eclipse.jgit.junit;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.merge;version="[5.6.0,5.7.0)", - org.eclipse.jgit.pgm;version="[5.6.0,5.7.0)", - org.eclipse.jgit.pgm.internal;version="[5.6.0,5.7.0)", - org.eclipse.jgit.pgm.opt;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util.io;version="[5.6.0,5.7.0)", +Import-Package: org.eclipse.jgit.api;version="[5.7.0,5.8.0)", + org.eclipse.jgit.api.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.diff;version="[5.7.0,5.8.0)", + org.eclipse.jgit.dircache;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="5.7.0", + org.eclipse.jgit.junit;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.merge;version="[5.7.0,5.8.0)", + org.eclipse.jgit.pgm;version="[5.7.0,5.8.0)", + org.eclipse.jgit.pgm.internal;version="[5.7.0,5.8.0)", + org.eclipse.jgit.pgm.opt;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util.io;version="[5.7.0,5.8.0)", org.hamcrest.core;bundle-version="[1.1.0,2.0.0)", org.junit;version="[4.12,5.0.0)", org.junit.rules;version="[4.12,5.0.0)", diff --git a/org.eclipse.jgit.pgm.test/pom.xml b/org.eclipse.jgit.pgm.test/pom.xml index 1ba893c7f7..b1473ab919 100644 --- a/org.eclipse.jgit.pgm.test/pom.xml +++ b/org.eclipse.jgit.pgm.test/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.pgm.test</artifactId> diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/BlameTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/BlameTest.java index e806872c14..6da1e463f0 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/BlameTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/BlameTest.java @@ -42,8 +42,14 @@ */ package org.eclipse.jgit.pgm; +import static org.junit.Assert.assertTrue; + import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.MergeResult; import org.eclipse.jgit.lib.CLIRepositoryTestCase; +import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.PersonIdent; +import org.eclipse.jgit.revwalk.RevCommit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -85,7 +91,7 @@ public class BlameTest extends CLIRepositoryTestCase { git.add().addFilepattern("inIndex.txt").call(); } assertStringArrayEquals( - " (Not Committed Yet 1) index", + "00000000 (Not Committed Yet 2009-08-15 20:12:58 -0330 1) index", execute("git blame inIndex.txt")); } @@ -119,4 +125,36 @@ public class BlameTest extends CLIRepositoryTestCase { thrown.expectMessage("no such path 'sub/does_not_exist.txt' in HEAD"); execute("git blame sub/does_not_exist.txt"); } + + @Test + public void testBlameMergeConflict() throws Exception { + try (Git git = new Git(db)) { + writeTrashFile("file", "Origin\n"); + git.add().addFilepattern("file").call(); + git.commit().setMessage("initial commit").call(); + git.checkout().setCreateBranch(true) + .setName("side").call(); + writeTrashFile("file", + "Conflicting change from side branch\n"); + git.add().addFilepattern("file").call(); + RevCommit side = git.commit().setMessage("side commit") + .setCommitter(new PersonIdent("gitter", "")).call(); + git.checkout().setName(Constants.MASTER).call(); + writeTrashFile("file", "Change on master branch\n"); + git.add().addFilepattern("file").call(); + git.commit().setMessage("Commit conflict on master") + .setCommitter(new PersonIdent("gitter", "")).call(); + MergeResult result = git.merge() + .include("side", side).call(); + assertTrue("Expected conflict on 'file'", + result.getConflicts().containsKey("file")); + } + String[] expected = { + "00000000 (Not Committed Yet 2009-08-15 20:12:58 -0330 1) <<<<<<< HEAD", + "0f5b671c (gitter 2009-08-15 20:12:58 -0330 2) Change on master branch", + "00000000 (Not Committed Yet 2009-08-15 20:12:58 -0330 3) =======", + "ae78cff6 (gitter 2009-08-15 20:12:58 -0330 4) Conflicting change from side branch", + "00000000 (Not Committed Yet 2009-08-15 20:12:58 -0330 5) >>>>>>> side" }; + assertArrayOfLinesEquals(expected, execute("git blame file")); + } } diff --git a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF index 48dc730011..b280658a23 100644 --- a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.pgm Bundle-SymbolicName: org.eclipse.jgit.pgm -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy Bundle-Localization: plugin @@ -28,50 +28,50 @@ Import-Package: javax.servlet;version="[3.1.0,4.0.0)", org.eclipse.jetty.util.log;version="[9.4.5,10.0.0)", org.eclipse.jetty.util.security;version="[9.4.5,10.0.0)", org.eclipse.jetty.util.thread;version="[9.4.5,10.0.0)", - org.eclipse.jgit.api;version="[5.6.0,5.7.0)", - org.eclipse.jgit.api.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.archive;version="[5.6.0,5.7.0)", - org.eclipse.jgit.awtui;version="[5.6.0,5.7.0)", - org.eclipse.jgit.blame;version="[5.6.0,5.7.0)", - org.eclipse.jgit.diff;version="[5.6.0,5.7.0)", - org.eclipse.jgit.dircache;version="[5.6.0,5.7.0)", - org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.gitrepo;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.ketch;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.dfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.io;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.pack;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.reftable;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.reftree;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.server;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.server.fs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs.server.s3;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.merge;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.notes;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revplot;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk.filter;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.pack;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.http.apache;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.resolver;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.sshd;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk.filter;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util.io;version="[5.6.0,5.7.0)", + org.eclipse.jgit.api;version="[5.7.0,5.8.0)", + org.eclipse.jgit.api.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.archive;version="[5.7.0,5.8.0)", + org.eclipse.jgit.awtui;version="[5.7.0,5.8.0)", + org.eclipse.jgit.blame;version="[5.7.0,5.8.0)", + org.eclipse.jgit.diff;version="[5.7.0,5.8.0)", + org.eclipse.jgit.dircache;version="[5.7.0,5.8.0)", + org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.gitrepo;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.ketch;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.dfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.io;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.pack;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.reftable;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.reftree;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.server;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.server.fs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs.server.s3;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.merge;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.notes;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revplot;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk.filter;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.pack;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.http.apache;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.resolver;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.sshd;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk.filter;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util.io;version="[5.7.0,5.8.0)", org.kohsuke.args4j;version="[2.33.0,3.0.0)", org.kohsuke.args4j.spi;version="[2.33.0,3.0.0)" -Export-Package: org.eclipse.jgit.console;version="5.6.0"; +Export-Package: org.eclipse.jgit.console;version="5.7.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.util", - org.eclipse.jgit.pgm;version="5.6.0"; + org.eclipse.jgit.pgm;version="5.7.0"; uses:="org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.pgm.opt, @@ -82,11 +82,11 @@ Export-Package: org.eclipse.jgit.console;version="5.6.0"; org.eclipse.jgit.treewalk, javax.swing, org.eclipse.jgit.transport", - org.eclipse.jgit.pgm.debug;version="5.6.0"; + org.eclipse.jgit.pgm.debug;version="5.7.0"; uses:="org.eclipse.jgit.util.io, org.eclipse.jgit.pgm", - org.eclipse.jgit.pgm.internal;version="5.6.0";x-friends:="org.eclipse.jgit.pgm.test,org.eclipse.jgit.test", - org.eclipse.jgit.pgm.opt;version="5.6.0"; + org.eclipse.jgit.pgm.internal;version="5.7.0";x-friends:="org.eclipse.jgit.pgm.test,org.eclipse.jgit.test", + org.eclipse.jgit.pgm.opt;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, org.kohsuke.args4j.spi, diff --git a/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF index 70aa5003dd..95f81a3b4f 100644 --- a/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.pgm - Sources Bundle-SymbolicName: org.eclipse.jgit.pgm.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.pgm/pom.xml b/org.eclipse.jgit.pgm/pom.xml index 003076fd98..c460713159 100644 --- a/org.eclipse.jgit.pgm/pom.xml +++ b/org.eclipse.jgit.pgm/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.pgm</artifactId> diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java index b67b04c5be..1a4c111bcb 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java @@ -50,7 +50,6 @@ import static java.lang.Integer.valueOf; import static java.lang.Long.valueOf; import static org.eclipse.jgit.lib.Constants.OBJECT_ID_STRING_LENGTH; -import java.io.File; import java.io.IOException; import java.text.MessageFormat; import java.text.SimpleDateFormat; @@ -60,11 +59,11 @@ import java.util.List; import java.util.Map; import java.util.regex.Pattern; +import org.eclipse.jgit.api.errors.NoHeadException; import org.eclipse.jgit.blame.BlameGenerator; import org.eclipse.jgit.blame.BlameResult; import org.eclipse.jgit.diff.RawText; import org.eclipse.jgit.diff.RawTextComparator; -import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.errors.NoWorkTreeException; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; @@ -134,6 +133,9 @@ class Blame extends TextBuiltin { private BlameResult blame; + /** Used to get a current time stamp for lines without commit. */ + private final PersonIdent dummyDate = new PersonIdent("", ""); //$NON-NLS-1$ //$NON-NLS-2$ + /** {@inheritDoc} */ @Override protected void run() { @@ -186,28 +188,7 @@ class Blame extends TextBuiltin { } generator.push(null, rev); } else { - ObjectId head = db.resolve(Constants.HEAD); - if (head == null) { - throw die(MessageFormat.format(CLIText.get().noSuchRef, - Constants.HEAD)); - } - generator.push(null, head); - if (!db.isBare()) { - DirCache dc = db.readDirCache(); - int entry = dc.findEntry(file); - if (0 <= entry) { - generator.push(null, dc.getEntry(entry).getObjectId()); - } else { - throw die(MessageFormat.format( - CLIText.get().noSuchPathInRef, file, - Constants.HEAD)); - } - - File inTree = new File(db.getWorkTree(), file); - if (db.getFS().isFile(inTree)) { - generator.push(null, new RawText(inTree)); - } - } + generator.prepareHead(); } blame = BlameResult.create(generator); @@ -236,6 +217,10 @@ class Blame extends TextBuiltin { authorWidth = Math.max(authorWidth, author(line).length()); dateWidth = Math.max(dateWidth, date(line).length()); pathWidth = Math.max(pathWidth, path(line).length()); + } else if (c == null) { + authorWidth = Math.max(authorWidth, author(line).length()); + dateWidth = Math.max(dateWidth, date(line).length()); + pathWidth = Math.max(pathWidth, path(line).length()); } while (line + 1 < end && sameCommit(blame.getSourceCommit(line + 1), c)) { @@ -280,7 +265,7 @@ class Blame extends TextBuiltin { } while (++line < end && sameCommit(blame.getSourceCommit(line), c)); } - } catch (NoWorkTreeException | IOException e) { + } catch (NoWorkTreeException | NoHeadException | IOException e) { throw die(e.getMessage(), e); } } @@ -373,10 +358,12 @@ class Blame extends TextBuiltin { } private String date(int line) { - if (blame.getSourceCommit(line) == null) - return ""; //$NON-NLS-1$ - - PersonIdent author = blame.getSourceAuthor(line); + PersonIdent author; + if (blame.getSourceCommit(line) == null) { + author = dummyDate; + } else { + author = blame.getSourceAuthor(line); + } if (author == null) return ""; //$NON-NLS-1$ @@ -394,28 +381,37 @@ class Blame extends TextBuiltin { if (r != null) return r; - if (showBlankBoundary && commit.getParentCount() == 0) - commit = null; - if (commit == null) { - int len = showLongRevision ? OBJECT_ID_STRING_LENGTH : (abbrev + 1); - StringBuilder b = new StringBuilder(len); - for (int i = 0; i < len; i++) - b.append(' '); - r = b.toString(); - - } else if (!root && commit.getParentCount() == 0) { - if (showLongRevision) - r = "^" + commit.name().substring(0, OBJECT_ID_STRING_LENGTH - 1); //$NON-NLS-1$ - else - r = "^" + reader.abbreviate(commit, abbrev).name(); //$NON-NLS-1$ + if (showLongRevision) { + r = ObjectId.zeroId().name(); + } else { + r = ObjectId.zeroId().abbreviate(abbrev + 1).name(); + } } else { - if (showLongRevision) - r = commit.name(); - else - r = reader.abbreviate(commit, abbrev + 1).name(); + if (showBlankBoundary && commit.getParentCount() == 0) + commit = null; + + if (commit == null) { + int len = showLongRevision ? OBJECT_ID_STRING_LENGTH + : (abbrev + 1); + StringBuilder b = new StringBuilder(len); + for (int i = 0; i < len; i++) + b.append(' '); + r = b.toString(); + + } else if (!root && commit.getParentCount() == 0) { + if (showLongRevision) + r = "^" + commit.name().substring(0, //$NON-NLS-1$ + OBJECT_ID_STRING_LENGTH - 1); + else + r = "^" + reader.abbreviate(commit, abbrev).name(); //$NON-NLS-1$ + } else { + if (showLongRevision) + r = commit.name(); + else + r = reader.abbreviate(commit, abbrev + 1).name(); + } } - abbreviatedCommits.put(commit, r); return r; } diff --git a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF index 4bae3d9b6e..8fd1756440 100644 --- a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ssh.apache.test Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.test -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-1.8 @@ -15,15 +15,15 @@ Import-Package: org.apache.sshd.client.config.hosts;version="[2.2.0,2.3.0)", org.apache.sshd.common.session;version="[2.2.0,2.3.0)", org.apache.sshd.common.util.net;version="[2.2.0,2.3.0)", org.apache.sshd.common.util.security;version="[2.2.0,2.3.0)", - org.eclipse.jgit.api.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.transport.sshd.proxy;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit.ssh;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.ssh;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.sshd;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", + org.eclipse.jgit.api.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.transport.sshd.proxy;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit.ssh;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.ssh;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.sshd;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", org.junit;version="[4.12,5.0.0)", org.junit.experimental.theories;version="[4.12,5.0.0)", org.junit.runner;version="[4.12,5.0.0)" diff --git a/org.eclipse.jgit.ssh.apache.test/pom.xml b/org.eclipse.jgit.ssh.apache.test/pom.xml index 838fd83f6d..413daae4dc 100644 --- a/org.eclipse.jgit.ssh.apache.test/pom.xml +++ b/org.eclipse.jgit.ssh.apache.test/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId> diff --git a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF index 209a10f491..2ca1175635 100644 --- a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF @@ -6,9 +6,9 @@ Bundle-SymbolicName: org.eclipse.jgit.ssh.apache Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-ActivationPolicy: lazy -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Export-Package: org.eclipse.jgit.internal.transport.sshd;version="5.6.0";x-internal:=true; +Export-Package: org.eclipse.jgit.internal.transport.sshd;version="5.7.0";x-internal:=true; uses:="org.apache.sshd.client, org.apache.sshd.client.auth, org.apache.sshd.client.auth.keyboard, @@ -23,9 +23,9 @@ Export-Package: org.eclipse.jgit.internal.transport.sshd;version="5.6.0";x-inter org.apache.sshd.common.signature, org.apache.sshd.common.util.buffer, org.eclipse.jgit.transport", - org.eclipse.jgit.internal.transport.sshd.auth;version="5.6.0";x-internal:=true, - org.eclipse.jgit.internal.transport.sshd.proxy;version="5.6.0";x-friends:="org.eclipse.jgit.ssh.apache.test", - org.eclipse.jgit.transport.sshd;version="5.6.0"; + org.eclipse.jgit.internal.transport.sshd.auth;version="5.7.0";x-internal:=true, + org.eclipse.jgit.internal.transport.sshd.proxy;version="5.7.0";x-friends:="org.eclipse.jgit.ssh.apache.test", + org.eclipse.jgit.transport.sshd;version="5.7.0"; uses:="org.eclipse.jgit.transport, org.apache.sshd.client.config.hosts, org.apache.sshd.common.keyprovider, @@ -75,12 +75,12 @@ Import-Package: net.i2p.crypto.eddsa;version="[0.3.0,0.4.0)", org.apache.sshd.common.util.net;version="[2.2.0,2.3.0)", org.apache.sshd.common.util.security;version="[2.2.0,2.3.0)", org.apache.sshd.server.auth;version="[2.2.0,2.3.0)", - org.eclipse.jgit.annotations;version="[5.6.0,5.7.0)", - org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.fnmatch;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.transport.ssh;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", + org.eclipse.jgit.annotations;version="[5.7.0,5.8.0)", + org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.fnmatch;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.transport.ssh;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", org.slf4j;version="[1.7.0,2.0.0)" diff --git a/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF index c1d8d9a29a..56d4bcdb2a 100644 --- a/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.ssh.apache - Sources Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.ssh.apache/pom.xml b/org.eclipse.jgit.ssh.apache/pom.xml index 26e44b085d..af0f0fd022 100644 --- a/org.eclipse.jgit.ssh.apache/pom.xml +++ b/org.eclipse.jgit.ssh.apache/pom.xml @@ -50,7 +50,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ssh.apache</artifactId> diff --git a/org.eclipse.jgit.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.test/META-INF/MANIFEST.MF index 8043065389..d8f6bcfe28 100644 --- a/org.eclipse.jgit.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.test/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.test Bundle-SymbolicName: org.eclipse.jgit.test -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy @@ -18,58 +18,58 @@ Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)", org.apache.commons.compress.compressors.gzip;version="[1.15.0,2.0)", org.apache.commons.compress.compressors.xz;version="[1.15.0,2.0)", org.bouncycastle.util.encoders;version="[1.61.0,2.0.0)", - org.eclipse.jgit.annotations;version="[5.6.0,5.7.0)", - org.eclipse.jgit.api;version="[5.6.0,5.7.0)", - org.eclipse.jgit.api.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.archive;version="[5.6.0,5.7.0)", - org.eclipse.jgit.attributes;version="[5.6.0,5.7.0)", - org.eclipse.jgit.awtui;version="[5.6.0,5.7.0)", - org.eclipse.jgit.blame;version="[5.6.0,5.7.0)", - org.eclipse.jgit.diff;version="[5.6.0,5.7.0)", - org.eclipse.jgit.dircache;version="[5.6.0,5.7.0)", - org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.events;version="[5.6.0,5.7.0)", - org.eclipse.jgit.fnmatch;version="[5.6.0,5.7.0)", - org.eclipse.jgit.gitrepo;version="[5.6.0,5.7.0)", - org.eclipse.jgit.hooks;version="[5.6.0,5.7.0)", - org.eclipse.jgit.ignore;version="[5.6.0,5.7.0)", - org.eclipse.jgit.ignore.internal;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.fsck;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.dfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.io;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.pack;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.reftable;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.storage.reftree;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.transport.http;version="[5.6.0,5.7.0)", - org.eclipse.jgit.internal.transport.parser;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit.ssh;version="[5.6.0,5.7.0)", - org.eclipse.jgit.junit.time;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lfs;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib.internal;version="[5.6.0,5.7.0)", - org.eclipse.jgit.merge;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.notes;version="[5.6.0,5.7.0)", - org.eclipse.jgit.patch;version="[5.6.0,5.7.0)", - org.eclipse.jgit.pgm;version="[5.6.0,5.7.0)", - org.eclipse.jgit.pgm.internal;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revplot;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk.filter;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.file;version="[5.6.0,5.7.0)", - org.eclipse.jgit.storage.pack;version="[5.6.0,5.7.0)", - org.eclipse.jgit.submodule;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.http;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport.resolver;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.treewalk.filter;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util.io;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util.sha1;version="[5.6.0,5.7.0)", + org.eclipse.jgit.annotations;version="[5.7.0,5.8.0)", + org.eclipse.jgit.api;version="[5.7.0,5.8.0)", + org.eclipse.jgit.api.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.archive;version="[5.7.0,5.8.0)", + org.eclipse.jgit.attributes;version="[5.7.0,5.8.0)", + org.eclipse.jgit.awtui;version="[5.7.0,5.8.0)", + org.eclipse.jgit.blame;version="[5.7.0,5.8.0)", + org.eclipse.jgit.diff;version="[5.7.0,5.8.0)", + org.eclipse.jgit.dircache;version="[5.7.0,5.8.0)", + org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.events;version="[5.7.0,5.8.0)", + org.eclipse.jgit.fnmatch;version="[5.7.0,5.8.0)", + org.eclipse.jgit.gitrepo;version="[5.7.0,5.8.0)", + org.eclipse.jgit.hooks;version="[5.7.0,5.8.0)", + org.eclipse.jgit.ignore;version="[5.7.0,5.8.0)", + org.eclipse.jgit.ignore.internal;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.fsck;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.dfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.io;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.pack;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.reftable;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.storage.reftree;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.transport.http;version="[5.7.0,5.8.0)", + org.eclipse.jgit.internal.transport.parser;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit.ssh;version="[5.7.0,5.8.0)", + org.eclipse.jgit.junit.time;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lfs;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib.internal;version="[5.7.0,5.8.0)", + org.eclipse.jgit.merge;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.notes;version="[5.7.0,5.8.0)", + org.eclipse.jgit.patch;version="[5.7.0,5.8.0)", + org.eclipse.jgit.pgm;version="[5.7.0,5.8.0)", + org.eclipse.jgit.pgm.internal;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revplot;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk.filter;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.file;version="[5.7.0,5.8.0)", + org.eclipse.jgit.storage.pack;version="[5.7.0,5.8.0)", + org.eclipse.jgit.submodule;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.http;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport.resolver;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.treewalk.filter;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util.io;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util.sha1;version="[5.7.0,5.8.0)", org.junit;version="[4.12,5.0.0)", org.junit.experimental.theories;version="[4.12,5.0.0)", org.junit.rules;version="[4.12,5.0.0)", @@ -84,4 +84,4 @@ Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)", org.tukaani.xz;version="[1.6.0,2.0)" Require-Bundle: org.hamcrest.core;bundle-version="[1.1.0,2.0.0)", org.hamcrest.library;bundle-version="[1.1.0,2.0.0)" -Export-Package: org.eclipse.jgit.transport.ssh;version="5.6.0";x-friends:="org.eclipse.jgit.ssh.apache.test" +Export-Package: org.eclipse.jgit.transport.ssh;version="5.7.0";x-friends:="org.eclipse.jgit.ssh.apache.test" diff --git a/org.eclipse.jgit.test/pom.xml b/org.eclipse.jgit.test/pom.xml index d8af7dc524..1bd4b27f5e 100644 --- a/org.eclipse.jgit.test/pom.xml +++ b/org.eclipse.jgit.test/pom.xml @@ -52,7 +52,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.test</artifactId> diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java index 7e73084e8e..4d1375a2f5 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011, GitHub Inc. + * Copyright (C) 2011, 2019 GitHub Inc. * and other copyright owners as documented in the project's IP log. * * This program and the accompanying materials are made available @@ -44,6 +44,7 @@ package org.eclipse.jgit.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.File; @@ -462,6 +463,39 @@ public class BlameCommandTest extends RepositoryTestCase { } @Test + public void testUnresolvedMergeConflict() throws Exception { + try (Git git = new Git(db)) { + RevCommit base = commitFile("file.txt", "Origin\n", "master"); + + RevCommit master = commitFile("file.txt", + "Change on master branch\n", "master"); + + git.checkout().setName("side").setCreateBranch(true) + .setStartPoint(base).call(); + RevCommit side = commitFile("file.txt", + "Conflicting change on side\n", "side"); + + checkoutBranch("refs/heads/master"); + MergeResult result = git.merge().include(side).call(); + + // The merge results in a conflict, which we do not resolve + assertTrue("Expected a conflict", + result.getConflicts().containsKey("file.txt")); + + BlameCommand command = new BlameCommand(db); + command.setFilePath("file.txt"); + BlameResult lines = command.call(); + + assertEquals(5, lines.getResultContents().size()); + assertNull(lines.getSourceCommit(0)); + assertEquals(master, lines.getSourceCommit(1)); + assertNull(lines.getSourceCommit(2)); + assertEquals(side, lines.getSourceCommit(3)); + assertNull(lines.getSourceCommit(4)); + } + } + + @Test public void testWhitespaceMerge() throws Exception { try (Git git = new Git(db)) { RevCommit base = commitFile("file.txt", join("0", "1", "2"), "master"); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTest.java index c028ca300c..2c51f7b9b7 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTest.java @@ -40,6 +40,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + package org.eclipse.jgit.api; import static java.nio.charset.StandardCharsets.UTF_8; @@ -50,14 +51,10 @@ import static org.junit.Assert.fail; import static org.junit.Assume.assumeFalse; import java.io.File; -import java.io.IOException; import java.io.PrintWriter; import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.api.errors.NoMessageException; -import org.eclipse.jgit.errors.IncorrectObjectTypeException; -import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.junit.RepositoryTestCase; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; @@ -76,13 +73,12 @@ import org.junit.Test; */ public class CommitAndLogCommandTest extends RepositoryTestCase { @Test - public void testSomeCommits() throws JGitInternalException, IOException, - GitAPIException { - + public void testSomeCommits() throws Exception { // do 4 commits try (Git git = new Git(db)) { git.commit().setMessage("initial commit").call(); - git.commit().setMessage("second commit").setCommitter(committer).call(); + git.commit().setMessage("second commit").setCommitter(committer) + .call(); git.commit().setMessage("third commit").setAuthor(author).call(); git.commit().setMessage("fourth commit").setAuthor(author) .setCommitter(committer).call(); @@ -90,79 +86,28 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { // check that all commits came in correctly PersonIdent defaultCommitter = new PersonIdent(db); - PersonIdent expectedAuthors[] = new PersonIdent[] { defaultCommitter, - committer, author, author }; + PersonIdent expectedAuthors[] = new PersonIdent[] { + defaultCommitter, committer, author, author }; PersonIdent expectedCommitters[] = new PersonIdent[] { defaultCommitter, committer, defaultCommitter, committer }; String expectedMessages[] = new String[] { "initial commit", "second commit", "third commit", "fourth commit" }; int l = expectedAuthors.length - 1; for (RevCommit c : commits) { - assertEquals(expectedAuthors[l].getName(), c.getAuthorIdent() - .getName()); - assertEquals(expectedCommitters[l].getName(), c.getCommitterIdent() - .getName()); + assertEquals(expectedAuthors[l].getName(), + c.getAuthorIdent().getName()); + assertEquals(expectedCommitters[l].getName(), + c.getCommitterIdent().getName()); assertEquals(c.getFullMessage(), expectedMessages[l]); l--; } assertEquals(l, -1); ReflogReader reader = db.getReflogReader(Constants.HEAD); - assertTrue(reader.getLastEntry().getComment().startsWith("commit:")); + assertTrue( + reader.getLastEntry().getComment().startsWith("commit:")); reader = db.getReflogReader(db.getBranch()); - assertTrue(reader.getLastEntry().getComment().startsWith("commit:")); - } - } - - @Test - public void testLogWithFilter() throws IOException, JGitInternalException, - GitAPIException { - - try (Git git = new Git(db)) { - // create first file - File file = new File(db.getWorkTree(), "a.txt"); - FileUtils.createNewFile(file); - try (PrintWriter writer = new PrintWriter(file, UTF_8.name())) { - writer.print("content1"); - } - - // First commit - a.txt file - git.add().addFilepattern("a.txt").call(); - git.commit().setMessage("commit1").setCommitter(committer).call(); - - // create second file - file = new File(db.getWorkTree(), "b.txt"); - FileUtils.createNewFile(file); - try (PrintWriter writer = new PrintWriter(file, UTF_8.name())) { - writer.print("content2"); - } - - // Second commit - b.txt file - git.add().addFilepattern("b.txt").call(); - git.commit().setMessage("commit2").setCommitter(committer).call(); - - // First log - a.txt filter - int count = 0; - for (RevCommit c : git.log().addPath("a.txt").call()) { - assertEquals("commit1", c.getFullMessage()); - count++; - } - assertEquals(1, count); - - // Second log - b.txt filter - count = 0; - for (RevCommit c : git.log().addPath("b.txt").call()) { - assertEquals("commit2", c.getFullMessage()); - count++; - } - assertEquals(1, count); - - // Third log - without filter - count = 0; - for (RevCommit c : git.log().call()) { - assertEquals(committer, c.getCommitterIdent()); - count++; - } - assertEquals(2, count); + assertTrue( + reader.getLastEntry().getComment().startsWith("commit:")); } } @@ -204,19 +149,20 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { } @Test - public void testMergeEmptyBranches() throws IOException, - JGitInternalException, GitAPIException { + public void testMergeEmptyBranches() throws Exception { try (Git git = new Git(db)) { git.commit().setMessage("initial commit").call(); RefUpdate r = db.updateRef("refs/heads/side"); r.setNewObjectId(db.resolve(Constants.HEAD)); assertEquals(r.forceUpdate(), RefUpdate.Result.NEW); - RevCommit second = git.commit().setMessage("second commit").setCommitter(committer).call(); + RevCommit second = git.commit().setMessage("second commit") + .setCommitter(committer).call(); db.updateRef(Constants.HEAD).link("refs/heads/side"); - RevCommit firstSide = git.commit().setMessage("first side commit").setAuthor(author).call(); + RevCommit firstSide = git.commit().setMessage("first side commit") + .setAuthor(author).call(); - write(new File(db.getDirectory(), Constants.MERGE_HEAD), ObjectId - .toString(db.resolve("refs/heads/master"))); + write(new File(db.getDirectory(), Constants.MERGE_HEAD), + ObjectId.toString(db.resolve("refs/heads/master"))); write(new File(db.getDirectory(), Constants.MERGE_MSG), "merging"); RevCommit commit = git.commit().call(); @@ -228,8 +174,7 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { } @Test - public void testAddUnstagedChanges() throws IOException, - JGitInternalException, GitAPIException { + public void testAddUnstagedChanges() throws Exception { File file = new File(db.getWorkTree(), "a.txt"); FileUtils.createNewFile(file); try (PrintWriter writer = new PrintWriter(file, UTF_8.name())) { @@ -260,7 +205,7 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { } @Test - public void testModeChange() throws IOException, GitAPIException { + public void testModeChange() throws Exception { assumeFalse(System.getProperty("os.name").startsWith("Windows"));// SKIP try (Git git = new Git(db)) { // create file @@ -278,7 +223,8 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { FS fs = db.getFS(); fs.setExecute(file, true); git.add().addFilepattern("a.txt").call(); - git.commit().setMessage("mode change").setCommitter(committer).call(); + git.commit().setMessage("mode change").setCommitter(committer) + .call(); // pure mode change should be committable with -o option fs.setExecute(file, false); @@ -289,34 +235,32 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { } @Test - public void testCommitRange() throws GitAPIException, - JGitInternalException, MissingObjectException, - IncorrectObjectTypeException { + public void testCommitRange() throws Exception { // do 4 commits and set the range to the second and fourth one try (Git git = new Git(db)) { git.commit().setMessage("first commit").call(); RevCommit second = git.commit().setMessage("second commit") .setCommitter(committer).call(); git.commit().setMessage("third commit").setAuthor(author).call(); - RevCommit last = git.commit().setMessage("fourth commit").setAuthor( - author) - .setCommitter(committer).call(); - Iterable<RevCommit> commits = git.log().addRange(second.getId(), - last.getId()).call(); + RevCommit last = git.commit().setMessage("fourth commit") + .setAuthor(author).setCommitter(committer).call(); + Iterable<RevCommit> commits = git.log() + .addRange(second.getId(), last.getId()).call(); // check that we have the third and fourth commit PersonIdent defaultCommitter = new PersonIdent(db); - PersonIdent expectedAuthors[] = new PersonIdent[] { author, author }; + PersonIdent expectedAuthors[] = new PersonIdent[] { author, + author }; PersonIdent expectedCommitters[] = new PersonIdent[] { defaultCommitter, committer }; String expectedMessages[] = new String[] { "third commit", "fourth commit" }; int l = expectedAuthors.length - 1; for (RevCommit c : commits) { - assertEquals(expectedAuthors[l].getName(), c.getAuthorIdent() - .getName()); - assertEquals(expectedCommitters[l].getName(), c.getCommitterIdent() - .getName()); + assertEquals(expectedAuthors[l].getName(), + c.getAuthorIdent().getName()); + assertEquals(expectedCommitters[l].getName(), + c.getCommitterIdent().getName()); assertEquals(c.getFullMessage(), expectedMessages[l]); l--; } @@ -325,8 +269,7 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { } @Test - public void testCommitAmend() throws JGitInternalException, IOException, - GitAPIException { + public void testCommitAmend() throws Exception { try (Git git = new Git(db)) { git.commit().setMessage("first comit").call(); // typo git.commit().setAmend(true).setMessage("first commit").call(); @@ -348,15 +291,14 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { } @Test - public void testInsertChangeId() throws JGitInternalException, - GitAPIException { + public void testInsertChangeId() throws Exception { try (Git git = new Git(db)) { String messageHeader = "Some header line\n\nSome detail explanation\n"; String changeIdTemplate = "\nChange-Id: I" + ObjectId.zeroId().getName() + "\n"; String messageFooter = "Some foooter lines\nAnother footer line\n"; - RevCommit commit = git.commit().setMessage( - messageHeader + messageFooter) + RevCommit commit = git.commit() + .setMessage(messageHeader + messageFooter) .setInsertChangeId(true).call(); // we should find a real change id (at the end of the file) byte[] chars = commit.getFullMessage().getBytes(UTF_8); @@ -364,11 +306,12 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { String lastLine = RawParseUtils.decode(chars, lastLineBegin + 1, chars.length); assertTrue(lastLine.contains("Change-Id:")); - assertFalse(lastLine.contains( - "Change-Id: I" + ObjectId.zeroId().getName())); + assertFalse(lastLine + .contains("Change-Id: I" + ObjectId.zeroId().getName())); - commit = git.commit().setMessage( - messageHeader + changeIdTemplate + messageFooter) + commit = git.commit() + .setMessage( + messageHeader + changeIdTemplate + messageFooter) .setInsertChangeId(true).call(); // we should find a real change id (in the line as dictated by the // template) @@ -383,11 +326,12 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { String line = RawParseUtils.decode(chars, lineStart, lineEnd); assertTrue(line.contains("Change-Id:")); - assertFalse(line.contains( - "Change-Id: I" + ObjectId.zeroId().getName())); + assertFalse(line + .contains("Change-Id: I" + ObjectId.zeroId().getName())); - commit = git.commit().setMessage( - messageHeader + changeIdTemplate + messageFooter) + commit = git.commit() + .setMessage( + messageHeader + changeIdTemplate + messageFooter) .setInsertChangeId(false).call(); // we should find the untouched template chars = commit.getFullMessage().getBytes(UTF_8); @@ -400,8 +344,8 @@ public class CommitAndLogCommandTest extends RepositoryTestCase { line = RawParseUtils.decode(chars, lineStart, lineEnd); - assertTrue(commit.getFullMessage().contains( - "Change-Id: I" + ObjectId.zeroId().getName())); + assertTrue(commit.getFullMessage() + .contains("Change-Id: I" + ObjectId.zeroId().getName())); } } } diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LogFilterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LogFilterTest.java new file mode 100644 index 0000000000..988ca58906 --- /dev/null +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LogFilterTest.java @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2019, John Tipper <John_Tipper@hotmail.com> + * and other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Distribution License v1.0 which + * accompanies this distribution, is reproduced below, and is + * available at http://www.eclipse.org/org/documents/edl-v10.php + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Eclipse Foundation, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.eclipse.jgit.api; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; + +import java.io.File; +import java.io.PrintWriter; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Iterator; + +import org.eclipse.jgit.junit.RepositoryTestCase; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.util.FileUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Testing the log command with include and exclude filters + */ +public class LogFilterTest extends RepositoryTestCase { + private Git git; + + @Before + public void setup() throws Exception { + super.setUp(); + git = new Git(db); + + // create first file + File file = new File(db.getWorkTree(), "a.txt"); + FileUtils.createNewFile(file); + try (PrintWriter writer = new PrintWriter(file, UTF_8.name())) { + writer.print("content1"); + } + + // First commit - a.txt file + git.add().addFilepattern("a.txt").call(); + git.commit().setMessage("commit1").setCommitter(committer).call(); + + // create second file + file = new File(db.getWorkTree(), "b.txt"); + FileUtils.createNewFile(file); + try (PrintWriter writer = new PrintWriter(file, UTF_8.name())) { + writer.print("content2"); + } + + // Second commit - b.txt file + git.add().addFilepattern("b.txt").call(); + git.commit().setMessage("commit2").setCommitter(committer).call(); + + // create third file + Path includeSubdir = Paths.get(db.getWorkTree().toString(), + "subdir-include"); + includeSubdir.toFile().mkdirs(); + file = Paths.get(includeSubdir.toString(), "c.txt").toFile(); + FileUtils.createNewFile(file); + try (PrintWriter writer = new PrintWriter(file, UTF_8.name())) { + writer.print("content3"); + } + + // Third commit - c.txt file + git.add().addFilepattern("subdir-include").call(); + git.commit().setMessage("commit3").setCommitter(committer).call(); + + // create fourth file + Path excludeSubdir = Paths.get(db.getWorkTree().toString(), + "subdir-exclude"); + excludeSubdir.toFile().mkdirs(); + file = Paths.get(excludeSubdir.toString(), "d.txt").toFile(); + FileUtils.createNewFile(file); + try (PrintWriter writer = new PrintWriter(file, UTF_8.name())) { + writer.print("content4"); + } + + // Fourth commit - d.txt file + git.add().addFilepattern("subdir-exclude").call(); + git.commit().setMessage("commit4").setCommitter(committer).call(); + } + + @After + @Override + public void tearDown() throws Exception { + git.close(); + super.tearDown(); + } + + @Test + public void testLogWithFilterCanDistinguishFilesByPath() throws Exception { + int count = 0; + for (RevCommit c : git.log().addPath("a.txt").call()) { + assertEquals("commit1", c.getFullMessage()); + count++; + } + assertEquals(1, count); + + count = 0; + for (RevCommit c : git.log().addPath("b.txt").call()) { + assertEquals("commit2", c.getFullMessage()); + count++; + } + assertEquals(1, count); + } + + @Test + public void testLogWithFilterCanIncludeFilesInDirectory() throws Exception { + int count = 0; + for (RevCommit c : git.log().addPath("subdir-include").call()) { + assertEquals("commit3", c.getFullMessage()); + count++; + } + assertEquals(1, count); + } + + @Test + public void testLogWithFilterCanExcludeFilesInDirectory() throws Exception { + int count = 0; + Iterator it = git.log().excludePath("subdir-exclude").call().iterator(); + while (it.hasNext()) { + it.next(); + count++; + } + // of all the commits, we expect to filter out only d.txt + assertEquals(3, count); + } + + @Test + public void testLogWithoutFilter() throws Exception { + int count = 0; + for (RevCommit c : git.log().call()) { + assertEquals(committer, c.getCommitterIdent()); + count++; + } + assertEquals(4, count); + } + + @Test + public void testLogWithFilterCanExcludeAndIncludeFilesInDifferentDirectories() + throws Exception { + int count = 0; + Iterator it = git.log().addPath("subdir-include") + .excludePath("subdir-exclude").call().iterator(); + while (it.hasNext()) { + it.next(); + count++; + } + // we expect to include c.txt + assertEquals(1, count); + } + + @Test + public void testLogWithFilterExcludeAndIncludeSameFileIncludesNothing() + throws Exception { + int count = 0; + Iterator it = git.log().addPath("subdir-exclude") + .excludePath("subdir-exclude").call().iterator(); + + while (it.hasNext()) { + it.next(); + count++; + } + // we expect the exclude to trump everything + assertEquals(0, count); + } + + @Test + public void testLogWithFilterCanExcludeFileAndDirectory() throws Exception { + int count = 0; + Iterator it = git.log().excludePath("b.txt") + .excludePath("subdir-exclude").call().iterator(); + + while (it.hasNext()) { + it.next(); + count++; + } + // we expect a.txt and c.txt + assertEquals(2, count); + } +} diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java index bb68ef185a..cdc64fa1b2 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileReftableTest.java @@ -73,6 +73,7 @@ import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.RefUpdate.Result; import org.eclipse.jgit.lib.ReflogEntry; import org.eclipse.jgit.lib.ReflogReader; +import org.eclipse.jgit.lib.RepositoryCache; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase; import org.eclipse.jgit.transport.ReceiveCommand; @@ -123,6 +124,11 @@ public class FileReftableTest extends SampleDataRepositoryTestCase { } @Test + public void additionalRefsAreRemoved() { + assertFalse(new File(db.getDirectory(), Constants.HEAD).exists()); + } + + @Test public void testCompactFully() throws Exception { ObjectId c1 = db.resolve("master^^"); ObjectId c2 = db.resolve("master^"); @@ -149,6 +155,8 @@ public class FileReftableTest extends SampleDataRepositoryTestCase { assertFalse(b.isSymbolic()); assertTrue(b.isPeeled()); assertEquals(bCommit, b.getObjectId().name()); + + assertTrue(db.getRefDatabase().hasFastTipsWithSha1()); } @Test @@ -163,6 +171,8 @@ public class FileReftableTest extends SampleDataRepositoryTestCase { assertFalse(b.isSymbolic()); assertTrue(b.isPeeled()); assertEquals(bCommit, b.getObjectId().name()); + + assertFalse(db.getRefDatabase().hasFastTipsWithSha1()); } @Test @@ -503,6 +513,11 @@ public class FileReftableTest extends SampleDataRepositoryTestCase { } @Test + public void isGitRepository() { + assertTrue(RepositoryCache.FileKey.isGitRepository(db.getDirectory(), db.getFS())); + } + + @Test public void testRenameDestExists() throws IOException { ObjectId rb = db.resolve("refs/heads/b"); writeSymref(Constants.HEAD, "refs/heads/b"); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java index 45e6c7d128..ec8b7593f0 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java @@ -149,12 +149,13 @@ public class ReftableTest { assertEquals(expBytes, table.length); } - @SuppressWarnings("boxing") @Test public void estimateCurrentBytesWithIndex() throws IOException { List<Ref> refs = new ArrayList<>(); for (int i = 1; i <= 5670; i++) { - refs.add(ref(String.format("refs/heads/%04d", i), i)); + @SuppressWarnings("boxing") + Ref ref = ref(String.format("refs/heads/%04d", i), i); + refs.add(ref); } ReftableConfig cfg = new ReftableConfig(); @@ -177,6 +178,69 @@ public class ReftableTest { } @Test + public void hasObjMapRefs() throws IOException { + ArrayList<Ref> refs = new ArrayList<>(); + refs.add(ref(MASTER, 1)); + byte[] table = write(refs); + ReftableReader t = read(table); + assertTrue(t.hasObjectMap()); + } + + @Test + public void hasObjMapRefsSmallTable() throws IOException { + ArrayList<Ref> refs = new ArrayList<>(); + ReftableConfig cfg = new ReftableConfig(); + cfg.setIndexObjects(false); + refs.add(ref(MASTER, 1)); + byte[] table = write(refs); + ReftableReader t = read(table); + assertTrue(t.hasObjectMap()); + } + + @Test + public void hasObjLogs() throws IOException { + PersonIdent who = new PersonIdent("Log", "Ger", 1500079709, -8 * 60); + String msg = "test"; + ReftableConfig cfg = new ReftableConfig(); + cfg.setIndexObjects(false); + + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + ReftableWriter writer = new ReftableWriter(buffer) + .setMinUpdateIndex(1) + .setConfig(cfg) + .setMaxUpdateIndex(1) + .begin(); + + writer.writeLog("master", 1, who, ObjectId.zeroId(), id(1), msg); + writer.finish(); + byte[] table = buffer.toByteArray(); + + ReftableReader t = read(table); + assertTrue(t.hasObjectMap()); + } + + @Test + public void hasObjMapRefsNoIndexObjects() throws IOException { + ArrayList<Ref> refs = new ArrayList<>(); + ReftableConfig cfg = new ReftableConfig(); + cfg.setIndexObjects(false); + cfg.setRefBlockSize(256); + cfg.setAlignBlocks(true); + + // Fill up 5 blocks. + int N = 256 * 5 / 25; + for (int i= 0; i < N; i++) { + @SuppressWarnings("boxing") + Ref ref = ref(String.format("%02d/xxxxxxxxxx", i), i); + refs.add(ref); + } + byte[] table = write(refs, cfg); + + ReftableReader t = read(table); + assertFalse(t.hasObjectMap()); + } + + @Test public void oneIdRef() throws IOException { Ref exp = ref(MASTER, 1); byte[] table = write(exp); @@ -364,12 +428,13 @@ public class ReftableTest { } } - @SuppressWarnings("boxing") @Test public void indexScan() throws IOException { List<Ref> refs = new ArrayList<>(); for (int i = 1; i <= 5670; i++) { - refs.add(ref(String.format("refs/heads/%04d", i), i)); + @SuppressWarnings("boxing") + Ref ref = ref(String.format("refs/heads/%04d", i), i); + refs.add(ref); } byte[] table = write(refs); @@ -378,12 +443,13 @@ public class ReftableTest { assertScan(refs, read(table)); } - @SuppressWarnings("boxing") @Test public void indexSeek() throws IOException { List<Ref> refs = new ArrayList<>(); for (int i = 1; i <= 5670; i++) { - refs.add(ref(String.format("refs/heads/%04d", i), i)); + @SuppressWarnings("boxing") + Ref ref = ref(String.format("refs/heads/%04d", i), i); + refs.add(ref); } byte[] table = write(refs); @@ -392,12 +458,13 @@ public class ReftableTest { assertSeek(refs, read(table)); } - @SuppressWarnings("boxing") @Test public void noIndexScan() throws IOException { List<Ref> refs = new ArrayList<>(); for (int i = 1; i <= 567; i++) { - refs.add(ref(String.format("refs/heads/%03d", i), i)); + @SuppressWarnings("boxing") + Ref ref = ref(String.format("refs/heads/%03d", i), i); + refs.add(ref); } byte[] table = write(refs); @@ -407,12 +474,13 @@ public class ReftableTest { assertScan(refs, read(table)); } - @SuppressWarnings("boxing") @Test public void noIndexSeek() throws IOException { List<Ref> refs = new ArrayList<>(); for (int i = 1; i <= 567; i++) { - refs.add(ref(String.format("refs/heads/%03d", i), i)); + @SuppressWarnings("boxing") + Ref ref = ref(String.format("refs/heads/%03d", i), i); + refs.add(ref); } byte[] table = write(refs); @@ -585,6 +653,7 @@ public class ReftableTest { // Fill out the 1st ref block. List<String> names = new ArrayList<>(); for (int i = 0; i < 4; i++) { + @SuppressWarnings("boxing") String name = new String(new char[220]).replace("\0", String.format("%c", i + 'a')); names.add(name); writer.writeRef(ref(name, i)); @@ -724,7 +793,6 @@ public class ReftableTest { } } - @SuppressWarnings("boxing") @Test public void logScan() throws IOException { ReftableConfig cfg = new ReftableConfig(); @@ -737,6 +805,7 @@ public class ReftableTest { List<Ref> refs = new ArrayList<>(); for (int i = 1; i <= 5670; i++) { + @SuppressWarnings("boxing") Ref ref = ref(String.format("refs/heads/%04d", i), i); refs.add(ref); writer.writeRef(ref); @@ -769,12 +838,13 @@ public class ReftableTest { } } - @SuppressWarnings("boxing") @Test public void byObjectIdOneRefNoIndex() throws IOException { List<Ref> refs = new ArrayList<>(); for (int i = 1; i <= 200; i++) { - refs.add(ref(String.format("refs/heads/%02d", i), i)); + @SuppressWarnings("boxing") + Ref ref = ref(String.format("refs/heads/%02d", i), i); + refs.add(ref); } refs.add(ref("refs/heads/master", 100)); @@ -802,12 +872,13 @@ public class ReftableTest { } } - @SuppressWarnings("boxing") @Test public void byObjectIdOneRefWithIndex() throws IOException { List<Ref> refs = new ArrayList<>(); for (int i = 1; i <= 5200; i++) { - refs.add(ref(String.format("refs/heads/%02d", i), i)); + @SuppressWarnings("boxing") + Ref ref = ref(String.format("refs/heads/%02d", i), i); + refs.add(ref); } refs.add(ref("refs/heads/master", 100)); @@ -936,8 +1007,13 @@ public class ReftableTest { } private byte[] write(Collection<Ref> refs) throws IOException { + return write(refs, new ReftableConfig()); + } + + private byte[] write(Collection<Ref> refs, ReftableConfig cfg) throws IOException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); stats = new ReftableWriter(buffer) + .setConfig(cfg) .begin() .sortAndWriteRefs(refs) .finish() diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/BitmapCalculatorTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/BitmapCalculatorTest.java deleted file mode 100644 index c5d4d4238d..0000000000 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/BitmapCalculatorTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 2019, Google LLC. - * and other copyright owners as documented in the project's IP log. - * - * This program and the accompanying materials are made available - * under the terms of the Eclipse Distribution License v1.0 which - * accompanies this distribution, is reproduced below, and is - * available at http://www.eclipse.org/org/documents/edl-v10.php - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * - Neither the name of the Eclipse Foundation, Inc. nor the - * names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.eclipse.jgit.revwalk; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.eclipse.jgit.internal.storage.file.FileRepository; -import org.eclipse.jgit.internal.storage.file.GC; -import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase; -import org.eclipse.jgit.junit.TestRepository; -import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder; -import org.eclipse.jgit.lib.NullProgressMonitor; -import org.eclipse.jgit.lib.ProgressMonitor; -import org.junit.Before; -import org.junit.Test; - -public class BitmapCalculatorTest extends LocalDiskRepositoryTestCase { - TestRepository<FileRepository> repo; - - /** {@inheritDoc} */ - @Override - @Before - public void setUp() throws Exception { - super.setUp(); - FileRepository db = createWorkRepository(); - repo = new TestRepository<>(db); - } - - @Test - public void addOnlyCommits() throws Exception { - RevBlob abBlob = repo.blob("a_b_content"); - RevCommit root = repo.commit().add("a/b", abBlob).create(); - repo.update("refs/heads/master", root); - - // GC creates bitmap index with ALL objects - GC gc = new GC(repo.getRepository()); - gc.setAuto(false); - gc.gc(); - - // These objects are not in the bitmap index. - RevBlob acBlob = repo.blob("a_c_content"); - RevCommit head = repo.commit().parent(root).add("a/c", acBlob).create(); - repo.update("refs/heads/master", head); - - BitmapCalculator bitmapWalker = new BitmapCalculator(repo.getRevWalk()); - BitmapBuilder bitmap = bitmapWalker - .getBitmap(head, NullProgressMonitor.INSTANCE); - - assertTrue(bitmap.contains(root.getId())); - assertTrue(bitmap.contains(root.getTree().getId())); - assertTrue(bitmap.contains(abBlob.getId())); - - // BitmapCalculator added only the commit, no other objects. - assertTrue(bitmap.contains(head.getId())); - assertFalse(bitmap.contains(head.getTree().getId())); - assertFalse(bitmap.contains(acBlob.getId())); - } - - @Test - public void walkUntilBitmap() throws Exception { - RevCommit root = repo.commit().create(); - repo.update("refs/heads/master", root); - - // GC creates bitmap index with ALL objects - GC gc = new GC(repo.getRepository()); - gc.setAuto(false); - gc.gc(); - - // These objects are not in the bitmap index. - RevCommit commit1 = repo.commit(root); - RevCommit commit2 = repo.commit(commit1); - repo.update("refs/heads/master", commit2); - - CounterProgressMonitor monitor = new CounterProgressMonitor(); - BitmapCalculator bitmapWalker = new BitmapCalculator(repo.getRevWalk()); - BitmapBuilder bitmap = bitmapWalker.getBitmap(commit2, monitor); - - assertTrue(bitmap.contains(root)); - assertTrue(bitmap.contains(commit1)); - assertTrue(bitmap.contains(commit2)); - assertEquals(2, monitor.getUpdates()); - } - - @Test - public void noNeedToWalk() throws Exception { - RevCommit root = repo.commit().create(); - RevCommit commit1 = repo.commit(root); - RevCommit commit2 = repo.commit(commit1); - repo.update("refs/heads/master", commit2); - - // GC creates bitmap index with ALL objects - GC gc = new GC(repo.getRepository()); - gc.setAuto(false); - gc.gc(); - - CounterProgressMonitor monitor = new CounterProgressMonitor(); - BitmapCalculator bitmapWalker = new BitmapCalculator(repo.getRevWalk()); - BitmapBuilder bitmap = bitmapWalker.getBitmap(commit2, monitor); - - assertTrue(bitmap.contains(root)); - assertTrue(bitmap.contains(commit1)); - assertTrue(bitmap.contains(commit2)); - assertEquals(0, monitor.getUpdates()); - } - - private static class CounterProgressMonitor implements ProgressMonitor { - - private int counter; - - @Override - public void start(int totalTasks) { - // Nothing to do in tests - } - - @Override - public void beginTask(String title, int totalWork) { - // Nothing to to in tests - } - - @Override - public void update(int completed) { - counter += 1; - } - - @Override - public void endTask() { - // Nothing to do in tests - } - - @Override - public boolean isCancelled() { - return false; - } - - int getUpdates() { - return counter; - } - } -}
\ No newline at end of file diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/ReachabilityCheckerTestCase.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/ReachabilityCheckerTestCase.java index dd73e35727..092033449b 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/ReachabilityCheckerTestCase.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/ReachabilityCheckerTestCase.java @@ -47,6 +47,7 @@ import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Optional; +import java.util.stream.Stream; import org.eclipse.jgit.internal.storage.file.FileRepository; import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase; @@ -83,11 +84,11 @@ public abstract class ReachabilityCheckerTestCase ReachabilityChecker checker = getChecker(repo); assertReachable("reachable from one tip", - checker.areAllReachable(Arrays.asList(a), Arrays.asList(c2))); + checker.areAllReachable(Arrays.asList(a), Stream.of(c2))); assertReachable("reachable from another tip", - checker.areAllReachable(Arrays.asList(a), Arrays.asList(b2))); + checker.areAllReachable(Arrays.asList(a), Stream.of(b2))); assertReachable("reachable from itself", - checker.areAllReachable(Arrays.asList(a), Arrays.asList(b2))); + checker.areAllReachable(Arrays.asList(a), Stream.of(b2))); } @Test @@ -104,13 +105,13 @@ public abstract class ReachabilityCheckerTestCase assertReachable("reachable through one branch", checker.areAllReachable(Arrays.asList(b1), - Arrays.asList(merge))); + Stream.of(merge))); assertReachable("reachable through another branch", checker.areAllReachable(Arrays.asList(c1), - Arrays.asList(merge))); + Stream.of(merge))); assertReachable("reachable, before the branching", checker.areAllReachable(Arrays.asList(a), - Arrays.asList(merge))); + Stream.of(merge))); } @Test @@ -123,7 +124,7 @@ public abstract class ReachabilityCheckerTestCase ReachabilityChecker checker = getChecker(repo); assertUnreachable("unreachable from the future", - checker.areAllReachable(Arrays.asList(b2), Arrays.asList(b1))); + checker.areAllReachable(Arrays.asList(b2), Stream.of(b1))); } @Test @@ -137,7 +138,7 @@ public abstract class ReachabilityCheckerTestCase ReachabilityChecker checker = getChecker(repo); assertUnreachable("unreachable from different branch", - checker.areAllReachable(Arrays.asList(c1), Arrays.asList(b2))); + checker.areAllReachable(Arrays.asList(c1), Stream.of(b2))); } @Test @@ -152,7 +153,7 @@ public abstract class ReachabilityCheckerTestCase ReachabilityChecker checker = getChecker(repo); assertReachable("reachable with long chain in the middle", checker - .areAllReachable(Arrays.asList(root), Arrays.asList(head))); + .areAllReachable(Arrays.asList(root), Stream.of(head))); } private static void assertReachable(String msg, @@ -164,5 +165,4 @@ public abstract class ReachabilityCheckerTestCase Optional<RevCommit> result) { assertTrue(msg, result.isPresent()); } - } diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java index 89ac2fe96d..daf7b9fb7a 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java @@ -495,8 +495,7 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas receive(rp, inBuf, outBuf); fail("Expected UnpackException"); } catch (UnpackException failed) { - Throwable err = failed.getCause(); - assertTrue(err instanceof IOException); + // Expected } final PacketLineIn r = asPacketLineIn(outBuf); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackRefSortingForReachabilityTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackRefSortingForReachabilityTest.java new file mode 100644 index 0000000000..0875a33287 --- /dev/null +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackRefSortingForReachabilityTest.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2019, Google LLC. + * and other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Distribution License v1.0 which + * accompanies this distribution, is reproduced below, and is + * available at http://www.eclipse.org/org/documents/edl-v10.php + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Eclipse Foundation, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.eclipse.jgit.transport; + +import static org.hamcrest.Matchers.contains; +import static org.junit.Assert.assertThat; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ObjectIdRef.Unpeeled; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.lib.Ref.Storage; +import org.junit.Test; + +public class UploadPackRefSortingForReachabilityTest { + + @Test + public void sortReferences() { + List<Ref> refs = Stream.of("refs/changes/12/12", "refs/changes/12/1", + "refs/heads/master", "refs/heads/something", + "refs/changes/55/1", "refs/tags/v1.1") + .map(s -> new Unpeeled(Storage.LOOSE, s, ObjectId.zeroId())) + .collect(Collectors.toList()); + Stream<Ref> sorted = UploadPack.importantRefsFirst(refs); + List<String> collected = sorted.map(Ref::getName) + .collect(Collectors.toList()); + assertThat(collected, + contains("refs/heads/master", "refs/heads/something", + "refs/tags/v1.1", "refs/changes/12/12", + "refs/changes/12/1", "refs/changes/55/1")); + } +} diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java index 6d53555e9f..108e5edb78 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java @@ -462,7 +462,9 @@ public class UploadPackTest { assertThat(lines, containsInAnyOrder("ls-refs", "fetch", "server-option")); } - private void checkUnadvertisedIfUnallowed(String fetchCapability) throws Exception { + private void checkUnadvertisedIfUnallowed(String configSection, + String configName, String fetchCapability) throws Exception { + server.getConfig().setBoolean(configSection, null, configName, false); ByteArrayInputStream recvStream = uploadPackV2Setup(null, PacketLineIn.end()); PacketLineIn pckIn = new PacketLineIn(recvStream); @@ -473,9 +475,9 @@ public class UploadPackTest { String line; while (!PacketLineIn.isEnd((line = pckIn.readString()))) { if (line.startsWith("fetch=")) { - assertThat( - Arrays.asList(line.substring(6).split(" ")), - hasItems("shallow")); + List<String> fetchItems = Arrays.asList(line.substring(6).split(" ")); + assertThat(fetchItems, hasItems("shallow")); + assertFalse(fetchItems.contains(fetchCapability)); lines.add("fetch"); } else { lines.add(line); @@ -487,7 +489,7 @@ public class UploadPackTest { @Test public void testV2CapabilitiesAllowFilter() throws Exception { checkAdvertisedIfAllowed("uploadpack", "allowfilter", "filter"); - checkUnadvertisedIfUnallowed("filter"); + checkUnadvertisedIfUnallowed("uploadpack", "allowfilter", "filter"); } @Test @@ -497,7 +499,8 @@ public class UploadPackTest { @Test public void testV2CapabilitiesRefInWantNotAdvertisedIfUnallowed() throws Exception { - checkUnadvertisedIfUnallowed("ref-in-want"); + checkUnadvertisedIfUnallowed("uploadpack", "allowrefinwant", + "ref-in-want"); } @Test @@ -506,7 +509,8 @@ public class UploadPackTest { true); checkAdvertisedIfAllowed("uploadpack", "advertisesidebandall", "sideband-all"); - checkUnadvertisedIfUnallowed("sideband-all"); + checkUnadvertisedIfUnallowed("uploadpack", "advertisesidebandall", + "sideband-all"); } @Test diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FSTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FSTest.java index 89a2fc44c7..c9a339352b 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FSTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FSTest.java @@ -254,7 +254,9 @@ public class FSTest { formatter.format(t1.toInstant()), Long.valueOf(resolutionNs)), t2.compareTo(t1) > 0); } finally { - Files.delete(f); + if (f != null) { + Files.delete(f); + } } } } diff --git a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF index 38f63f99b6..d382c9ab00 100644 --- a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF @@ -4,14 +4,14 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ui Bundle-SymbolicName: org.eclipse.jgit.ui -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Export-Package: org.eclipse.jgit.awtui;version="5.6.0" -Import-Package: org.eclipse.jgit.errors;version="[5.6.0,5.7.0)", - org.eclipse.jgit.lib;version="[5.6.0,5.7.0)", - org.eclipse.jgit.nls;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revplot;version="[5.6.0,5.7.0)", - org.eclipse.jgit.revwalk;version="[5.6.0,5.7.0)", - org.eclipse.jgit.transport;version="[5.6.0,5.7.0)", - org.eclipse.jgit.util;version="[5.6.0,5.7.0)" +Export-Package: org.eclipse.jgit.awtui;version="5.7.0" +Import-Package: org.eclipse.jgit.errors;version="[5.7.0,5.8.0)", + org.eclipse.jgit.lib;version="[5.7.0,5.8.0)", + org.eclipse.jgit.nls;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revplot;version="[5.7.0,5.8.0)", + org.eclipse.jgit.revwalk;version="[5.7.0,5.8.0)", + org.eclipse.jgit.transport;version="[5.7.0,5.8.0)", + org.eclipse.jgit.util;version="[5.7.0,5.8.0)" diff --git a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF index c19a634419..782f24d898 100644 --- a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit.ui - Sources Bundle-SymbolicName: org.eclipse.jgit.ui.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.ui;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.ui;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit.ui/pom.xml b/org.eclipse.jgit.ui/pom.xml index 7d6c77d491..c4687aa55f 100644 --- a/org.eclipse.jgit.ui/pom.xml +++ b/org.eclipse.jgit.ui/pom.xml @@ -52,7 +52,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ui</artifactId> diff --git a/org.eclipse.jgit/.settings/.api_filters b/org.eclipse.jgit/.settings/.api_filters index 69d7183891..b7f6db0274 100644 --- a/org.eclipse.jgit/.settings/.api_filters +++ b/org.eclipse.jgit/.settings/.api_filters @@ -1,125 +1,19 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <component id="org.eclipse.jgit" version="2"> - <resource path="META-INF/MANIFEST.MF" type="org.eclipse.jgit.transport.BaseReceivePack"> - <filter comment="Merged BaseReceivePack into ReceivePack, replace BaseReceivePack with ReceivePack" id="305324134"> + <resource path="src/org/eclipse/jgit/lib/RefDatabase.java" type="org.eclipse.jgit.lib.RefDatabase"> + <filter id="1141899266"> <message_arguments> - <message_argument value="org.eclipse.jgit.transport.BaseReceivePack"/> - <message_argument value="org.eclipse.jgit_5.6.0"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/lib/Config.java" type="org.eclipse.jgit.lib.Config"> - <filter id="1142947843"> - <message_arguments> - <message_argument value="5.5.2"/> - <message_argument value="getBaseConfig()"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/lib/Constants.java" type="org.eclipse.jgit.lib.Constants"> - <filter id="1142947843"> - <message_arguments> - <message_argument value="5.5.2"/> - <message_argument value="XDG_CONFIG_HOME"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/storage/pack/PackStatistics.java" type="org.eclipse.jgit.storage.pack.PackStatistics$Accumulator"> - <filter id="336658481"> - <message_arguments> - <message_argument value="org.eclipse.jgit.storage.pack.PackStatistics.Accumulator"/> - <message_argument value="offloadedPackfileSize"/> - </message_arguments> - </filter> - <filter id="336658481"> - <message_arguments> - <message_argument value="org.eclipse.jgit.storage.pack.PackStatistics.Accumulator"/> - <message_argument value="offloadedPackfiles"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/transport/AbstractAdvertiseRefsHook.java" type="org.eclipse.jgit.transport.AbstractAdvertiseRefsHook"> - <filter comment="Merged BaseReceivePack into ReceivePack, replace BaseReceivePack with ReceivePack" id="338792546"> - <message_arguments> - <message_argument value="org.eclipse.jgit.transport.AbstractAdvertiseRefsHook"/> - <message_argument value="advertiseRefs(BaseReceivePack)"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/transport/AdvertiseRefsHook.java" type="org.eclipse.jgit.transport.AdvertiseRefsHook"> - <filter comment="Merged BaseReceivePack into ReceivePack, replace BaseReceivePack with ReceivePack" id="403804204"> - <message_arguments> - <message_argument value="org.eclipse.jgit.transport.AdvertiseRefsHook"/> - <message_argument value="advertiseRefs(ReceivePack)"/> - </message_arguments> - </filter> - <filter comment="Merged BaseReceivePack into ReceivePack, replace BaseReceivePack with ReceivePack" id="405901410"> - <message_arguments> - <message_argument value="org.eclipse.jgit.transport.AdvertiseRefsHook"/> - <message_argument value="advertiseRefs(BaseReceivePack)"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/transport/AdvertiseRefsHookChain.java" type="org.eclipse.jgit.transport.AdvertiseRefsHookChain"> - <filter comment="Merged BaseReceivePack into ReceivePack, replace BaseReceivePack with ReceivePack" id="338792546"> - <message_arguments> - <message_argument value="org.eclipse.jgit.transport.AdvertiseRefsHookChain"/> - <message_argument value="advertiseRefs(BaseReceivePack)"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/transport/ReceiveCommand.java" type="org.eclipse.jgit.transport.ReceiveCommand"> - <filter comment="Merged BaseReceivePack into ReceivePack, replace BaseReceivePack with ReceivePack" id="338792546"> - <message_arguments> - <message_argument value="org.eclipse.jgit.transport.ReceiveCommand"/> - <message_argument value="execute(BaseReceivePack)"/> + <message_argument value="5.6"/> + <message_argument value="5.7"/> + <message_argument value="hasFastTipsWithSha1()"/> </message_arguments> </filter> </resource> <resource path="src/org/eclipse/jgit/transport/ReceivePack.java" type="org.eclipse.jgit.transport.ReceivePack"> - <filter comment="Merged BaseReceivePack into ReceivePack, replace BaseReceivePack with ReceivePack" id="338792546"> - <message_arguments> - <message_argument value="org.eclipse.jgit.transport.ReceivePack"/> - <message_argument value="getLockMessageProcessName()"/> - </message_arguments> - </filter> - <filter comment="Merged BaseReceivePack into ReceivePack, replace BaseReceivePack with ReceivePack" id="338849923"> - <message_arguments> - <message_argument value="org.eclipse.jgit.transport.ReceivePack"/> - </message_arguments> - </filter> - <filter id="421572723"> - <message_arguments> - <message_argument value="org.eclipse.jgit.transport.ReceivePack"/> - <message_argument value="enableCapabilities()"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/util/QuotedString.java" type="org.eclipse.jgit.util.QuotedString"> <filter id="336658481"> <message_arguments> - <message_argument value="org.eclipse.jgit.util.QuotedString"/> - <message_argument value="GIT_PATH_MINIMAL"/> - </message_arguments> - </filter> - </resource> - <resource path="src/org/eclipse/jgit/util/SystemReader.java" type="org.eclipse.jgit.util.SystemReader"> - <filter id="336695337"> - <message_arguments> - <message_argument value="org.eclipse.jgit.util.SystemReader"/> - <message_argument value="openJGitConfig(Config, FS)"/> - </message_arguments> - </filter> - <filter id="1142947843"> - <message_arguments> - <message_argument value="5.5.2"/> - <message_argument value="getJGitConfig()"/> - </message_arguments> - </filter> - <filter id="1142947843"> - <message_arguments> - <message_argument value="5.5.2"/> - <message_argument value="openJGitConfig(Config, FS)"/> + <message_argument value="org.eclipse.jgit.transport.ReceivePack"/> + <message_argument value="connectivityChecker"/> </message_arguments> </filter> </resource> diff --git a/org.eclipse.jgit/META-INF/MANIFEST.MF b/org.eclipse.jgit/META-INF/MANIFEST.MF index ab0f1a2c09..1fd25780d5 100644 --- a/org.eclipse.jgit/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit/META-INF/MANIFEST.MF @@ -3,12 +3,12 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit Bundle-SymbolicName: org.eclipse.jgit -Bundle-Version: 5.6.0.qualifier +Bundle-Version: 5.7.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy -Export-Package: org.eclipse.jgit.annotations;version="5.6.0", - org.eclipse.jgit.api;version="5.6.0"; +Export-Package: org.eclipse.jgit.annotations;version="5.7.0", + org.eclipse.jgit.api;version="5.7.0"; uses:="org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.diff, @@ -22,53 +22,53 @@ Export-Package: org.eclipse.jgit.annotations;version="5.6.0", org.eclipse.jgit.submodule, org.eclipse.jgit.transport, org.eclipse.jgit.merge", - org.eclipse.jgit.api.errors;version="5.6.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.errors", - org.eclipse.jgit.attributes;version="5.6.0", - org.eclipse.jgit.blame;version="5.6.0"; + org.eclipse.jgit.api.errors;version="5.7.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.errors", + org.eclipse.jgit.attributes;version="5.7.0", + org.eclipse.jgit.blame;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.diff", - org.eclipse.jgit.diff;version="5.6.0"; + org.eclipse.jgit.diff;version="5.7.0"; uses:="org.eclipse.jgit.patch, org.eclipse.jgit.lib, org.eclipse.jgit.treewalk, org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.util", - org.eclipse.jgit.dircache;version="5.6.0"; + org.eclipse.jgit.dircache;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.treewalk, org.eclipse.jgit.util, org.eclipse.jgit.events, org.eclipse.jgit.attributes", - org.eclipse.jgit.errors;version="5.6.0"; + org.eclipse.jgit.errors;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.internal.storage.pack, org.eclipse.jgit.transport, org.eclipse.jgit.dircache", - org.eclipse.jgit.events;version="5.6.0";uses:="org.eclipse.jgit.lib", - org.eclipse.jgit.fnmatch;version="5.6.0", - org.eclipse.jgit.gitrepo;version="5.6.0"; + org.eclipse.jgit.events;version="5.7.0";uses:="org.eclipse.jgit.lib", + org.eclipse.jgit.fnmatch;version="5.7.0", + org.eclipse.jgit.gitrepo;version="5.7.0"; uses:="org.eclipse.jgit.api, org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, org.xml.sax.helpers, org.xml.sax", - org.eclipse.jgit.gitrepo.internal;version="5.6.0";x-internal:=true, - org.eclipse.jgit.hooks;version="5.6.0";uses:="org.eclipse.jgit.lib", - org.eclipse.jgit.ignore;version="5.6.0", - org.eclipse.jgit.ignore.internal;version="5.6.0";x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.internal;version="5.6.0";x-friends:="org.eclipse.jgit.test,org.eclipse.jgit.http.test", - org.eclipse.jgit.internal.fsck;version="5.6.0";x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.internal.ketch;version="5.6.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.revwalk;version="5.6.0";x-internal:=true, - org.eclipse.jgit.internal.storage.dfs;version="5.6.0"; + org.eclipse.jgit.gitrepo.internal;version="5.7.0";x-internal:=true, + org.eclipse.jgit.hooks;version="5.7.0";uses:="org.eclipse.jgit.lib", + org.eclipse.jgit.ignore;version="5.7.0", + org.eclipse.jgit.ignore.internal;version="5.7.0";x-friends:="org.eclipse.jgit.test", + org.eclipse.jgit.internal;version="5.7.0";x-friends:="org.eclipse.jgit.test,org.eclipse.jgit.http.test", + org.eclipse.jgit.internal.fsck;version="5.7.0";x-friends:="org.eclipse.jgit.test", + org.eclipse.jgit.internal.ketch;version="5.7.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", + org.eclipse.jgit.internal.revwalk;version="5.7.0";x-internal:=true, + org.eclipse.jgit.internal.storage.dfs;version="5.7.0"; x-friends:="org.eclipse.jgit.test, org.eclipse.jgit.http.server, org.eclipse.jgit.http.test, org.eclipse.jgit.lfs.test", - org.eclipse.jgit.internal.storage.file;version="5.6.0"; + org.eclipse.jgit.internal.storage.file;version="5.7.0"; x-friends:="org.eclipse.jgit.test, org.eclipse.jgit.junit, org.eclipse.jgit.junit.http, @@ -77,19 +77,19 @@ Export-Package: org.eclipse.jgit.annotations;version="5.6.0", org.eclipse.jgit.pgm, org.eclipse.jgit.pgm.test, org.eclipse.jgit.ssh.apache", - org.eclipse.jgit.internal.storage.io;version="5.6.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.storage.pack;version="5.6.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.storage.reftable;version="5.6.0"; + org.eclipse.jgit.internal.storage.io;version="5.7.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", + org.eclipse.jgit.internal.storage.pack;version="5.7.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", + org.eclipse.jgit.internal.storage.reftable;version="5.7.0"; x-friends:="org.eclipse.jgit.http.test, org.eclipse.jgit.junit, org.eclipse.jgit.test, org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.storage.reftree;version="5.6.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.submodule;version="5.6.0";x-internal:=true, - org.eclipse.jgit.internal.transport.http;version="5.6.0";x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.internal.transport.parser;version="5.6.0";x-friends:="org.eclipse.jgit.http.server,org.eclipse.jgit.test", - org.eclipse.jgit.internal.transport.ssh;version="5.6.0";x-friends:="org.eclipse.jgit.ssh.apache", - org.eclipse.jgit.lib;version="5.6.0"; + org.eclipse.jgit.internal.storage.reftree;version="5.7.0";x-friends:="org.eclipse.jgit.junit,org.eclipse.jgit.test,org.eclipse.jgit.pgm", + org.eclipse.jgit.internal.submodule;version="5.7.0";x-internal:=true, + org.eclipse.jgit.internal.transport.http;version="5.7.0";x-friends:="org.eclipse.jgit.test", + org.eclipse.jgit.internal.transport.parser;version="5.7.0";x-friends:="org.eclipse.jgit.http.server,org.eclipse.jgit.test", + org.eclipse.jgit.internal.transport.ssh;version="5.7.0";x-friends:="org.eclipse.jgit.ssh.apache", + org.eclipse.jgit.lib;version="5.7.0"; uses:="org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.util, @@ -99,33 +99,33 @@ Export-Package: org.eclipse.jgit.annotations;version="5.6.0", org.eclipse.jgit.treewalk, org.eclipse.jgit.transport, org.eclipse.jgit.submodule", - org.eclipse.jgit.lib.internal;version="5.6.0";x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.merge;version="5.6.0"; + org.eclipse.jgit.lib.internal;version="5.7.0";x-friends:="org.eclipse.jgit.test", + org.eclipse.jgit.merge;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.treewalk, org.eclipse.jgit.revwalk, org.eclipse.jgit.diff, org.eclipse.jgit.dircache, org.eclipse.jgit.api", - org.eclipse.jgit.nls;version="5.6.0", - org.eclipse.jgit.notes;version="5.6.0"; + org.eclipse.jgit.nls;version="5.7.0", + org.eclipse.jgit.notes;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.treewalk, org.eclipse.jgit.revwalk, org.eclipse.jgit.merge", - org.eclipse.jgit.patch;version="5.6.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.diff", - org.eclipse.jgit.revplot;version="5.6.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.revwalk", - org.eclipse.jgit.revwalk;version="5.6.0"; + org.eclipse.jgit.patch;version="5.7.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.diff", + org.eclipse.jgit.revplot;version="5.7.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.revwalk", + org.eclipse.jgit.revwalk;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.treewalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.diff, org.eclipse.jgit.revwalk.filter", - org.eclipse.jgit.revwalk.filter;version="5.6.0";uses:="org.eclipse.jgit.revwalk,org.eclipse.jgit.lib,org.eclipse.jgit.util", - org.eclipse.jgit.storage.file;version="5.6.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.util", - org.eclipse.jgit.storage.pack;version="5.6.0";uses:="org.eclipse.jgit.lib", - org.eclipse.jgit.submodule;version="5.6.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.treewalk.filter,org.eclipse.jgit.treewalk", - org.eclipse.jgit.transport;version="5.6.0"; + org.eclipse.jgit.revwalk.filter;version="5.7.0";uses:="org.eclipse.jgit.revwalk,org.eclipse.jgit.lib,org.eclipse.jgit.util", + org.eclipse.jgit.storage.file;version="5.7.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.util", + org.eclipse.jgit.storage.pack;version="5.7.0";uses:="org.eclipse.jgit.lib", + org.eclipse.jgit.submodule;version="5.7.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.treewalk.filter,org.eclipse.jgit.treewalk", + org.eclipse.jgit.transport;version="5.7.0"; uses:="org.eclipse.jgit.transport.resolver, org.eclipse.jgit.revwalk, org.eclipse.jgit.internal.storage.pack, @@ -138,24 +138,24 @@ Export-Package: org.eclipse.jgit.annotations;version="5.6.0", org.eclipse.jgit.transport.http, org.eclipse.jgit.errors, org.eclipse.jgit.storage.pack", - org.eclipse.jgit.transport.http;version="5.6.0";uses:="javax.net.ssl", - org.eclipse.jgit.transport.resolver;version="5.6.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.transport", - org.eclipse.jgit.treewalk;version="5.6.0"; + org.eclipse.jgit.transport.http;version="5.7.0";uses:="javax.net.ssl", + org.eclipse.jgit.transport.resolver;version="5.7.0";uses:="org.eclipse.jgit.lib,org.eclipse.jgit.transport", + org.eclipse.jgit.treewalk;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, org.eclipse.jgit.attributes, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.util, org.eclipse.jgit.dircache", - org.eclipse.jgit.treewalk.filter;version="5.6.0";uses:="org.eclipse.jgit.treewalk", - org.eclipse.jgit.util;version="5.6.0"; + org.eclipse.jgit.treewalk.filter;version="5.7.0";uses:="org.eclipse.jgit.treewalk", + org.eclipse.jgit.util;version="5.7.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.transport.http, org.eclipse.jgit.storage.file, org.ietf.jgss", - org.eclipse.jgit.util.io;version="5.6.0", - org.eclipse.jgit.util.sha1;version="5.6.0", - org.eclipse.jgit.util.time;version="5.6.0" + org.eclipse.jgit.util.io;version="5.7.0", + org.eclipse.jgit.util.sha1;version="5.7.0", + org.eclipse.jgit.util.time;version="5.7.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)", com.jcraft.jsch;version="[0.1.37,0.2.0)", @@ -172,6 +172,7 @@ Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)", org.bouncycastle.openpgp.operator;version="[1.61.0,2.0.0)", org.bouncycastle.openpgp.operator.jcajce;version="[1.61.0,2.0.0)", org.bouncycastle.util.encoders;version="[1.61.0,2.0.0)", + org.bouncycastle.util.io;version="[1.61.0,2.0.0)", org.slf4j;version="[1.7.0,2.0.0)", org.xml.sax, org.xml.sax.helpers diff --git a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF index 01c9aa0564..a926b8fd82 100644 --- a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF @@ -3,5 +3,5 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.jgit - Sources Bundle-SymbolicName: org.eclipse.jgit.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 5.6.0.qualifier -Eclipse-SourceBundle: org.eclipse.jgit;version="5.6.0.qualifier";roots="." +Bundle-Version: 5.7.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit;version="5.7.0.qualifier";roots="." diff --git a/org.eclipse.jgit/pom.xml b/org.eclipse.jgit/pom.xml index 6b8cdaab1a..3b37cee59c 100644 --- a/org.eclipse.jgit/pom.xml +++ b/org.eclipse.jgit/pom.xml @@ -53,7 +53,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit</artifactId> diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties index 882b766f4f..27d3e6aaa3 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties @@ -457,6 +457,7 @@ nonBareLinkFilesNotSupported=Link files are not supported with nonbare repos nonCommitToHeads=Cannot point a branch to a non-commit object noPathAttributesFound=No Attributes found for {0}. noSuchRef=no such ref +noSuchRefKnown=no such ref: {0} noSuchSubmodule=no such submodule {0} notABoolean=Not a boolean: {0} notABundle=not a bundle diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/BlameCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/BlameCommand.java index 0c765b01cb..a69aa70c6e 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/BlameCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/BlameCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011, GitHub Inc. + * Copyright (C) 2011, 2019 GitHub Inc. * and other copyright owners as documented in the project's IP log. * * This program and the accompanying materials are made available @@ -42,11 +42,7 @@ */ package org.eclipse.jgit.api; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -56,17 +52,10 @@ import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.blame.BlameGenerator; import org.eclipse.jgit.blame.BlameResult; import org.eclipse.jgit.diff.DiffAlgorithm; -import org.eclipse.jgit.diff.RawText; import org.eclipse.jgit.diff.RawTextComparator; -import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.lib.AnyObjectId; -import org.eclipse.jgit.lib.Constants; -import org.eclipse.jgit.lib.CoreConfig.AutoCRLF; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.treewalk.WorkingTreeOptions; -import org.eclipse.jgit.util.IO; -import org.eclipse.jgit.util.io.AutoLFInputStream; /** * Blame command for building a {@link org.eclipse.jgit.blame.BlameResult} for a @@ -221,68 +210,11 @@ public class BlameCommand extends GitCommand<BlameResult> { else if (startCommit != null) gen.push(null, startCommit); else { - gen.push(null, repo.resolve(Constants.HEAD)); - if (!repo.isBare()) { - DirCache dc = repo.readDirCache(); - int entry = dc.findEntry(path); - if (0 <= entry) - gen.push(null, dc.getEntry(entry).getObjectId()); - - File inTree = new File(repo.getWorkTree(), path); - if (repo.getFS().isFile(inTree)) { - RawText rawText = getRawText(inTree); - gen.push(null, rawText); - } - } + gen.prepareHead(); } return gen.computeBlameResult(); } catch (IOException e) { throw new JGitInternalException(e.getMessage(), e); } } - - private RawText getRawText(File inTree) throws IOException, - FileNotFoundException { - RawText rawText; - - WorkingTreeOptions workingTreeOptions = getRepository().getConfig() - .get(WorkingTreeOptions.KEY); - AutoCRLF autoCRLF = workingTreeOptions.getAutoCRLF(); - switch (autoCRLF) { - case FALSE: - case INPUT: - // Git used the repo format on checkout, but other tools - // may change the format to CRLF. We ignore that here. - rawText = new RawText(inTree); - break; - case TRUE: - try (AutoLFInputStream in = new AutoLFInputStream( - new FileInputStream(inTree), true)) { - // Canonicalization should lead to same or shorter length - // (CRLF to LF), so the file size on disk is an upper size bound - rawText = new RawText(toByteArray(in, (int) inTree.length())); - } - break; - default: - throw new IllegalArgumentException( - "Unknown autocrlf option " + autoCRLF); //$NON-NLS-1$ - } - return rawText; - } - - private static byte[] toByteArray(InputStream source, int upperSizeLimit) - throws IOException { - byte[] buffer = new byte[upperSizeLimit]; - try { - int read = IO.readFully(source, buffer, 0); - if (read == upperSizeLimit) { - return buffer; - } - byte[] copy = new byte[read]; - System.arraycopy(buffer, 0, copy, 0, read); - return copy; - } finally { - source.close(); - } - } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java index b55987ead4..915b9860bb 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java @@ -143,6 +143,8 @@ public class CommitCommand extends GitCommand<RevCommit> { private HashMap<String, PrintStream> hookOutRedirect = new HashMap<>(3); + private HashMap<String, PrintStream> hookErrRedirect = new HashMap<>(3); + private Boolean allowEmpty; private Boolean signCommit; @@ -188,7 +190,8 @@ public class CommitCommand extends GitCommand<RevCommit> { state.name())); if (!noVerify) { - Hooks.preCommit(repo, hookOutRedirect.get(PreCommitHook.NAME)) + Hooks.preCommit(repo, hookOutRedirect.get(PreCommitHook.NAME), + hookErrRedirect.get(PreCommitHook.NAME)) .call(); } @@ -230,7 +233,8 @@ public class CommitCommand extends GitCommand<RevCommit> { if (!noVerify) { message = Hooks .commitMsg(repo, - hookOutRedirect.get(CommitMsgHook.NAME)) + hookOutRedirect.get(CommitMsgHook.NAME), + hookErrRedirect.get(CommitMsgHook.NAME)) .setCommitMessage(message).call(); } @@ -311,7 +315,8 @@ public class CommitCommand extends GitCommand<RevCommit> { repo.writeRevertHead(null); } Hooks.postCommit(repo, - hookOutRedirect.get(PostCommitHook.NAME)).call(); + hookOutRedirect.get(PostCommitHook.NAME), + hookErrRedirect.get(PostCommitHook.NAME)).call(); return revCommit; } @@ -891,6 +896,23 @@ public class CommitCommand extends GitCommand<RevCommit> { } /** + * Set the error stream for all hook scripts executed by this command + * (pre-commit, commit-msg, post-commit). If not set it defaults to + * {@code System.err}. + * + * @param hookStdErr + * the error stream for hook scripts executed by this command + * @return {@code this} + * @since 5.6 + */ + public CommitCommand setHookErrorStream(PrintStream hookStdErr) { + setHookErrorStream(PreCommitHook.NAME, hookStdErr); + setHookErrorStream(CommitMsgHook.NAME, hookStdErr); + setHookErrorStream(PostCommitHook.NAME, hookStdErr); + return this; + } + + /** * Set the output stream for a selected hook script executed by this command * (pre-commit, commit-msg, post-commit). If not set it defaults to * {@code System.out}. @@ -916,6 +938,30 @@ public class CommitCommand extends GitCommand<RevCommit> { } /** + * Set the error stream for a selected hook script executed by this command + * (pre-commit, commit-msg, post-commit). If not set it defaults to + * {@code System.err}. + * + * @param hookName + * name of the hook to set the output stream for + * @param hookStdErr + * the output stream to use for the selected hook + * @return {@code this} + * @since 5.6 + */ + public CommitCommand setHookErrorStream(String hookName, + PrintStream hookStdErr) { + if (!(PreCommitHook.NAME.equals(hookName) + || CommitMsgHook.NAME.equals(hookName) + || PostCommitHook.NAME.equals(hookName))) { + throw new IllegalArgumentException(MessageFormat + .format(JGitText.get().illegalHookName, hookName)); + } + hookErrRedirect.put(hookName, hookStdErr); + return this; + } + + /** * Sets the signing key * <p> * Per spec of user.signingKey: this will be sent to the GPG program as is, diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java index 66de8ae131..5ea6015afa 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java @@ -64,10 +64,7 @@ import org.eclipse.jgit.revwalk.filter.AndRevFilter; import org.eclipse.jgit.revwalk.filter.MaxCountRevFilter; import org.eclipse.jgit.revwalk.filter.RevFilter; import org.eclipse.jgit.revwalk.filter.SkipRevFilter; -import org.eclipse.jgit.treewalk.filter.AndTreeFilter; -import org.eclipse.jgit.treewalk.filter.PathFilter; -import org.eclipse.jgit.treewalk.filter.PathFilterGroup; -import org.eclipse.jgit.treewalk.filter.TreeFilter; +import org.eclipse.jgit.treewalk.filter.*; /** * A class used to execute a {@code Log} command. It has setters for all @@ -105,6 +102,7 @@ public class LogCommand extends GitCommand<Iterable<RevCommit>> { private RevFilter revFilter; private final List<PathFilter> pathFilters = new ArrayList<>(); + private final List<TreeFilter> excludeTreeFilters = new ArrayList<>(); private int maxCount = -1; @@ -133,9 +131,22 @@ public class LogCommand extends GitCommand<Iterable<RevCommit>> { @Override public Iterable<RevCommit> call() throws GitAPIException, NoHeadException { checkCallable(); - if (!pathFilters.isEmpty()) - walk.setTreeFilter(AndTreeFilter.create( - PathFilterGroup.create(pathFilters), TreeFilter.ANY_DIFF)); + List<TreeFilter> filters = new ArrayList<>(); + if (!pathFilters.isEmpty()) { + filters.add(AndTreeFilter.create(PathFilterGroup.create(pathFilters), TreeFilter.ANY_DIFF)); + } + if (!excludeTreeFilters.isEmpty()) { + for (TreeFilter f : excludeTreeFilters) { + filters.add(AndTreeFilter.create(f, TreeFilter.ANY_DIFF)); + } + } + if (!filters.isEmpty()) { + if (filters.size() == 1) { + filters.add(TreeFilter.ANY_DIFF); + } + walk.setTreeFilter(AndTreeFilter.create(filters)); + + } if (skip > -1 && maxCount > -1) walk.setRevFilter(AndRevFilter.create(SkipRevFilter.create(skip), MaxCountRevFilter.create(maxCount))); @@ -310,6 +321,24 @@ public class LogCommand extends GitCommand<Iterable<RevCommit>> { } /** + * Show all commits that are not within any of the specified paths. The path + * must either name a file or a directory exactly and use <code>/</code> + * (slash) as separator. Note that regular expressions or wildcards are not + * yet supported. If a path is both added and excluded from the search, then + * the exclusion wins. + * + * @param path + * a repository-relative path (with <code>/</code> as separator) + * @return {@code this} + * @since 5.6 + */ + public LogCommand excludePath(String path) { + checkCallable(); + excludeTreeFilters.add(PathFilter.create(path).negate()); + return this; + } + + /** * Skip the number of commits before starting to show the commit output. * * @param skip diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/errors/AbortedByHookException.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/errors/AbortedByHookException.java index db6440b55f..30a2d622a7 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/errors/AbortedByHookException.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/errors/AbortedByHookException.java @@ -67,19 +67,26 @@ public class AbortedByHookException extends GitAPIException { private final int returnCode; /** + * The stderr output of the hook. + */ + private final String hookStdErr; + + /** * Constructor for AbortedByHookException * - * @param message - * The error details. + * @param hookStdErr + * The error details from the stderr output of the hook * @param hookName * The name of the hook that interrupted the command, must not be * null. * @param returnCode * The return code of the hook process that has been run. */ - public AbortedByHookException(String message, String hookName, + public AbortedByHookException(String hookStdErr, String hookName, int returnCode) { - super(message); + super(MessageFormat.format(JGitText.get().commandRejectedByHook, + hookName, hookStdErr)); + this.hookStdErr = hookStdErr; this.hookName = hookName; this.returnCode = returnCode; } @@ -102,10 +109,13 @@ public class AbortedByHookException extends GitAPIException { return returnCode; } - /** {@inheritDoc} */ - @Override - public String getMessage() { - return MessageFormat.format(JGitText.get().commandRejectedByHook, - hookName, super.getMessage()); + /** + * Get the stderr output of the hook. + * + * @return A string containing the complete stderr output of the hook. + * @since 5.6 + */ + public String getHookStdErr() { + return hookStdErr; } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java b/org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java index 9cec645679..d0aa292df4 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011, Google Inc. + * Copyright (C) 2011, 2019 Google Inc. * and other copyright owners as documented in the project's IP log. * * This program and the accompanying materials are made available @@ -48,11 +48,17 @@ import static org.eclipse.jgit.lib.FileMode.TYPE_FILE; import static org.eclipse.jgit.lib.FileMode.TYPE_MASK; import java.io.IOException; +import java.io.InputStream; +import java.text.MessageFormat; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.List; import org.eclipse.jgit.annotations.Nullable; +import org.eclipse.jgit.api.errors.NoHeadException; import org.eclipse.jgit.blame.Candidate.BlobCandidate; +import org.eclipse.jgit.blame.Candidate.HeadCandidate; import org.eclipse.jgit.blame.Candidate.ReverseCandidate; import org.eclipse.jgit.blame.ReverseWalk.ReverseCommit; import org.eclipse.jgit.diff.DiffAlgorithm; @@ -63,8 +69,13 @@ import org.eclipse.jgit.diff.HistogramDiff; import org.eclipse.jgit.diff.RawText; import org.eclipse.jgit.diff.RawTextComparator; import org.eclipse.jgit.diff.RenameDetector; +import org.eclipse.jgit.dircache.DirCache; +import org.eclipse.jgit.dircache.DirCacheEntry; +import org.eclipse.jgit.dircache.DirCacheIterator; +import org.eclipse.jgit.errors.NoWorkTreeException; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.MutableObjectId; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectLoader; @@ -74,9 +85,12 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevWalk; +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.PathFilter; import org.eclipse.jgit.treewalk.filter.TreeFilter; +import org.eclipse.jgit.util.IO; /** * Generate author information for lines based on a provided file. @@ -313,6 +327,107 @@ public class BlameGenerator implements AutoCloseable { } /** + * Pushes HEAD, index, and working tree as appropriate for blaming the file + * given in the constructor {@link #BlameGenerator(Repository, String)} + * against HEAD. Includes special handling in case the file is in conflict + * state from an unresolved merge conflict. + * + * @return {@code this} + * @throws NoHeadException + * if the repository has no HEAD + * @throws IOException + * if an error occurs + * @since 5.6 + */ + public BlameGenerator prepareHead() throws NoHeadException, IOException { + Repository repo = getRepository(); + ObjectId head = repo.resolve(Constants.HEAD); + if (head == null) { + throw new NoHeadException(MessageFormat + .format(JGitText.get().noSuchRefKnown, Constants.HEAD)); + } + if (repo.isBare()) { + return push(null, head); + } + DirCache dc = repo.readDirCache(); + try (TreeWalk walk = new TreeWalk(repo)) { + walk.setOperationType(OperationType.CHECKIN_OP); + FileTreeIterator iter = new FileTreeIterator(repo); + int fileTree = walk.addTree(iter); + int indexTree = walk.addTree(new DirCacheIterator(dc)); + iter.setDirCacheIterator(walk, indexTree); + walk.setFilter(resultPath); + walk.setRecursive(true); + if (!walk.next()) { + return this; + } + DirCacheIterator dcIter = walk.getTree(indexTree, + DirCacheIterator.class); + if (dcIter == null) { + // Not found in index + return this; + } + iter = walk.getTree(fileTree, FileTreeIterator.class); + if (iter == null || !isFile(iter.getEntryRawMode())) { + return this; + } + RawText inTree; + long filteredLength = iter.getEntryContentLength(); + try (InputStream stream = iter.openEntryStream()) { + inTree = new RawText(getBytes(iter.getEntryFile().getPath(), + stream, filteredLength)); + } + DirCacheEntry indexEntry = dcIter.getDirCacheEntry(); + if (indexEntry.getStage() == DirCacheEntry.STAGE_0) { + push(null, head); + push(null, indexEntry.getObjectId()); + push(null, inTree); + } else { + // Create a special candidate using the working tree file as + // blob and HEAD and the MERGE_HEADs as parents. + HeadCandidate c = new HeadCandidate(getRepository(), resultPath, + getHeads(repo, head)); + c.sourceText = inTree; + c.regionList = new Region(0, 0, inTree.size()); + remaining = inTree.size(); + push(c); + } + } + return this; + } + + private List<RevCommit> getHeads(Repository repo, ObjectId head) + throws NoWorkTreeException, IOException { + List<ObjectId> mergeIds = repo.readMergeHeads(); + if (mergeIds == null || mergeIds.isEmpty()) { + return Collections.singletonList(revPool.parseCommit(head)); + } + List<RevCommit> heads = new ArrayList<>(mergeIds.size() + 1); + heads.add(revPool.parseCommit(head)); + for (ObjectId id : mergeIds) { + heads.add(revPool.parseCommit(id)); + } + return heads; + } + + private static byte[] getBytes(String path, InputStream in, long maxLength) + throws IOException { + if (maxLength > Integer.MAX_VALUE) { + throw new IOException( + MessageFormat.format(JGitText.get().fileIsTooLarge, path)); + } + int max = (int) maxLength; + byte[] buffer = new byte[max]; + int read = IO.readFully(in, buffer, 0); + if (read == max) { + return buffer; + } + byte[] copy = new byte[read]; + System.arraycopy(buffer, 0, copy, 0, read); + return copy; + } + + /** * Push a candidate object onto the generator's traversal stack. * <p> * Candidates should be pushed in history order from oldest-to-newest. diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/blame/Candidate.java b/org.eclipse.jgit/src/org/eclipse/jgit/blame/Candidate.java index 457d1d2cea..3ef4943982 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/blame/Candidate.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/blame/Candidate.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011, Google Inc. + * Copyright (C) 2011, 2019 Google Inc. * and other copyright owners as documented in the project's IP log. * * This program and the accompanying materials are made available @@ -44,12 +44,14 @@ package org.eclipse.jgit.blame; import java.io.IOException; +import java.util.List; import org.eclipse.jgit.blame.ReverseWalk.ReverseCommit; import org.eclipse.jgit.diff.Edit; import org.eclipse.jgit.diff.EditList; import org.eclipse.jgit.diff.RawText; import org.eclipse.jgit.errors.MissingObjectException; +import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectLoader; @@ -392,6 +394,66 @@ class Candidate { } /** + * A {@link Candidate} to blame a working tree file in conflict state. + * <p> + * Contrary to {@link BlobCandidate}, it expects to be given the parent + * commits (typically HEAD and the MERGE_HEADs) and behaves like a merge + * commit during blame. It does <em>not</em> consider a previously pushed + * Candidate as its parent. + * </p> + */ + static final class HeadCandidate extends Candidate { + + private List<RevCommit> parents; + + HeadCandidate(Repository repo, PathFilter path, + List<RevCommit> parents) { + super(repo, null, path); + this.parents = parents; + } + + @Override + void beginResult(RevWalk rw) { + // Blob candidates have nothing to prepare. + } + + @Override + int getParentCount() { + return parents.size(); + } + + @Override + RevCommit getParent(int idx) { + return parents.get(idx); + } + + @Override + boolean has(RevFlag flag) { + return true; // Pretend flag was added; sourceCommit is null. + } + + @Override + void add(RevFlag flag) { + // Do nothing, sourceCommit is null. + } + + @Override + void remove(RevFlag flag) { + // Do nothing, sourceCommit is null. + } + + @Override + int getTime() { + return Integer.MAX_VALUE; + } + + @Override + PersonIdent getAuthor() { + return new PersonIdent(JGitText.get().blameNotCommittedYet, ""); //$NON-NLS-1$ + } + } + + /** * Candidate loaded from a file source, and not a commit. * <p> * The {@link Candidate#sourceCommit} field is always null on this type of diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/CommitMsgHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/CommitMsgHook.java index f33168d814..6dbe0a6609 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/CommitMsgHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/CommitMsgHook.java @@ -72,6 +72,9 @@ public class CommitMsgHook extends GitHook<String> { /** * Constructor for CommitMsgHook + * <p> + * This constructor will use the default error stream. + * </p> * * @param repo * The repository @@ -83,6 +86,24 @@ public class CommitMsgHook extends GitHook<String> { super(repo, outputStream); } + /** + * Constructor for CommitMsgHook + * + * @param repo + * The repository + * @param outputStream + * The output stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.out}. + * @param errorStream + * The error stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.err}. + * @since 5.6 + */ + protected CommitMsgHook(Repository repo, PrintStream outputStream, + PrintStream errorStream) { + super(repo, outputStream, errorStream); + } + /** {@inheritDoc} */ @Override public String call() throws IOException, AbortedByHookException { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/GitHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/GitHook.java index 6bb5bfc4c4..aa307c9378 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/GitHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/GitHook.java @@ -50,6 +50,7 @@ import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.util.concurrent.Callable; +import org.bouncycastle.util.io.TeeOutputStream; import org.eclipse.jgit.api.errors.AbortedByHookException; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.util.FS; @@ -79,7 +80,15 @@ abstract class GitHook<T> implements Callable<T> { protected final PrintStream outputStream; /** - * Constructor for GitHook + * The error stream to be used by the hook. + */ + protected final PrintStream errorStream; + + /** + * Constructor for GitHook. + * <p> + * This constructor will use stderr for the error stream. + * </p> * * @param repo * a {@link org.eclipse.jgit.lib.Repository} object. @@ -88,8 +97,26 @@ abstract class GitHook<T> implements Callable<T> { * in which case the hook will use {@code System.out}. */ protected GitHook(Repository repo, PrintStream outputStream) { + this(repo, outputStream, null); + } + + /** + * Constructor for GitHook + * + * @param repo + * a {@link org.eclipse.jgit.lib.Repository} object. + * @param outputStream + * The output stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.out}. + * @param errorStream + * The error stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.err}. + */ + protected GitHook(Repository repo, PrintStream outputStream, + PrintStream errorStream) { this.repo = repo; this.outputStream = outputStream; + this.errorStream = errorStream; } /** @@ -148,6 +175,16 @@ abstract class GitHook<T> implements Callable<T> { } /** + * Get error stream + * + * @return The error stream the hook must use. Never {@code null}, + * {@code System.err} is returned by default. + */ + protected PrintStream getErrorStream() { + return errorStream == null ? System.err : errorStream; + } + + /** * Runs the hook, without performing any validity checks. * * @throws org.eclipse.jgit.api.errors.AbortedByHookException @@ -155,9 +192,11 @@ abstract class GitHook<T> implements Callable<T> { */ protected void doRun() throws AbortedByHookException { final ByteArrayOutputStream errorByteArray = new ByteArrayOutputStream(); + final TeeOutputStream stderrStream = new TeeOutputStream(errorByteArray, + getErrorStream()); PrintStream hookErrRedirect = null; try { - hookErrRedirect = new PrintStream(errorByteArray, false, + hookErrRedirect = new PrintStream(stderrStream, false, UTF_8.name()); } catch (UnsupportedEncodingException e) { // UTF-8 is guaranteed to be available diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/Hooks.java b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/Hooks.java index b801d6872b..f29dcd178b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/Hooks.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/Hooks.java @@ -57,7 +57,8 @@ import org.eclipse.jgit.util.LfsFactory; public class Hooks { /** - * Create pre-commit hook for the given repository + * Create pre-commit hook for the given repository with the default error + * stream * * @param repo * a {@link org.eclipse.jgit.lib.Repository} object. @@ -71,7 +72,25 @@ public class Hooks { } /** - * Create post-commit hook for the given repository + * Create pre-commit hook for the given repository + * + * @param repo + * a {@link org.eclipse.jgit.lib.Repository} object. + * @param outputStream + * The output stream, or {@code null} to use {@code System.out} + * @param errorStream + * The error stream, or {@code null} to use {@code System.err} + * @return The pre-commit hook for the given repository. + * @since 5.6 + */ + public static PreCommitHook preCommit(Repository repo, + PrintStream outputStream, PrintStream errorStream) { + return new PreCommitHook(repo, outputStream, errorStream); + } + + /** + * Create post-commit hook for the given repository with the default error + * stream * * @param repo * a {@link org.eclipse.jgit.lib.Repository} object. @@ -86,7 +105,25 @@ public class Hooks { } /** - * Create commit-msg hook for the given repository + * Create post-commit hook for the given repository + * + * @param repo + * a {@link org.eclipse.jgit.lib.Repository} object. + * @param outputStream + * The output stream, or {@code null} to use {@code System.out} + * @param errorStream + * The error stream, or {@code null} to use {@code System.err} + * @return The pre-commit hook for the given repository. + * @since 5.6 + */ + public static PostCommitHook postCommit(Repository repo, + PrintStream outputStream, PrintStream errorStream) { + return new PostCommitHook(repo, outputStream, errorStream); + } + + /** + * Create commit-msg hook for the given repository with the default error + * stream * * @param repo * a {@link org.eclipse.jgit.lib.Repository} object. @@ -100,7 +137,25 @@ public class Hooks { } /** - * Create pre-push hook for the given repository + * Create commit-msg hook for the given repository + * + * @param repo + * a {@link org.eclipse.jgit.lib.Repository} object. + * @param outputStream + * The output stream, or {@code null} to use {@code System.out} + * @param errorStream + * The error stream, or {@code null} to use {@code System.err} + * @return The pre-commit hook for the given repository. + * @since 5.6 + */ + public static CommitMsgHook commitMsg(Repository repo, + PrintStream outputStream, PrintStream errorStream) { + return new CommitMsgHook(repo, outputStream, errorStream); + } + + /** + * Create pre-push hook for the given repository with the default error + * stream * * @param repo * a {@link org.eclipse.jgit.lib.Repository} object. @@ -127,4 +182,36 @@ public class Hooks { } return new PrePushHook(repo, outputStream); } + + /** + * Create pre-push hook for the given repository + * + * @param repo + * a {@link org.eclipse.jgit.lib.Repository} object. + * @param outputStream + * The output stream, or {@code null} to use {@code System.out} + * @param errorStream + * The error stream, or {@code null} to use {@code System.err} + * @return The pre-push hook for the given repository. + * @since 5.6 + */ + public static PrePushHook prePush(Repository repo, PrintStream outputStream, + PrintStream errorStream) { + if (LfsFactory.getInstance().isAvailable()) { + PrePushHook hook = LfsFactory.getInstance().getPrePushHook(repo, + outputStream, errorStream); + if (hook != null) { + if (hook.isNativeHookPresent()) { + PrintStream ps = outputStream; + if (ps == null) { + ps = System.out; + } + ps.println(MessageFormat + .format(JGitText.get().lfsHookConflict, repo)); + } + return hook; + } + } + return new PrePushHook(repo, outputStream, errorStream); + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PostCommitHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PostCommitHook.java index 24bad16ecb..b6e576fc23 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PostCommitHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PostCommitHook.java @@ -61,6 +61,9 @@ public class PostCommitHook extends GitHook<Void> { /** * Constructor for PostCommitHook + * <p> + * This constructor will use the default error stream. + * </p> * * @param repo * The repository @@ -72,6 +75,24 @@ public class PostCommitHook extends GitHook<Void> { super(repo, outputStream); } + /** + * Constructor for PostCommitHook + * + * @param repo + * The repository + * @param outputStream + * The output stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.out}. + * @param errorStream + * The error stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.err}. + * @since 5.6 + */ + protected PostCommitHook(Repository repo, PrintStream outputStream, + PrintStream errorStream) { + super(repo, outputStream, errorStream); + } + /** {@inheritDoc} */ @Override public Void call() throws IOException, AbortedByHookException { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PreCommitHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PreCommitHook.java index 0d9290da3e..dbdaf8669c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PreCommitHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PreCommitHook.java @@ -61,6 +61,9 @@ public class PreCommitHook extends GitHook<Void> { /** * Constructor for PreCommitHook + * <p> + * This constructor will use the default error stream. + * </p> * * @param repo * The repository @@ -72,6 +75,24 @@ public class PreCommitHook extends GitHook<Void> { super(repo, outputStream); } + /** + * Constructor for PreCommitHook + * + * @param repo + * The repository + * @param outputStream + * The output stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.out}. + * @param errorStream + * The error stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.err}. + * @since 5.6 + */ + protected PreCommitHook(Repository repo, PrintStream outputStream, + PrintStream errorStream) { + super(repo, outputStream, errorStream); + } + /** {@inheritDoc} */ @Override public Void call() throws IOException, AbortedByHookException { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java index 431944f9d4..61180fd021 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java @@ -73,6 +73,9 @@ public class PrePushHook extends GitHook<String> { /** * Constructor for PrePushHook + * <p> + * This constructor will use the default error stream. + * </p> * * @param repo * The repository @@ -84,6 +87,24 @@ public class PrePushHook extends GitHook<String> { super(repo, outputStream); } + /** + * Constructor for PrePushHook + * + * @param repo + * The repository + * @param outputStream + * The output stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.out}. + * @param errorStream + * The error stream the hook must use. {@code null} is allowed, + * in which case the hook will use {@code System.err}. + * @since 5.6 + */ + protected PrePushHook(Repository repo, PrintStream outputStream, + PrintStream errorStream) { + super(repo, outputStream, errorStream); + } + /** {@inheritDoc} */ @Override protected String getStdinArgs() { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java index 65c9629461..0cea60fd95 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java @@ -518,6 +518,7 @@ public class JGitText extends TranslationBundle { /***/ public String nonCommitToHeads; /***/ public String noPathAttributesFound; /***/ public String noSuchRef; + /***/ public String noSuchRefKnown; /***/ public String noSuchSubmodule; /***/ public String notABoolean; /***/ public String notABundle; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReftableDatabase.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReftableDatabase.java index 2ad3ae7e62..124131d1d3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReftableDatabase.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReftableDatabase.java @@ -218,6 +218,12 @@ public class DfsReftableDatabase extends DfsRefDatabase { /** {@inheritDoc} */ @Override + public boolean hasFastTipsWithSha1() throws IOException { + return reftableDatabase.hasFastTipsWithSha1(); + } + + /** {@inheritDoc} */ + @Override public Ref peel(Ref ref) throws IOException { Ref oldLeaf = ref.getLeaf(); if (oldLeaf.isPeeled() || oldLeaf.getObjectId() == null) { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileReftableDatabase.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileReftableDatabase.java index b06fd30b34..fd80ad9ec0 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileReftableDatabase.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileReftableDatabase.java @@ -125,6 +125,12 @@ public class FileReftableDatabase extends RefDatabase { && new File(repoDir, Constants.REFTABLE).isDirectory(); } + /** {@inheritDoc} */ + @Override + public boolean hasFastTipsWithSha1() throws IOException { + return reftableDatabase.hasFastTipsWithSha1(); + } + /** * Runs a full compaction for GC purposes. * @throws IOException on I/O errors diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java index cb00fc4ef5..2f6ef51133 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java @@ -46,6 +46,8 @@ package org.eclipse.jgit.internal.storage.file; +import static java.util.stream.Collectors.toList; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -740,6 +742,10 @@ public class FileRepository extends Repository { File packedRefs = new File(getDirectory(), Constants.PACKED_REFS); File logsDir = new File(getDirectory(), Constants.LOGS); + + List<String> additional = getRefDatabase().getAdditionalRefs().stream() + .map(Ref::getName).collect(toList()); + additional.add(Constants.HEAD); if (backup) { FileUtils.rename(refsFile, new File(getDirectory(), "refs.old")); if (packedRefs.exists()) { @@ -750,10 +756,17 @@ public class FileRepository extends Repository { FileUtils.rename(logsDir, new File(getDirectory(), Constants.LOGS + ".old")); } + for (String r : additional) { + FileUtils.rename(new File(getDirectory(), r), + new File(getDirectory(), r + ".old")); + } } else { packedRefs.delete(); // ignore return value. FileUtils.delete(logsDir, FileUtils.RECURSIVE); FileUtils.delete(refsFile, FileUtils.RECURSIVE); + for (String r : additional) { + new File(getDirectory(), r).delete(); + } } // Put new data. diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/MergedReftable.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/MergedReftable.java index 4de5e392f9..0144453cd7 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/MergedReftable.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/MergedReftable.java @@ -100,6 +100,16 @@ public class MergedReftable extends Reftable { /** {@inheritDoc} */ @Override + public boolean hasObjectMap() throws IOException { + boolean has = true; + for (int i = 0; has && i < tables.length; i++) { + has = has && tables[i].hasObjectMap(); + } + return has; + } + + /** {@inheritDoc} */ + @Override public RefCursor allRefs() throws IOException { MergedRefCursor m = new MergedRefCursor(); for (int i = 0; i < tables.length; i++) { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/Reftable.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/Reftable.java index 8f64261766..8a8a14375a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/Reftable.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/Reftable.java @@ -162,6 +162,12 @@ public abstract class Reftable { public abstract RefCursor byObjectId(AnyObjectId id) throws IOException; /** + * @return whether this reftable can do a fast SHA1 => ref lookup. + * @throws IOException on I/O problems. + */ + public abstract boolean hasObjectMap() throws IOException; + + /** * Seek reader to read log records. * * @return cursor to iterate; empty cursor if no logs are present. diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableDatabase.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableDatabase.java index 2753c02800..c08f1814dc 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableDatabase.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableDatabase.java @@ -1,3 +1,46 @@ +/* + * Copyright (C) 2017, Google LLC + * and other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Distribution License v1.0 which + * accompanies this distribution, is reproduced below, and is + * available at http://www.eclipse.org/org/documents/edl-v10.php + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Eclipse Foundation, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + package org.eclipse.jgit.internal.storage.reftable; import java.io.IOException; @@ -256,6 +299,19 @@ public abstract class ReftableDatabase { } /** + * @return whether there is a fast SHA1 to ref map. + * @throws IOException in case of I/O problems. + */ + public boolean hasFastTipsWithSha1() throws IOException { + lock.lock(); + try { + return reader().hasObjectMap(); + } finally { + lock.unlock(); + } + } + + /** * Returns all refs that resolve directly to the given {@link ObjectId}. * Includes peeled {@linkObjectId}s. * diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableReader.java index c5e667449a..14b821a1ed 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableReader.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableReader.java @@ -128,6 +128,16 @@ public class ReftableReader extends Reftable implements AutoCloseable { return blockSize; } + @Override + public boolean hasObjectMap() throws IOException { + if (objIndexPosition == -1) { + readFileFooter(); + } + + // We have the map, we have no refs, or the table is small. + return (objPosition > 0 || refEnd == 24 || refIndexPosition == 0); + } + /** * Get the minimum update index for log entries that appear in this * reftable. diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java index 4d9450e758..9b5a1fdc22 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java @@ -497,6 +497,20 @@ public abstract class RefDatabase { } /** + * If the ref database does not support fast inverse queries, it may + * be advantageous to build a complete SHA1 to ref map in advance for + * multiple uses. To let applications decide on this decision, + * this function indicates whether the inverse map is available. + * + * @return whether this RefDatabase supports fast inverse ref queries. + * @throws IOException on I/O problems. + * @since 5.6 + */ + public boolean hasFastTipsWithSha1() throws IOException { + return false; + } + + /** * Check if any refs exist in the ref database. * <p> * This uses the same definition of refs as {@link #getRefs()}. In diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java index fa113bfc6b..fc74f5324f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java @@ -476,7 +476,8 @@ public class RepositoryCache { public static boolean isGitRepository(File dir, FS fs) { return fs.resolve(dir, Constants.OBJECTS).exists() && fs.resolve(dir, "refs").exists() //$NON-NLS-1$ - && isValidHead(new File(dir, Constants.HEAD)); + && (fs.resolve(dir, Constants.REFTABLE).exists() + || isValidHead(new File(dir, Constants.HEAD))); } private static boolean isValidHead(File head) { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/BitmapCalculator.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/BitmapCalculator.java deleted file mode 100644 index 14e95670aa..0000000000 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/BitmapCalculator.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2019, Google LLC. - * and other copyright owners as documented in the project's IP log. - * - * This program and the accompanying materials are made available - * under the terms of the Eclipse Distribution License v1.0 which - * accompanies this distribution, is reproduced below, and is - * available at http://www.eclipse.org/org/documents/edl-v10.php - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * - Neither the name of the Eclipse Foundation, Inc. nor the - * names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.eclipse.jgit.revwalk; - -import static java.util.Objects.requireNonNull; - -import java.io.IOException; - -import org.eclipse.jgit.errors.IncorrectObjectTypeException; -import org.eclipse.jgit.errors.MissingObjectException; -import org.eclipse.jgit.internal.revwalk.AddToBitmapFilter; -import org.eclipse.jgit.lib.BitmapIndex; -import org.eclipse.jgit.lib.BitmapIndex.Bitmap; -import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder; -import org.eclipse.jgit.lib.ProgressMonitor; - -/** - * Calculate the bitmap indicating what other commits are reachable from certain - * commit. - * <p> - * This bitmap refers only to commits. For a bitmap with ALL objects reachable - * from certain object, see {@code BitmapWalker}. - */ -class BitmapCalculator { - - private final RevWalk walk; - private final BitmapIndex bitmapIndex; - - BitmapCalculator(RevWalk walk) throws IOException { - this.walk = walk; - this.bitmapIndex = requireNonNull( - walk.getObjectReader().getBitmapIndex()); - } - - /** - * Get the reachability bitmap from certain commit to other commits. - * <p> - * This will return a precalculated bitmap if available or walk building one - * until finding a precalculated bitmap (and returning the union). - * <p> - * Beware that the returned bitmap it is guaranteed to include ONLY the - * commits reachable from the initial commit. It COULD include other objects - * (because precalculated bitmaps have them) but caller shouldn't count on - * that. See {@link BitmapWalker} for a full reachability bitmap. - * - * @param start - * the commit. Use {@code walk.parseCommit(objectId)} to get this - * object from the id. - * @param pm - * progress monitor. Updated by one per commit browsed in the - * graph - * @return the bitmap of reachable commits (and maybe some extra objects) - * for the commit - * @throws MissingObjectException - * the supplied id doesn't exist - * @throws IncorrectObjectTypeException - * the supplied id doesn't refer to a commit or a tag - * @throws IOException - * if the walk cannot open a packfile or loose object - */ - BitmapBuilder getBitmap(RevCommit start, ProgressMonitor pm) - throws MissingObjectException, - IncorrectObjectTypeException, IOException { - Bitmap precalculatedBitmap = bitmapIndex.getBitmap(start); - if (precalculatedBitmap != null) { - return asBitmapBuilder(precalculatedBitmap); - } - - walk.reset(); - walk.sort(RevSort.TOPO); - walk.markStart(start); - // Unbounded walk. If the repo has bitmaps, it should bump into one at - // some point. - - BitmapBuilder bitmapResult = bitmapIndex.newBitmapBuilder(); - walk.setRevFilter(new AddToBitmapFilter(bitmapResult)); - while (walk.next() != null) { - // Iterate through all of the commits. The BitmapRevFilter does - // the work. - // - // filter.include returns true for commits that do not have - // a bitmap in bitmapIndex and are not reachable from a - // bitmap in bitmapIndex encountered earlier in the walk. - // Thus the number of commits returned by next() measures how - // much history was traversed without being able to make use - // of bitmaps. - pm.update(1); - } - - return bitmapResult; - } - - private BitmapBuilder asBitmapBuilder(Bitmap bitmap) { - return bitmapIndex.newBitmapBuilder().or(bitmap); - } -} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/BitmappedReachabilityChecker.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/BitmappedReachabilityChecker.java index 6e510f677b..bf831e3313 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/BitmappedReachabilityChecker.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/BitmappedReachabilityChecker.java @@ -45,13 +45,18 @@ package org.eclipse.jgit.revwalk; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; import java.util.List; import java.util.Optional; +import java.util.stream.Stream; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; +import org.eclipse.jgit.lib.BitmapIndex; +import org.eclipse.jgit.lib.BitmapIndex.Bitmap; import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder; -import org.eclipse.jgit.lib.NullProgressMonitor; +import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.revwalk.filter.RevFilter; /** * Checks the reachability using bitmaps. @@ -84,37 +89,108 @@ class BitmappedReachabilityChecker implements ReachabilityChecker { * Check all targets are reachable from the starters. * <p> * In this implementation, it is recommended to put the most popular - * starters (e.g. refs/heads tips) at the beginning of the collection + * starters (e.g. refs/heads tips) at the beginning. */ @Override public Optional<RevCommit> areAllReachable(Collection<RevCommit> targets, - Collection<RevCommit> starters) throws MissingObjectException, + Stream<RevCommit> starters) throws MissingObjectException, IncorrectObjectTypeException, IOException { - BitmapCalculator calculator = new BitmapCalculator(walk); - /** - * Iterate over starters bitmaps and remove targets as they become - * reachable. - * - * Building the total starters bitmap has the same cost (iterating over - * all starters adding the bitmaps) and this gives us the chance to - * shorcut the loop. - * - * This is based on the assuption that most of the starters will have - * the reachability bitmap precalculated. If many require a walk, the - * walk.reset() could start to take too much time. - */ List<RevCommit> remainingTargets = new ArrayList<>(targets); - for (RevCommit starter : starters) { - BitmapBuilder starterBitmap = calculator.getBitmap(starter, - NullProgressMonitor.INSTANCE); - remainingTargets.removeIf(starterBitmap::contains); - if (remainingTargets.isEmpty()) { - return Optional.empty(); + + walk.reset(); + walk.sort(RevSort.TOPO); + + // Filter emits only commits that are unreachable from previously + // visited commits. Internally it keeps a bitmap of everything + // reachable so far, which we use to discard reachable targets. + BitmapIndex repoBitmaps = walk.getObjectReader().getBitmapIndex(); + ReachedFilter reachedFilter = new ReachedFilter(repoBitmaps); + walk.setRevFilter(reachedFilter); + + Iterator<RevCommit> startersIter = starters.iterator(); + while (startersIter.hasNext()) { + walk.markStart(startersIter.next()); + while (walk.next() != null) { + remainingTargets.removeIf(reachedFilter::isReachable); + + if (remainingTargets.isEmpty()) { + return Optional.empty(); + } } + walk.reset(); } return Optional.of(remainingTargets.get(0)); } + /** + * This filter emits commits that were not bitmap-reachable from anything + * visited before. Or in other words, commits that add something (themselves + * or their bitmap) to the "reached" bitmap. + * + * Current progress can be queried via {@link #isReachable(RevCommit)}. + */ + private static class ReachedFilter extends RevFilter { + + private final BitmapIndex repoBitmaps; + private final BitmapBuilder reached; + + /** + * Create a filter that emits only previously unreachable commits. + * + * @param repoBitmaps + * bitmap index of the repo + */ + public ReachedFilter(BitmapIndex repoBitmaps) { + this.repoBitmaps = repoBitmaps; + this.reached = repoBitmaps.newBitmapBuilder(); + } + + /** {@inheritDoc} */ + @Override + public final boolean include(RevWalk walker, RevCommit cmit) { + Bitmap commitBitmap; + + if (reached.contains(cmit)) { + // already seen or included + dontFollow(cmit); + return false; + } + + if ((commitBitmap = repoBitmaps.getBitmap(cmit)) != null) { + reached.or(commitBitmap); + // Emit the commit because there are new contents in the bitmap + // but don't follow parents (they are already in the bitmap) + dontFollow(cmit); + return true; + } + + // No bitmaps, keep going + reached.addObject(cmit, Constants.OBJ_COMMIT); + return true; + } + + private static final void dontFollow(RevCommit cmit) { + for (RevCommit p : cmit.getParents()) { + p.add(RevFlag.SEEN); + } + } + + /** {@inheritDoc} */ + @Override + public final RevFilter clone() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @Override + public final boolean requiresCommitBody() { + return false; + } + + boolean isReachable(RevCommit commit) { + return reached.contains(commit); + } + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PedestrianReachabilityChecker.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PedestrianReachabilityChecker.java index bba3c5cff3..da9e75992f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PedestrianReachabilityChecker.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PedestrianReachabilityChecker.java @@ -44,7 +44,9 @@ package org.eclipse.jgit.revwalk; import java.io.IOException; import java.util.Collection; +import java.util.Iterator; import java.util.Optional; +import java.util.stream.Stream; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; @@ -75,7 +77,7 @@ class PedestrianReachabilityChecker implements ReachabilityChecker { @Override public Optional<RevCommit> areAllReachable(Collection<RevCommit> targets, - Collection<RevCommit> starters) + Stream<RevCommit> starters) throws MissingObjectException, IncorrectObjectTypeException, IOException { walk.reset(); @@ -87,8 +89,9 @@ class PedestrianReachabilityChecker implements ReachabilityChecker { walk.markStart(target); } - for (RevCommit starter : starters) { - walk.markUninteresting(starter); + Iterator<RevCommit> iterator = starters.iterator(); + while (iterator.hasNext()) { + walk.markUninteresting(iterator.next()); } return Optional.ofNullable(walk.next()); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/ReachabilityChecker.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/ReachabilityChecker.java index 2ed06d1769..6a9c641318 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/ReachabilityChecker.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/ReachabilityChecker.java @@ -45,6 +45,7 @@ package org.eclipse.jgit.revwalk; import java.io.IOException; import java.util.Collection; import java.util.Optional; +import java.util.stream.Stream; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; @@ -82,9 +83,43 @@ public interface ReachabilityChecker { * @throws IOException * if any of the underlying indexes or readers can not be * opened. + * + * @deprecated see {{@link #areAllReachable(Collection, Stream)} + */ + @Deprecated + default Optional<RevCommit> areAllReachable(Collection<RevCommit> targets, + Collection<RevCommit> starters) throws MissingObjectException, + IncorrectObjectTypeException, IOException { + return areAllReachable(targets, starters.stream()); + } + + /** + * Check if all targets are reachable from the {@code starter} commits. + * <p> + * Caller should parse the objectIds (preferably with + * {@code walk.parseCommit()} and handle missing/incorrect type objects + * before calling this method. + * + * @param targets + * commits to reach. + * @param starters + * known starting points. + * @return An unreachable target if at least one of the targets is + * unreachable. An empty optional if all targets are reachable from + * the starters. + * + * @throws MissingObjectException + * if any of the incoming objects doesn't exist in the + * repository. + * @throws IncorrectObjectTypeException + * if any of the incoming objects is not a commit or a tag. + * @throws IOException + * if any of the underlying indexes or readers can not be + * opened. + * @since 5.6 */ Optional<RevCommit> areAllReachable(Collection<RevCommit> targets, - Collection<RevCommit> starters) + Stream<RevCommit> starters) throws MissingObjectException, IncorrectObjectTypeException, IOException; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommandErrorHandler.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommandErrorHandler.java new file mode 100644 index 0000000000..d9a148622b --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommandErrorHandler.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2019, Google LLC 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 + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.transport; + +import java.io.IOException; +import java.util.List; + +import org.eclipse.jgit.errors.MissingObjectException; +import org.eclipse.jgit.transport.ReceiveCommand.Result; + +/** + * Exception handler for processing {@link ReceiveCommand}. + * + * @since 5.7 + */ +public interface ReceiveCommandErrorHandler { + /** + * Handle an exception thrown while validating the new commit ID. + * + * @param cmd + * offending command + * @param e + * exception thrown + */ + default void handleNewIdValidationException(ReceiveCommand cmd, + IOException e) { + cmd.setResult(Result.REJECTED_MISSING_OBJECT, cmd.getNewId().name()); + } + + /** + * Handle an exception thrown while validating the old commit ID. + * + * @param cmd + * offending command + * @param e + * exception thrown + */ + default void handleOldIdValidationException(ReceiveCommand cmd, + IOException e) { + cmd.setResult(Result.REJECTED_MISSING_OBJECT, cmd.getOldId().name()); + } + + /** + * Handle an exception thrown while checking if the update is fast-forward. + * + * @param cmd + * offending command + * @param e + * exception thrown + */ + default void handleFastForwardCheckException(ReceiveCommand cmd, + IOException e) { + if (e instanceof MissingObjectException) { + cmd.setResult(Result.REJECTED_MISSING_OBJECT, e.getMessage()); + } else { + cmd.setResult(Result.REJECTED_OTHER_REASON); + } + } + + /** + * Handle an exception thrown while checking if the update is fast-forward. + * + * @param cmds + * commands being processed + * @param e + * exception thrown + */ + default void handleBatchRefUpdateException(List<ReceiveCommand> cmds, + IOException e) { + for (ReceiveCommand cmd : cmds) { + if (cmd.getResult() == Result.NOT_ATTEMPTED) { + cmd.reject(e); + } + } + } +} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java index 820cdb6bad..69e647150f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java @@ -74,7 +74,6 @@ import java.util.concurrent.TimeUnit; import org.eclipse.jgit.annotations.Nullable; import org.eclipse.jgit.errors.InvalidObjectIdException; import org.eclipse.jgit.errors.LargeObjectException; -import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.errors.PackProtocolException; import org.eclipse.jgit.errors.TooLargePackException; import org.eclipse.jgit.errors.UnpackException; @@ -93,24 +92,21 @@ import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.ObjectChecker; import org.eclipse.jgit.lib.ObjectDatabase; import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.ObjectIdSubclassMap; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.ObjectLoader; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.revwalk.ObjectWalk; -import org.eclipse.jgit.revwalk.RevBlob; import org.eclipse.jgit.revwalk.RevCommit; -import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevObject; -import org.eclipse.jgit.revwalk.RevSort; -import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.PacketLineIn.InputOverLimitIOException; import org.eclipse.jgit.transport.ReceiveCommand.Result; import org.eclipse.jgit.transport.RefAdvertiser.PacketLineOutRefAdvertiser; +import org.eclipse.jgit.transport.internal.ConnectivityChecker.ConnectivityCheckInfo; +import org.eclipse.jgit.transport.internal.ConnectivityChecker; +import org.eclipse.jgit.transport.internal.FullConnectivityChecker; import org.eclipse.jgit.util.io.InterruptTimer; import org.eclipse.jgit.util.io.LimitedInputStream; import org.eclipse.jgit.util.io.TimeoutInputStream; @@ -273,7 +269,7 @@ public class ReceivePack { /** Lock around the received pack file, while updating refs. */ private PackLock packLock; - private boolean checkReferencedIsReachable; + private boolean checkReferencedAreReachable; /** Git object size limit */ private long maxObjectSizeLimit; @@ -292,9 +288,21 @@ public class ReceivePack { private ReceivedPackStatistics stats; + /** + * Connectivity checker to use. + * @since 5.7 + */ + protected ConnectivityChecker connectivityChecker = new FullConnectivityChecker(); + /** Hook to validate the update commands before execution. */ private PreReceiveHook preReceive; + private ReceiveCommandErrorHandler receiveCommandErrorHandler = new ReceiveCommandErrorHandler() { + // Use the default implementation. + }; + + private UnpackErrorHandler unpackErrorHandler = new DefaultUnpackErrorHandler(); + /** Hook to report on the commands after execution. */ private PostReceiveHook postReceive; @@ -508,7 +516,7 @@ public class ReceivePack { * reference. */ public boolean isCheckReferencedObjectsAreReachable() { - return checkReferencedIsReachable; + return checkReferencedAreReachable; } /** @@ -533,7 +541,7 @@ public class ReceivePack { * {@code true} to enable the additional check. */ public void setCheckReferencedObjectsAreReachable(boolean b) { - this.checkReferencedIsReachable = b; + this.checkReferencedAreReachable = b; } /** @@ -1021,6 +1029,17 @@ public class ReceivePack { } /** + * Set an error handler for {@link ReceiveCommand}. + * + * @param receiveCommandErrorHandler + * @since 5.7 + */ + public void setReceiveCommandErrorHandler( + ReceiveCommandErrorHandler receiveCommandErrorHandler) { + this.receiveCommandErrorHandler = receiveCommandErrorHandler; + } + + /** * Send an error message to the client. * <p> * If any error messages are sent before the references are advertised to @@ -1153,6 +1172,9 @@ public class ReceivePack { /** * Initialize the instance with the given streams. * + * Visible for out-of-tree subclasses (e.g. tests that need to set the + * streams without going through the {@link #service()} method). + * * @param input * raw input to read client commands and pack data from. Caller * must ensure the input is buffered, otherwise read performance @@ -1167,7 +1189,7 @@ public class ReceivePack { * standard error channel of the command execution. For most * other network connections this should be null. */ - private void init(final InputStream input, final OutputStream output, + protected void init(final InputStream input, final OutputStream output, final OutputStream messages) { origOut = output; rawIn = input; @@ -1207,10 +1229,20 @@ public class ReceivePack { /** * Receive a pack from the stream and check connectivity if necessary. * + * Visible for out-of-tree subclasses. Subclasses overriding this method + * should invoke this implementation, as it alters the instance state (e.g. + * it reads the pack from the input and parses it before running the + * connectivity checks). + * * @throws java.io.IOException * an error occurred during unpacking or connectivity checking. + * @throws LargeObjectException + * an large object needs to be opened for the check. + * @throws SubmoduleValidationException + * fails to validate the submodule. */ - private void receivePackAndCheckConnectivity() throws IOException { + protected void receivePackAndCheckConnectivity() throws IOException, + LargeObjectException, SubmoduleValidationException { receivePack(); if (needCheckConnectivity()) { checkSubmodules(); @@ -1360,15 +1392,9 @@ public class ReceivePack { if (hasCommands()) { readPostCommands(pck); } - } catch (PackProtocolException e) { - discardCommands(); - fatalError(e.getMessage()); - throw e; - } catch (InputOverLimitIOException e) { - String msg = JGitText.get().tooManyCommands; + } catch (Throwable t) { discardCommands(); - fatalError(msg); - throw new PackProtocolException(msg); + throw t; } } @@ -1490,10 +1516,10 @@ public class ReceivePack { parser = ins.newPackParser(packInputStream()); parser.setAllowThin(true); - parser.setNeedNewObjectIds(checkReferencedIsReachable); - parser.setNeedBaseObjectIds(checkReferencedIsReachable); - parser.setCheckEofAfterPackFooter( - !biDirectionalPipe && !isExpectDataAfterPackFooter()); + parser.setNeedNewObjectIds(checkReferencedAreReachable); + parser.setNeedBaseObjectIds(checkReferencedAreReachable); + parser.setCheckEofAfterPackFooter(!biDirectionalPipe + && !isExpectDataAfterPackFooter()); parser.setExpectDataAfterPackFooter(isExpectDataAfterPackFooter()); parser.setObjectChecker(objectChecker); parser.setLockMessage(lockMsg); @@ -1527,7 +1553,8 @@ public class ReceivePack { || !getClientShallowCommits().isEmpty(); } - private void checkSubmodules() throws IOException { + private void checkSubmodules() throws IOException, LargeObjectException, + SubmoduleValidationException { ObjectDatabase odb = db.getObjectDatabase(); if (objectChecker == null) { return; @@ -1536,18 +1563,12 @@ public class ReceivePack { AnyObjectId blobId = entry.getBlobId(); ObjectLoader blob = odb.open(blobId, Constants.OBJ_BLOB); - try { - SubmoduleValidator.assertValidGitModulesFile( - new String(blob.getBytes(), UTF_8)); - } catch (LargeObjectException | SubmoduleValidationException e) { - throw new IOException(e); - } + SubmoduleValidator.assertValidGitModulesFile( + new String(blob.getBytes(), UTF_8)); } } private void checkConnectivity() throws IOException { - ObjectIdSubclassMap<ObjectId> baseObjects = null; - ObjectIdSubclassMap<ObjectId> providedObjects = null; ProgressMonitor checking = NullProgressMonitor.INSTANCE; if (sideBand && !quiet) { SideBandProgressMonitor m = new SideBandProgressMonitor(msgOut); @@ -1555,76 +1576,18 @@ public class ReceivePack { checking = m; } - if (checkReferencedIsReachable) { - baseObjects = parser.getBaseObjectIds(); - providedObjects = parser.getNewObjectIds(); - } - parser = null; - - try (ObjectWalk ow = new ObjectWalk(db)) { - if (baseObjects != null) { - ow.sort(RevSort.TOPO); - if (!baseObjects.isEmpty()) - ow.sort(RevSort.BOUNDARY, true); - } - - for (ReceiveCommand cmd : commands) { - if (cmd.getResult() != Result.NOT_ATTEMPTED) - continue; - if (cmd.getType() == ReceiveCommand.Type.DELETE) - continue; - ow.markStart(ow.parseAny(cmd.getNewId())); - } - for (ObjectId have : advertisedHaves) { - RevObject o = ow.parseAny(have); - ow.markUninteresting(o); - - if (baseObjects != null && !baseObjects.isEmpty()) { - o = ow.peel(o); - if (o instanceof RevCommit) - o = ((RevCommit) o).getTree(); - if (o instanceof RevTree) - ow.markUninteresting(o); - } - } - - checking.beginTask(JGitText.get().countingObjects, - ProgressMonitor.UNKNOWN); - RevCommit c; - while ((c = ow.next()) != null) { - checking.update(1); - if (providedObjects != null // - && !c.has(RevFlag.UNINTERESTING) // - && !providedObjects.contains(c)) - throw new MissingObjectException(c, Constants.TYPE_COMMIT); - } - - RevObject o; - while ((o = ow.nextObject()) != null) { - checking.update(1); - if (o.has(RevFlag.UNINTERESTING)) - continue; - - if (providedObjects != null) { - if (providedObjects.contains(o)) - continue; - else - throw new MissingObjectException(o, o.getType()); - } - - if (o instanceof RevBlob && !db.getObjectDatabase().has(o)) - throw new MissingObjectException(o, Constants.TYPE_BLOB); - } - checking.endTask(); + connectivityChecker.checkConnectivity(createConnectivityCheckInfo(), + advertisedHaves, checking); + } - if (baseObjects != null) { - for (ObjectId id : baseObjects) { - o = ow.parseAny(id); - if (!o.has(RevFlag.UNINTERESTING)) - throw new MissingObjectException(o, o.getType()); - } - } - } + private ConnectivityCheckInfo createConnectivityCheckInfo() { + ConnectivityCheckInfo info = new ConnectivityCheckInfo(); + info.setCheckObjects(checkReferencedAreReachable); + info.setCommands(getAllCommands()); + info.setRepository(db); + info.setParser(parser); + info.setWalk(walk); + return info; } /** @@ -1722,16 +1685,16 @@ public class ReceivePack { try { oldObj = walk.parseAny(cmd.getOldId()); } catch (IOException e) { - cmd.setResult(Result.REJECTED_MISSING_OBJECT, - cmd.getOldId().name()); + receiveCommandErrorHandler + .handleOldIdValidationException(cmd, e); continue; } try { newObj = walk.parseAny(cmd.getNewId()); } catch (IOException e) { - cmd.setResult(Result.REJECTED_MISSING_OBJECT, - cmd.getNewId().name()); + receiveCommandErrorHandler + .handleNewIdValidationException(cmd, e); continue; } @@ -1739,16 +1702,14 @@ public class ReceivePack { && newObj instanceof RevCommit) { try { if (walk.isMergedInto((RevCommit) oldObj, - (RevCommit) newObj)) + (RevCommit) newObj)) { cmd.setTypeFastForwardUpdate(); - else - cmd.setType( - ReceiveCommand.Type.UPDATE_NONFASTFORWARD); - } catch (MissingObjectException e) { - cmd.setResult(Result.REJECTED_MISSING_OBJECT, - e.getMessage()); + } else { + cmd.setType(ReceiveCommand.Type.UPDATE_NONFASTFORWARD); + } } catch (IOException e) { - cmd.setResult(Result.REJECTED_OTHER_REASON); + receiveCommandErrorHandler + .handleFastForwardCheckException(cmd, e); } } else { cmd.setType(ReceiveCommand.Type.UPDATE_NONFASTFORWARD); @@ -1827,109 +1788,122 @@ public class ReceivePack { try { batch.setPushCertificate(getPushCertificate()); batch.execute(walk, updating); - } catch (IOException err) { - for (ReceiveCommand cmd : toApply) { - if (cmd.getResult() == Result.NOT_ATTEMPTED) - cmd.reject(err); - } + } catch (IOException e) { + receiveCommandErrorHandler.handleBatchRefUpdateException(toApply, + e); } } /** * Send a status report. * - * @param forClient - * true if this report is for a Git client, false if it is for an - * end-user. * @param unpackError * an error that occurred during unpacking, or {@code null} - * @param out - * the reporter for sending the status strings. * @throws java.io.IOException * an error occurred writing the status report. * @since 5.6 */ - private void sendStatusReport(final boolean forClient, - final Throwable unpackError, final Reporter out) - throws IOException { - if (unpackError != null) { - out.sendString("unpack error " + unpackError.getMessage()); //$NON-NLS-1$ - if (forClient) { - for (ReceiveCommand cmd : commands) { - out.sendString("ng " + cmd.getRefName() //$NON-NLS-1$ - + " n/a (unpacker error)"); //$NON-NLS-1$ + private void sendStatusReport(Throwable unpackError) throws IOException { + Reporter out = new Reporter() { + @Override + void sendString(String s) throws IOException { + if (reportStatus) { + pckOut.writeString(s + "\n"); //$NON-NLS-1$ + } else if (msgOut != null) { + msgOut.write(Constants.encode(s + "\n")); //$NON-NLS-1$ } } - return; - } + }; - if (forClient) - out.sendString("unpack ok"); //$NON-NLS-1$ - for (ReceiveCommand cmd : commands) { - if (cmd.getResult() == Result.OK) { - if (forClient) - out.sendString("ok " + cmd.getRefName()); //$NON-NLS-1$ - continue; + try { + if (unpackError != null) { + out.sendString("unpack error " + unpackError.getMessage()); //$NON-NLS-1$ + if (reportStatus) { + for (ReceiveCommand cmd : commands) { + out.sendString("ng " + cmd.getRefName() //$NON-NLS-1$ + + " n/a (unpacker error)"); //$NON-NLS-1$ + } + } + return; } - final StringBuilder r = new StringBuilder(); - if (forClient) - r.append("ng ").append(cmd.getRefName()).append(" "); //$NON-NLS-1$ //$NON-NLS-2$ - else - r.append(" ! [rejected] ").append(cmd.getRefName()) //$NON-NLS-1$ - .append(" ("); //$NON-NLS-1$ - - switch (cmd.getResult()) { - case NOT_ATTEMPTED: - r.append("server bug; ref not processed"); //$NON-NLS-1$ - break; - - case REJECTED_NOCREATE: - r.append("creation prohibited"); //$NON-NLS-1$ - break; - - case REJECTED_NODELETE: - r.append("deletion prohibited"); //$NON-NLS-1$ - break; - - case REJECTED_NONFASTFORWARD: - r.append("non-fast forward"); //$NON-NLS-1$ - break; - - case REJECTED_CURRENT_BRANCH: - r.append("branch is currently checked out"); //$NON-NLS-1$ - break; - - case REJECTED_MISSING_OBJECT: - if (cmd.getMessage() == null) - r.append("missing object(s)"); //$NON-NLS-1$ - else if (cmd.getMessage() - .length() == Constants.OBJECT_ID_STRING_LENGTH) { - r.append("object "); //$NON-NLS-1$ - r.append(cmd.getMessage()); - r.append(" missing"); //$NON-NLS-1$ - } else - r.append(cmd.getMessage()); - break; - - case REJECTED_OTHER_REASON: - if (cmd.getMessage() == null) - r.append("unspecified reason"); //$NON-NLS-1$ - else - r.append(cmd.getMessage()); - break; - - case LOCK_FAILURE: - r.append("failed to lock"); //$NON-NLS-1$ - break; - - case OK: - // We shouldn't have reached this case (see 'ok' case above). - continue; + if (reportStatus) { + out.sendString("unpack ok"); //$NON-NLS-1$ + } + for (ReceiveCommand cmd : commands) { + if (cmd.getResult() == Result.OK) { + if (reportStatus) { + out.sendString("ok " + cmd.getRefName()); //$NON-NLS-1$ + } + continue; + } + + final StringBuilder r = new StringBuilder(); + if (reportStatus) { + r.append("ng ").append(cmd.getRefName()).append(" "); //$NON-NLS-1$ //$NON-NLS-2$ + } else { + r.append(" ! [rejected] ").append(cmd.getRefName()) //$NON-NLS-1$ + .append(" ("); //$NON-NLS-1$ + } + + switch (cmd.getResult()) { + case NOT_ATTEMPTED: + r.append("server bug; ref not processed"); //$NON-NLS-1$ + break; + + case REJECTED_NOCREATE: + r.append("creation prohibited"); //$NON-NLS-1$ + break; + + case REJECTED_NODELETE: + r.append("deletion prohibited"); //$NON-NLS-1$ + break; + + case REJECTED_NONFASTFORWARD: + r.append("non-fast forward"); //$NON-NLS-1$ + break; + + case REJECTED_CURRENT_BRANCH: + r.append("branch is currently checked out"); //$NON-NLS-1$ + break; + + case REJECTED_MISSING_OBJECT: + if (cmd.getMessage() == null) + r.append("missing object(s)"); //$NON-NLS-1$ + else if (cmd.getMessage() + .length() == Constants.OBJECT_ID_STRING_LENGTH) { + r.append("object "); //$NON-NLS-1$ + r.append(cmd.getMessage()); + r.append(" missing"); //$NON-NLS-1$ + } else + r.append(cmd.getMessage()); + break; + + case REJECTED_OTHER_REASON: + if (cmd.getMessage() == null) + r.append("unspecified reason"); //$NON-NLS-1$ + else + r.append(cmd.getMessage()); + break; + + case LOCK_FAILURE: + r.append("failed to lock"); //$NON-NLS-1$ + break; + + case OK: + // We shouldn't have reached this case (see 'ok' case + // above). + continue; + } + if (!reportStatus) { + r.append(")"); //$NON-NLS-1$ + } + out.sendString(r.toString()); + } + } finally { + if (reportStatus) { + pckOut.end(); } - if (!forClient) - r.append(")"); //$NON-NLS-1$ - out.sendString(r.toString()); } } @@ -2115,6 +2089,15 @@ public class ReceivePack { } /** + * @param unpackErrorHandler + * the unpackErrorHandler to set + * @since 5.7 + */ + public void setUnpackErrorHandler(UnpackErrorHandler unpackErrorHandler) { + this.unpackErrorHandler = unpackErrorHandler; + } + + /** * Set whether this class will report command failures as warning messages * before sending the command results. * @@ -2153,6 +2136,50 @@ public class ReceivePack { init(input, output, messages); try { service(); + } catch (PackProtocolException e) { + fatalError(e.getMessage()); + throw e; + } catch (InputOverLimitIOException e) { + String msg = JGitText.get().tooManyCommands; + fatalError(msg); + throw new PackProtocolException(msg); + } finally { + try { + close(); + } finally { + release(); + } + } + } + + /** + * Execute the receive task on the socket. + * + * <p> + * Same as {@link #receive}, but the exceptions are not reported to the + * client yet. + * + * @param input + * raw input to read client commands and pack data from. Caller + * must ensure the input is buffered, otherwise read performance + * may suffer. + * @param output + * response back to the Git network client. Caller must ensure + * the output is buffered, otherwise write performance may + * suffer. + * @param messages + * secondary "notice" channel to send additional messages out + * through. When run over SSH this should be tied back to the + * standard error channel of the command execution. For most + * other network connections this should be null. + * @throws java.io.IOException + * @since 5.7 + */ + public void receiveWithExceptionPropagation(InputStream input, + OutputStream output, OutputStream messages) throws IOException { + init(input, output, messages); + try { + service(); } finally { try { close(); @@ -2170,21 +2197,24 @@ public class ReceivePack { getAdvertisedOrDefaultRefs(); if (hasError()) return; + recvCommands(); + if (hasCommands()) { - Throwable unpackError = null; - if (needPack()) { - try { - receivePackAndCheckConnectivity(); - } catch (IOException | RuntimeException | Error err) { - unpackError = err; + try (PostReceiveExecutor e = new PostReceiveExecutor()) { + if (needPack()) { + try { + receivePackAndCheckConnectivity(); + } catch (IOException | RuntimeException + | SubmoduleValidationException | Error err) { + unlockPack(); + unpackErrorHandler.handleUnpackException(err); + throw new UnpackException(err); + } } - } - try { - if (unpackError == null) { - boolean atomic = isCapabilityEnabled(CAPABILITY_ATOMIC); - setAtomic(atomic); + try { + setAtomic(isCapabilityEnabled(CAPABILITY_ATOMIC)); validateCommands(); if (atomic && anyRejects()) { @@ -2197,39 +2227,12 @@ public class ReceivePack { failPendingCommands(); } executeCommands(); + } finally { + unlockPack(); } - } finally { - unlockPack(); - } - - if (reportStatus) { - sendStatusReport(true, unpackError, new Reporter() { - @Override - void sendString(String s) throws IOException { - pckOut.writeString(s + "\n"); //$NON-NLS-1$ - } - }); - pckOut.end(); - } else if (msgOut != null) { - sendStatusReport(false, unpackError, new Reporter() { - @Override - void sendString(String s) throws IOException { - msgOut.write(Constants.encode(s + "\n")); //$NON-NLS-1$ - } - }); - } - if (unpackError != null) { - // we already know which exception to throw. Ignore - // potential additional exceptions raised in postReceiveHooks - try { - postReceive.onPostReceive(this, filterCommands(Result.OK)); - } catch (Throwable e) { - // empty - } - throw new UnpackException(unpackError); + sendStatusReport(null); } - postReceive.onPostReceive(this, filterCommands(Result.OK)); autoGc(); } } @@ -2266,4 +2269,19 @@ public class ReceivePack { } return new ReceiveCommand(oldId, newId, name); } + + private class PostReceiveExecutor implements AutoCloseable { + @Override + public void close() { + postReceive.onPostReceive(ReceivePack.this, + filterCommands(Result.OK)); + } + } + + private class DefaultUnpackErrorHandler implements UnpackErrorHandler { + @Override + public void handleUnpackException(Throwable t) throws IOException { + sendStatusReport(t); + } + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java new file mode 100644 index 0000000000..12c9a76214 --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2019, Google LLC 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 + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.transport; + +import java.io.IOException; + +/** + * Exception handler for processing an incoming pack file. + * + * @since 5.7 + */ +public interface UnpackErrorHandler { + /** + * Handle an exception thrown while unpacking the pack file. + * + * @param t + * exception thrown + * @throws IOException + * thrown when failed to write an error back to the client. + */ + void handleUnpackException(Throwable t) throws IOException; +} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java index 5bee1ce9a7..6ee280b81e 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java @@ -85,7 +85,9 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.TreeMap; +import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.eclipse.jgit.annotations.NonNull; import org.eclipse.jgit.annotations.Nullable; @@ -1873,8 +1875,7 @@ public class UploadPack { @Override public void checkWants(UploadPack up, List<ObjectId> wants) throws PackProtocolException, IOException { - checkNotAdvertisedWants(up, wants, - refIdSet(up.getAdvertisedRefs().values())); + checkNotAdvertisedWants(up, wants, up.getAdvertisedRefs().values()); } } @@ -1911,7 +1912,7 @@ public class UploadPack { public void checkWants(UploadPack up, List<ObjectId> wants) throws PackProtocolException, IOException { checkNotAdvertisedWants(up, wants, - refIdSet(up.getRepository().getRefDatabase().getRefs())); + up.getRepository().getRefDatabase().getRefs()); } } @@ -1971,12 +1972,14 @@ public class UploadPack { } private static void checkNotAdvertisedWants(UploadPack up, - List<ObjectId> notAdvertisedWants, Set<ObjectId> reachableFrom) + List<ObjectId> notAdvertisedWants, Collection<Ref> visibleRefs) throws IOException { ObjectReader reader = up.getRevWalk().getObjectReader(); + try (RevWalk walk = new RevWalk(reader)) { walk.setRetainBody(false); + Set<ObjectId> reachableFrom = refIdSet(visibleRefs); // Missing "wants" throw exception here List<RevObject> wantsAsObjs = objectIdsToRevObjects(walk, notAdvertisedWants); @@ -2023,10 +2026,13 @@ public class UploadPack { ReachabilityChecker reachabilityChecker = walk .createReachabilityChecker(); - List<RevCommit> starters = objectIdsToRevCommits(walk, - reachableFrom); + Stream<RevCommit> reachableCommits = importantRefsFirst(visibleRefs) + .map(UploadPack::refToObjectId) + .map(objId -> objectIdToRevCommit(walk, objId)) + .filter(Objects::nonNull); // Ignore missing tips + Optional<RevCommit> unreachable = reachabilityChecker - .areAllReachable(wantsAsCommits, starters); + .areAllReachable(wantsAsCommits, reachableCommits); if (unreachable.isPresent()) { throw new WantNotValidException(unreachable.get()); } @@ -2036,6 +2042,50 @@ public class UploadPack { } } + static Stream<Ref> importantRefsFirst( + Collection<Ref> visibleRefs) { + Predicate<Ref> startsWithRefsHeads = ref -> ref.getName() + .startsWith(Constants.R_HEADS); + Predicate<Ref> startsWithRefsTags = ref -> ref.getName() + .startsWith(Constants.R_TAGS); + Predicate<Ref> allOther = ref -> !startsWithRefsHeads.test(ref) + && !startsWithRefsTags.test(ref); + + return Stream.concat( + visibleRefs.stream().filter(startsWithRefsHeads), + Stream.concat( + visibleRefs.stream().filter(startsWithRefsTags), + visibleRefs.stream().filter(allOther))); + } + + private static ObjectId refToObjectId(Ref ref) { + return ref.getObjectId() != null ? ref.getObjectId() + : ref.getPeeledObjectId(); + } + + /** + * Translate an object id to a RevCommit. + * + * @param walk + * walk on the relevant object storae + * @param objectId + * Object Id + * @return RevCommit instance or null if the object is missing + */ + @Nullable + private static RevCommit objectIdToRevCommit(RevWalk walk, + ObjectId objectId) { + if (objectId == null) { + return null; + } + + try { + return walk.parseCommit(objectId); + } catch (IOException e) { + return null; + } + } + // Resolve the ObjectIds into RevObjects. Any missing object raises an // exception private static List<RevObject> objectIdsToRevObjects(RevWalk walk, @@ -2048,23 +2098,6 @@ public class UploadPack { return result; } - // Get commits from object ids. If the id is not a commit, ignore it. If the - // id doesn't exist, report the missing object in a exception. - private static List<RevCommit> objectIdsToRevCommits(RevWalk walk, - Iterable<ObjectId> objectIds) - throws MissingObjectException, IOException { - List<RevCommit> result = new ArrayList<>(); - for (ObjectId objectId : objectIds) { - try { - result.add(walk.parseCommit(objectId)); - } catch (IncorrectObjectTypeException e) { - continue; - } - } - return result; - } - - private void addCommonBase(RevObject o) { if (!o.has(COMMON)) { o.add(COMMON); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/internal/ConnectivityChecker.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/internal/ConnectivityChecker.java new file mode 100644 index 0000000000..d6efada65b --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/internal/ConnectivityChecker.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2019, Google LLC 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 + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +package org.eclipse.jgit.transport.internal; + +import java.io.IOException; +import java.util.List; +import java.util.Set; + +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ProgressMonitor; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.transport.PackParser; +import org.eclipse.jgit.transport.ReceiveCommand; + +/** + * Checks that a received pack only depends on objects which are reachable from + * a defined set of references. + */ +public interface ConnectivityChecker { + + /** + * Checks connectivity of the commit graph after pack uploading. + * + * @param connectivityCheckInfo + * Input for the connectivity check. + * @param haves + * Set of references known for client. + * @param pm + * Monitor to publish progress to. + * @throws IOException + * an error occurred during connectivity checking. + * + */ + void checkConnectivity(ConnectivityCheckInfo connectivityCheckInfo, + Set<ObjectId> haves, ProgressMonitor pm) + throws IOException; + + /** + * POJO which is used to pass all information which is needed to perform + * connectivity check. + */ + public static class ConnectivityCheckInfo { + private Repository repository; + + private PackParser parser; + + private boolean checkObjects; + + private List<ReceiveCommand> commands; + + private RevWalk walk; + + /** + * @return database we write the stored objects into. + */ + public Repository getRepository() { + return repository; + } + + /** + * @param repository + * set database we write the stored objects into. + */ + public void setRepository(Repository repository) { + this.repository = repository; + } + + /** + * @return the parser used to parse pack. + */ + public PackParser getParser() { + return parser; + } + + /** + * @param parser + * the parser to set + */ + public void setParser(PackParser parser) { + this.parser = parser; + } + + /** + * @return if checker should check objects. + */ + public boolean isCheckObjects() { + return checkObjects; + } + + /** + * @param checkObjects + * set if checker should check referenced objects outside of + * the received pack are reachable. + */ + public void setCheckObjects(boolean checkObjects) { + this.checkObjects = checkObjects; + } + + /** + * @return command received by the current request. + */ + public List<ReceiveCommand> getCommands() { + return commands; + } + + /** + * @param commands + * set command received by the current request. + */ + public void setCommands(List<ReceiveCommand> commands) { + this.commands = commands; + } + + /** + * @param walk + * the walk to parse commits + */ + public void setWalk(RevWalk walk) { + this.walk = walk; + } + + /** + * @return the walk to parse commits + */ + public RevWalk getWalk() { + return walk; + } + } +} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/internal/FullConnectivityChecker.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/internal/FullConnectivityChecker.java new file mode 100644 index 0000000000..4adddf0879 --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/internal/FullConnectivityChecker.java @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2019, Google LLC 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 + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +package org.eclipse.jgit.transport.internal; + +import java.io.IOException; +import java.util.Set; + +import org.eclipse.jgit.errors.MissingObjectException; +import org.eclipse.jgit.internal.JGitText; +import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ObjectIdSubclassMap; +import org.eclipse.jgit.lib.ProgressMonitor; +import org.eclipse.jgit.revwalk.ObjectWalk; +import org.eclipse.jgit.revwalk.RevBlob; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevFlag; +import org.eclipse.jgit.revwalk.RevObject; +import org.eclipse.jgit.revwalk.RevSort; +import org.eclipse.jgit.revwalk.RevTree; +import org.eclipse.jgit.transport.ReceiveCommand; +import org.eclipse.jgit.transport.ReceiveCommand.Result; + +/** + * A connectivity checker that uses the entire reference database to perform + * reachability checks when checking the connectivity of objects. If + * info.isCheckObjects() is set it will also check that objects referenced by + * deltas are either provided or reachable as well. + */ +public final class FullConnectivityChecker implements ConnectivityChecker { + @Override + public void checkConnectivity(ConnectivityCheckInfo connectivityCheckInfo, + Set<ObjectId> haves, ProgressMonitor pm) + throws MissingObjectException, IOException { + pm.beginTask(JGitText.get().countingObjects, + ProgressMonitor.UNKNOWN); + try (ObjectWalk ow = new ObjectWalk(connectivityCheckInfo.getRepository())) { + if (!markStartAndKnownNodes(connectivityCheckInfo, ow, haves, + pm)) { + return; + } + checkCommitTree(connectivityCheckInfo, ow, pm); + checkObjects(connectivityCheckInfo, ow, pm); + } finally { + pm.endTask(); + } + } + + /** + * @param connectivityCheckInfo + * Source for connectivity check. + * @param ow + * Walk which can also check blobs. + * @param haves + * Set of references known for client. + * @param pm + * Monitor to publish progress to. + * @return true if at least one new node was marked. + * @throws IOException + * an error occurred during connectivity checking. + */ + private boolean markStartAndKnownNodes( + ConnectivityCheckInfo connectivityCheckInfo, + ObjectWalk ow, + Set<ObjectId> haves, ProgressMonitor pm) + throws IOException { + boolean markTrees = connectivityCheckInfo + .isCheckObjects() + && !connectivityCheckInfo.getParser().getBaseObjectIds() + .isEmpty(); + if (connectivityCheckInfo.isCheckObjects()) { + ow.sort(RevSort.TOPO); + if (!connectivityCheckInfo.getParser().getBaseObjectIds() + .isEmpty()) { + ow.sort(RevSort.BOUNDARY, true); + } + } + boolean hasInteresting = false; + + for (ReceiveCommand cmd : connectivityCheckInfo.getCommands()) { + if (cmd.getResult() != Result.NOT_ATTEMPTED) { + continue; + } + if (cmd.getType() == ReceiveCommand.Type.DELETE) { + continue; + } + if (haves.contains(cmd.getNewId())) { + continue; + } + ow.markStart(ow.parseAny(cmd.getNewId())); + pm.update(1); + hasInteresting = true; + } + if (!hasInteresting) { + return false; + } + for (ObjectId have : haves) { + RevObject o = ow.parseAny(have); + ow.markUninteresting(o); + pm.update(1); + + if (markTrees) { + o = ow.peel(o); + if (o instanceof RevCommit) { + o = ((RevCommit) o).getTree(); + } + if (o instanceof RevTree) { + ow.markUninteresting(o); + } + } + } + return true; + } + + /** + * @param connectivityCheckInfo + * Source for connectivity check. + * @param ow + * Walk which can also check blobs. + * @param pm + * Monitor to publish progress to. + * @throws IOException + * an error occurred during connectivity checking. + */ + private void checkCommitTree(ConnectivityCheckInfo connectivityCheckInfo, + ObjectWalk ow, + ProgressMonitor pm) throws IOException { + RevCommit c; + ObjectIdSubclassMap<ObjectId> newObjectIds = connectivityCheckInfo + .getParser() + .getNewObjectIds(); + while ((c = ow.next()) != null) { + pm.update(1); + if (connectivityCheckInfo.isCheckObjects() + && !c.has(RevFlag.UNINTERESTING) + && !newObjectIds.contains(c)) { + throw new MissingObjectException(c, Constants.TYPE_COMMIT); + } + } + } + + /** + * @param connectivityCheckInfo + * Source for connectivity check. + * @param ow + * Walk which can also check blobs. + * @param pm + * Monitor to publish progress to. + * @throws IOException + * an error occurred during connectivity checking. + * + */ + private void checkObjects(ConnectivityCheckInfo connectivityCheckInfo, + ObjectWalk ow, + ProgressMonitor pm) throws IOException { + RevObject o; + ObjectIdSubclassMap<ObjectId> newObjectIds = connectivityCheckInfo + .getParser() + .getNewObjectIds(); + + while ((o = ow.nextObject()) != null) { + pm.update(1); + if (o.has(RevFlag.UNINTERESTING)) { + continue; + } + + if (connectivityCheckInfo.isCheckObjects()) { + if (newObjectIds.contains(o)) { + continue; + } + throw new MissingObjectException(o, o.getType()); + + } + + if (o instanceof RevBlob + && !connectivityCheckInfo.getRepository().getObjectDatabase() + .has(o)) { + throw new MissingObjectException(o, Constants.TYPE_BLOB); + } + } + + if (connectivityCheckInfo.isCheckObjects()) { + for (ObjectId id : connectivityCheckInfo.getParser() + .getBaseObjectIds()) { + o = ow.parseAny(id); + if (!o.has(RevFlag.UNINTERESTING)) { + throw new MissingObjectException(o, o.getType()); + } + } + } + } +} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/LfsFactory.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/LfsFactory.java index 96636b7994..85ee095013 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/LfsFactory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/LfsFactory.java @@ -145,7 +145,7 @@ public class LfsFactory { } /** - * Retrieve a pre-push hook to be applied. + * Retrieve a pre-push hook to be applied using the default error stream. * * @param repo * the {@link Repository} the hook is applied to. @@ -159,6 +159,22 @@ public class LfsFactory { } /** + * Retrieve a pre-push hook to be applied. + * + * @param repo + * the {@link Repository} the hook is applied to. + * @param outputStream + * @param errorStream + * @return a {@link PrePushHook} implementation or <code>null</code> + * @since 5.6 + */ + @Nullable + public PrePushHook getPrePushHook(Repository repo, PrintStream outputStream, + PrintStream errorStream) { + return getPrePushHook(repo, outputStream); + } + + /** * Retrieve an {@link LfsInstallCommand} which can be used to enable LFS * support (if available) either per repository or for the user. * @@ -51,7 +51,7 @@ <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> <packaging>pom</packaging> - <version>5.6.0-SNAPSHOT</version> + <version>5.7.0-SNAPSHOT</version> <name>JGit - Parent</name> <url>${jgit-url}</url> @@ -430,7 +430,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> - <version>3.0.0-M2</version> + <version>3.0.0-M3</version> <executions> <execution> <id>enforce-maven</id> @@ -890,7 +890,7 @@ <dependency> <groupId>com.google.errorprone</groupId> <artifactId>error_prone_core</artifactId> - <version>2.3.3</version> + <version>2.3.4</version> </dependency> </dependencies> </plugin> diff --git a/tools/bzl/jmh.bzl b/tools/bzl/jmh.bzl index eee9ed02c6..a51a42cf33 100644 --- a/tools/bzl/jmh.bzl +++ b/tools/bzl/jmh.bzl @@ -41,6 +41,8 @@ # Definitions to run jmh microbenchmarks +load("@rules_java//java:defs.bzl", "java_binary", "java_plugin") + def jmh_java_benchmarks(name, srcs, deps = [], tags = [], plugins = [], **kwargs): """Builds runnable JMH benchmarks. This rule builds a runnable target for one or more JMH benchmarks @@ -48,14 +50,14 @@ def jmh_java_benchmarks(name, srcs, deps = [], tags = [], plugins = [], **kwargs except for main_class. """ plugin_name = "_{}_jmh_annotation_processor".format(name) - native.java_plugin( + java_plugin( name = plugin_name, deps = ["//lib/jmh:jmh"], processor_class = "org.openjdk.jmh.generators.BenchmarkProcessor", visibility = ["//visibility:private"], tags = tags, ) - native.java_binary( + java_binary( name = name, srcs = srcs, main_class = "org.openjdk.jmh.Main", @@ -63,4 +65,4 @@ def jmh_java_benchmarks(name, srcs, deps = [], tags = [], plugins = [], **kwargs plugins = plugins + [plugin_name], tags = tags, **kwargs - )
\ No newline at end of file + ) |