Merge branch 'stable-6.1' into stable-6.2 * stable-6.1: HTTP Smart: set correct HTTP status on error Change-Id: I792d6cdfe9e76a3d2e6d1e01ec1dc96805ed2900
diff --git a/DEPENDENCIES b/DEPENDENCIES index 93fa850..59c456e 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES
@@ -2,7 +2,7 @@ maven/mavencentral/com.google.code.gson/gson/2.8.9, Apache-2.0, approved, CQ23496 maven/mavencentral/com.googlecode.javaewah/JavaEWAH/1.1.13, Apache-2.0, approved, CQ11658 maven/mavencentral/com.jcraft/jsch/0.1.55, BSD-3-Clause, approved, CQ19435 -maven/mavencentral/com.jcraft/jzlib/1.1.1, BSD-2-Clause, approved, CQ6218 +maven/mavencentral/com.jcraft/jzlib/1.1.3, BSD-2-Clause, approved, CQ6218 maven/mavencentral/commons-codec/commons-codec/1.11, Apache-2.0 AND BSD-3-Clause, approved, CQ15971 maven/mavencentral/commons-logging/commons-logging/1.2, Apache-2.0, approved, CQ10162 maven/mavencentral/javax.servlet/javax.servlet-api/4.0.0, , approved, CQ16125 @@ -19,6 +19,8 @@ maven/mavencentral/org.apache.commons/commons-math3/3.2, Apache-2.0, approved, clearlydefined maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0 AND LicenseRef-Public-Domain, approved, CQ23527 maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.14, Apache-2.0, approved, CQ23528 +maven/mavencentral/org.apache.sshd/sshd-common/2.8.0, Apache-2.0 AND ISC, approved, #2349 +maven/mavencentral/org.apache.sshd/sshd-core/2.8.0, Apache-2.0, approved, #2331 maven/mavencentral/org.apache.sshd/sshd-osgi/2.8.0, Apache-2.0, approved, CQ23892 maven/mavencentral/org.apache.sshd/sshd-sftp/2.8.0, Apache-2.0, approved, CQ23893 maven/mavencentral/org.assertj/assertj-core/3.20.2, Apache-2.0, approved, clearlydefined @@ -33,29 +35,29 @@ maven/mavencentral/org.eclipse.jetty/jetty-server/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-servlet/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-util/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant.test/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.archive/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.gpg.bc/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.apache/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.server/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.test/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.http/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.ssh/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server.test/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.test/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm.test/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.agent/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.test/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.jsch/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.test/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ui/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit -maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit/6.1.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant.test/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.archive/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.gpg.bc/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.apache/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.server/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.test/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.http/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.ssh/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server.test/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.test/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm.test/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.agent/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.test/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.jsch/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.test/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ui/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit +maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit/6.2.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit maven/mavencentral/org.hamcrest/hamcrest-core/1.3, BSD-2-Clause, approved, CQ11429 maven/mavencentral/org.mockito/mockito-core/2.23.0, Apache-2.0 AND MIT, approved, #958 maven/mavencentral/org.objenesis/objenesis/2.6, Apache-2.0, approved, CQ15478
diff --git a/WORKSPACE b/WORKSPACE index 040617e..cce1316 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -68,8 +68,8 @@ maven_jar( name = "jzlib", - artifact = "com.jcraft:jzlib:1.1.1", - sha1 = "a1551373315ffc2f96130a0e5704f74e151777ba", + artifact = "com.jcraft:jzlib:1.1.3", + sha1 = "c01428efa717624f7aabf4df319939dda9646b2d", ) maven_jar(
diff --git a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF index 0997570..e4d990c 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 @@ Automatic-Module-Name: org.eclipse.jgit.ant.test Bundle-SymbolicName: org.eclipse.jgit.ant.test Bundle-Vendor: %Bundle-Vendor -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.apache.tools.ant, - org.eclipse.jgit.ant.tasks;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.ant.tasks;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", org.hamcrest.core;version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)"
diff --git a/org.eclipse.jgit.ant.test/pom.xml b/org.eclipse.jgit.ant.test/pom.xml index ba473ef..7247086 100644 --- a/org.eclipse.jgit.ant.test/pom.xml +++ b/org.eclipse.jgit.ant.test/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 6003a31..066da07 100644 --- a/org.eclipse.jgit.ant/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
@@ -3,13 +3,13 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ant Bundle-SymbolicName: org.eclipse.jgit.ant -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.apache.tools.ant, - org.eclipse.jgit.storage.file;version="[6.1.1,6.2.0)" + org.eclipse.jgit.storage.file;version="[6.2.0,6.3.0)" Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor -Export-Package: org.eclipse.jgit.ant;version="6.1.1", - org.eclipse.jgit.ant.tasks;version="6.1.1"; +Export-Package: org.eclipse.jgit.ant;version="6.2.0", + org.eclipse.jgit.ant.tasks;version="6.2.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 d0dc5c8..3cde592 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-Name: org.eclipse.jgit.ant - Sources Bundle-SymbolicName: org.eclipse.jgit.ant.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.ant;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.ant;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ant/pom.xml b/org.eclipse.jgit.ant/pom.xml index a7f258b..75b1717 100644 --- a/org.eclipse.jgit.ant/pom.xml +++ b/org.eclipse.jgit.ant/pom.xml
@@ -15,7 +15,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 3fc8df1..f5125de 100644 --- a/org.eclipse.jgit.archive/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.archive/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.archive Bundle-SymbolicName: org.eclipse.jgit.archive -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 @@ -13,17 +13,17 @@ 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="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.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="6.1.1"; +Export-Package: org.eclipse.jgit.archive;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.api, org.apache.commons.compress.archivers, org.osgi.framework", - org.eclipse.jgit.archive.internal;version="6.1.1";x-internal:=true + org.eclipse.jgit.archive.internal;version="6.2.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 8c7fd07..5dfc659 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-Name: org.eclipse.jgit.archive - Sources Bundle-SymbolicName: org.eclipse.jgit.archive.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.archive;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.archive;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.archive/pom.xml b/org.eclipse.jgit.archive/pom.xml index 12f3e68..e4f2d67 100644 --- a/org.eclipse.jgit.archive/pom.xml +++ b/org.eclipse.jgit.archive/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.archive</artifactId>
diff --git a/org.eclipse.jgit.benchmarks/pom.xml b/org.eclipse.jgit.benchmarks/pom.xml index 0f72f64..c8b0887 100644 --- a/org.eclipse.jgit.benchmarks/pom.xml +++ b/org.eclipse.jgit.benchmarks/pom.xml
@@ -14,7 +14,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.eclipse.jgit</groupId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> <artifactId>org.eclipse.jgit.benchmarks</artifactId> <packaging>jar</packaging>
diff --git a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/GetRefsBenchmark.java b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/GetRefsBenchmark.java new file mode 100644 index 0000000..62627e6 --- /dev/null +++ b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/GetRefsBenchmark.java
@@ -0,0 +1,181 @@ +/* + * Copyright (C) 2021, Luca Milanesio <luca.milanesio@gmail.com> and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.benchmarks; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription; +import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository; +import org.eclipse.jgit.internal.storage.file.FileRepository; +import org.eclipse.jgit.lib.*; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.transport.ReceiveCommand; +import org.eclipse.jgit.util.FS; +import org.eclipse.jgit.util.FileUtils; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.infra.Blackhole; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +import static org.eclipse.jgit.transport.ReceiveCommand.Type.CREATE; +import static org.eclipse.jgit.transport.ReceiveCommand.Type.UPDATE; + +@State(Scope.Thread) +public class GetRefsBenchmark { + + ThreadLocalRandom branchIndex = ThreadLocalRandom.current(); + + @State(Scope.Benchmark) + public static class BenchmarkState { + + @Param({ "true", "false" }) + boolean useRefTable; + + @Param({ "100", "2500", "10000", "50000" }) + int numBranches; + + @Param({ "true", "false" }) + boolean trustFolderStat; + + List<String> branches = new ArrayList<>(numBranches); + + Path testDir; + + Repository repo; + + @Setup + @SuppressWarnings("boxing") + public void setupBenchmark() throws IOException, GitAPIException { + String firstBranch = "firstbranch"; + testDir = Files.createDirectory(Paths.get("testrepos")); + String repoName = "branches-" + numBranches + "-trustFolderStat-" + + trustFolderStat + "-" + refDatabaseType(); + Path workDir = testDir.resolve(repoName); + Path repoPath = workDir.resolve(".git"); + Git git = Git.init().setDirectory(workDir.toFile()).call(); + RevCommit firstCommit = git.commit().setMessage("First commit") + .call(); + git.branchCreate().setName(firstBranch).call(); + + StoredConfig cfg = git.getRepository().getConfig(); + if (useRefTable) { + ((FileRepository) git.getRepository()).convertRefStorage( + ConfigConstants.CONFIG_REF_STORAGE_REFTABLE, false, + false); + } else { + cfg.setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null, + ConfigConstants.CONFIG_KEY_TRUSTFOLDERSTAT, + trustFolderStat); + } + cfg.setInt(ConfigConstants.CONFIG_RECEIVE_SECTION, null, + "maxCommandBytes", Integer.MAX_VALUE); + cfg.save(); + + repo = RepositoryCache.open(RepositoryCache.FileKey + .lenient(repoPath.toFile(), FS.DETECTED)); + + System.out.println("Preparing test"); + System.out.println("- repository: \t\t" + repoPath); + System.out.println("- refDatabase: \t\t" + refDatabaseType()); + System.out.println("- trustFolderStat: \t" + trustFolderStat); + System.out.println("- branches: \t\t" + numBranches); + + BatchRefUpdate u = repo.getRefDatabase().newBatchUpdate(); + + branches = IntStream.range(0, numBranches) + .mapToObj(i -> "branch/" + i % 100 + "/" + i) + .collect(Collectors.toList()); + for (String branch : branches) { + u.addCommand(new ReceiveCommand(ObjectId.zeroId(), + firstCommit.toObjectId(), Constants.R_HEADS + branch, + CREATE)); + } + + System.out.println(); + System.out.print( + String.format("Creating %d branches ... ", numBranches)); + + try (RevWalk rw = new RevWalk(repo)) { + u.execute(rw, new TextProgressMonitor()); + } + System.out.println("DONE"); + } + + private String refDatabaseType() { + return useRefTable ? "reftable" : "refdir"; + } + + @TearDown + public void teardown() throws IOException { + repo.close(); + FileUtils.delete(testDir.toFile(), + FileUtils.RECURSIVE | FileUtils.RETRY); + } + } + + @Benchmark + @BenchmarkMode({ Mode.AverageTime }) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + @Warmup(iterations = 2, time = 100, timeUnit = TimeUnit.MILLISECONDS) + @Measurement(iterations = 2, time = 10, timeUnit = TimeUnit.SECONDS) + public void testGetExactRef(Blackhole blackhole, BenchmarkState state) + throws IOException { + String branchName = state.branches + .get(branchIndex.nextInt(state.numBranches)); + blackhole.consume(state.repo.exactRef(branchName)); + } + + @Benchmark + @BenchmarkMode({ Mode.AverageTime }) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + @Warmup(iterations = 2, time = 100, timeUnit = TimeUnit.MILLISECONDS) + @Measurement(iterations = 2, time = 10, timeUnit = TimeUnit.SECONDS) + public void testGetRefsByPrefix(Blackhole blackhole, BenchmarkState state) + throws IOException { + String branchPrefix = "refs/heads/branch/" + branchIndex.nextInt(100) + + "/"; + blackhole.consume( + state.repo.getRefDatabase().getRefsByPrefix(branchPrefix)); + } + + public static void main(String[] args) throws RunnerException { + Options opt = new OptionsBuilder() + .include(GetRefsBenchmark.class.getSimpleName()) + // .addProfiler(StackProfiler.class) + // .addProfiler(GCProfiler.class) + .forks(1).jvmArgs("-ea").build(); + new Runner(opt).run(); + } +}
diff --git a/org.eclipse.jgit.coverage/pom.xml b/org.eclipse.jgit.coverage/pom.xml index abc37ec..a99e23e 100644 --- a/org.eclipse.jgit.coverage/pom.xml +++ b/org.eclipse.jgit.coverage/pom.xml
@@ -14,7 +14,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> @@ -27,88 +27,88 @@ <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ant</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.archive</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.http.apache</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.http.server</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.lfs</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.lfs.server</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.pgm</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ui</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ssh.apache</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.test</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ant.test</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.http.test</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.pgm.test</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.lfs.test</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.lfs.server.test</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </dependency> </dependencies>
diff --git a/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF index bb9b393..c92fd3e 100644 --- a/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.gpg.bc.test Bundle-SymbolicName: org.eclipse.jgit.gpg.bc.test -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 @@ -12,9 +12,9 @@ org.bouncycastle.openpgp.operator;version="[1.65.0,2.0.0)", org.bouncycastle.openpgp.operator.jcajce;version="[1.65.0,2.0.0)", org.bouncycastle.util.encoders;version="[1.65.0,2.0.0)", - org.eclipse.jgit.gpg.bc.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.gpg.bc.internal.keys;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.sha1;version="[6.1.1,6.2.0)", + org.eclipse.jgit.gpg.bc.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.gpg.bc.internal.keys;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.sha1;version="[6.2.0,6.3.0)", org.hamcrest;version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)", org.junit.runner;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.gpg.bc.test/pom.xml b/org.eclipse.jgit.gpg.bc.test/pom.xml index 9568c68..2556889 100644 --- a/org.eclipse.jgit.gpg.bc.test/pom.xml +++ b/org.eclipse.jgit.gpg.bc.test/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.gpg.bc.test</artifactId>
diff --git a/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF b/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF index 534568d..fb45761 100644 --- a/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
@@ -3,10 +3,10 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.gpg.bc Bundle-SymbolicName: org.eclipse.jgit.gpg.bc;singleton:=true -Fragment-Host: org.eclipse.jgit;bundle-version="[6.1.1,6.2.0)" +Fragment-Host: org.eclipse.jgit;bundle-version="[6.2.0,6.3.0)" Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.bouncycastle.asn1;version="[1.69.0,2.0.0)", org.bouncycastle.asn1.cryptlib;version="[1.69.0,2.0.0)", @@ -29,9 +29,9 @@ org.bouncycastle.util;version="[1.69.0,2.0.0)", org.bouncycastle.util.encoders;version="[1.69.0,2.0.0)", org.bouncycastle.util.io;version="[1.69.0,2.0.0)", - org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", + org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", org.slf4j;version="[1.7.0,2.0.0)" -Export-Package: org.eclipse.jgit.gpg.bc;version="6.1.1", - org.eclipse.jgit.gpg.bc.internal;version="6.1.1";x-friends:="org.eclipse.jgit.gpg.bc.test", - org.eclipse.jgit.gpg.bc.internal.keys;version="6.1.1";x-friends:="org.eclipse.jgit.gpg.bc.test" +Export-Package: org.eclipse.jgit.gpg.bc;version="6.2.0", + org.eclipse.jgit.gpg.bc.internal;version="6.2.0";x-friends:="org.eclipse.jgit.gpg.bc.test", + org.eclipse.jgit.gpg.bc.internal.keys;version="6.2.0";x-friends:="org.eclipse.jgit.gpg.bc.test"
diff --git a/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF index 20e2d01..b62a2a6 100644 --- a/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@ Bundle-Name: org.eclipse.jgit.gpg.bc - Sources Bundle-SymbolicName: org.eclipse.jgit.gpg.bc.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.gpg.bc/pom.xml b/org.eclipse.jgit.gpg.bc/pom.xml index 138f4e8..69465d0 100644 --- a/org.eclipse.jgit.gpg.bc/pom.xml +++ b/org.eclipse.jgit.gpg.bc/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.gpg.bc</artifactId>
diff --git a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF index afcaa78..df60729 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-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.http.apache Bundle-SymbolicName: org.eclipse.jgit.http.apache -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor @@ -25,11 +25,11 @@ org.apache.http.impl.conn;version="[4.4.0,5.0.0)", org.apache.http.params;version="[4.3.0,5.0.0)", org.apache.http.ssl;version="[4.3.0,5.0.0)", - org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)" -Export-Package: org.eclipse.jgit.transport.http.apache;version="6.1.1"; + org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)" +Export-Package: org.eclipse.jgit.transport.http.apache;version="6.2.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 7b8e149..ead7256 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-Name: org.eclipse.jgit.http.apache - Sources Bundle-SymbolicName: org.eclipse.jgit.http.apache.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.apache/pom.xml b/org.eclipse.jgit.http.apache/pom.xml index bd35589..0bd899f 100644 --- a/org.eclipse.jgit.http.apache/pom.xml +++ b/org.eclipse.jgit.http.apache/pom.xml
@@ -15,7 +15,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 4bf66a2..cd7db79 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-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.http.server Bundle-SymbolicName: org.eclipse.jgit.http.server -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor -Export-Package: org.eclipse.jgit.http.server;version="6.1.1", - org.eclipse.jgit.http.server.glue;version="6.1.1"; +Export-Package: org.eclipse.jgit.http.server;version="6.2.0", + org.eclipse.jgit.http.server.glue;version="6.2.0"; uses:="javax.servlet,javax.servlet.http", - org.eclipse.jgit.http.server.resolver;version="6.1.1"; + org.eclipse.jgit.http.server.resolver;version="6.2.0"; uses:="org.eclipse.jgit.transport.resolver, org.eclipse.jgit.lib, org.eclipse.jgit.transport, @@ -18,14 +18,14 @@ Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: javax.servlet;version="[2.5.0,5.0.0)", javax.servlet.http;version="[2.5.0,5.0.0)", - org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.dfs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.transport.parser;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.resolver;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)" + org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.dfs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.transport.parser;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.resolver;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.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 2b47055..b86561a 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-Name: org.eclipse.jgit.http.server - Sources Bundle-SymbolicName: org.eclipse.jgit.http.server.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.server/pom.xml b/org.eclipse.jgit.http.server/pom.xml index 6a788e2..2ea4c6a 100644 --- a/org.eclipse.jgit.http.server/pom.xml +++ b/org.eclipse.jgit.http.server/pom.xml
@@ -19,7 +19,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.http.server</artifactId>
diff --git a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF index 4150bdb..1b8caed 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-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.http.test Bundle-SymbolicName: org.eclipse.jgit.http.test -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 @@ -26,26 +26,26 @@ org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)", org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)", org.eclipse.jetty.util.thread;version="[10.0.0,11.0.0)", - org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.http.server;version="[6.1.1,6.2.0)", - org.eclipse.jgit.http.server.glue;version="[6.1.1,6.2.0)", - org.eclipse.jgit.http.server.resolver;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.dfs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.reftable;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http.apache;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.resolver;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.http.server;version="[6.2.0,6.3.0)", + org.eclipse.jgit.http.server.glue;version="[6.2.0,6.3.0)", + org.eclipse.jgit.http.server.resolver;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.dfs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.reftable;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http.apache;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.resolver;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", org.hamcrest;version="[1.1.0,3.0.0)", org.hamcrest.core;version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.http.test/pom.xml b/org.eclipse.jgit.http.test/pom.xml index 336f43b..7a7b409 100644 --- a/org.eclipse.jgit.http.test/pom.xml +++ b/org.eclipse.jgit.http.test/pom.xml
@@ -18,7 +18,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.http.test</artifactId>
diff --git a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF index d035072..50e814b 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-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.junit.http Bundle-SymbolicName: org.eclipse.jgit.junit.http -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy @@ -21,17 +21,17 @@ org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)", org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)", org.eclipse.jetty.util.ssl;version="[10.0.0,11.0.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.http.server;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.resolver;version="[6.1.1,6.2.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.http.server;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.resolver;version="[6.2.0,6.3.0)", org.junit;version="[4.13,5.0.0)", org.slf4j.helpers;version="[1.7.0,2.0.0)" -Export-Package: org.eclipse.jgit.junit.http;version="6.1.1"; +Export-Package: org.eclipse.jgit.junit.http;version="6.2.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 19142c5..da17142 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-Name: org.eclipse.jgit.junit.http - Sources Bundle-SymbolicName: org.eclipse.jgit.junit.http.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.http/pom.xml b/org.eclipse.jgit.junit.http/pom.xml index d883e03..440a06c 100644 --- a/org.eclipse.jgit.junit.http/pom.xml +++ b/org.eclipse.jgit.junit.http/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 60858d8..8caf93a 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-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.junit.ssh Bundle-SymbolicName: org.eclipse.jgit.junit.ssh -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy @@ -33,16 +33,16 @@ org.apache.sshd.server.subsystem;version="[2.8.0,2.9.0)", org.apache.sshd.sftp;version="[2.8.0,2.9.0)", org.apache.sshd.sftp.server;version="[2.8.0,2.9.0)", - org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", org.junit;version="[4.13,5.0.0)", org.junit.experimental.theories;version="[4.13,5.0.0)", org.slf4j;version="[1.7.0,2.0.0)" -Export-Package: org.eclipse.jgit.junit.ssh;version="6.1.1" +Export-Package: org.eclipse.jgit.junit.ssh;version="6.2.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 41246bc..f6f2c2d 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-Name: org.eclipse.jgit.junit.ssh - Sources Bundle-SymbolicName: org.eclipse.jgit.junit.ssh.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.ssh/pom.xml b/org.eclipse.jgit.junit.ssh/pom.xml index 07d0218..395b14b 100644 --- a/org.eclipse.jgit.junit.ssh/pom.xml +++ b/org.eclipse.jgit.junit.ssh/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 7a3b200..209b232 100644 --- a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
@@ -3,35 +3,35 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.junit Bundle-SymbolicName: org.eclipse.jgit.junit -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-11 -Import-Package: org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.dircache;version="[6.1.1,6.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.pack;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.merge;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="6.1.1", - org.eclipse.jgit.treewalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk.filter;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.io;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.time;version="[6.1.1,6.2.0)", +Import-Package: org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.dircache;version="[6.2.0,6.3.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.pack;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.merge;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="6.2.0", + org.eclipse.jgit.treewalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk.filter;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.io;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.time;version="[6.2.0,6.3.0)", org.junit;version="[4.13,5.0.0)", org.junit.rules;version="[4.13,5.0.0)", org.junit.runner;version="[4.13,5.0.0)", org.junit.runners;version="[4.13,5.0.0)", org.junit.runners.model;version="[4.13,5.0.0)", org.slf4j;version="[1.7.0,2.0.0)" -Export-Package: org.eclipse.jgit.junit;version="6.1.1"; +Export-Package: org.eclipse.jgit.junit;version="6.2.0"; uses:="org.eclipse.jgit.dircache, org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, @@ -44,4 +44,4 @@ org.junit.runners.model, org.junit.runner, org.eclipse.jgit.util.time", - org.eclipse.jgit.junit.time;version="6.1.1";uses:="org.eclipse.jgit.util.time" + org.eclipse.jgit.junit.time;version="6.2.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 25876c7..f1dad6a 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-Name: org.eclipse.jgit.junit - Sources Bundle-SymbolicName: org.eclipse.jgit.junit.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.junit;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.junit;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit/pom.xml b/org.eclipse.jgit.junit/pom.xml index 2c260e2..13bb6a7 100644 --- a/org.eclipse.jgit.junit/pom.xml +++ b/org.eclipse.jgit.junit/pom.xml
@@ -19,7 +19,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 cbb8135..23078bd 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-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.lfs.server.test Bundle-SymbolicName: org.eclipse.jgit.lfs.server.test -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 @@ -26,24 +26,24 @@ org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)", org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)", org.eclipse.jetty.util.thread;version="[10.0.0,11.0.0)", - org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.server;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.server.fs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.test;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk.filter;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.server;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.server.fs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.test;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk.filter;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", org.hamcrest.core;version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)", org.junit.rules;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.lfs.server.test/pom.xml b/org.eclipse.jgit.lfs.server.test/pom.xml index 1bab620..abc5594 100644 --- a/org.eclipse.jgit.lfs.server.test/pom.xml +++ b/org.eclipse.jgit.lfs.server.test/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 cd8bde3..067559f 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-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.lfs.server Bundle-SymbolicName: org.eclipse.jgit.lfs.server -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor -Export-Package: org.eclipse.jgit.lfs.server;version="6.1.1"; +Export-Package: org.eclipse.jgit.lfs.server;version="6.2.0"; uses:="javax.servlet.http, org.eclipse.jgit.lfs.lib", - org.eclipse.jgit.lfs.server.fs;version="6.1.1"; + org.eclipse.jgit.lfs.server.fs;version="6.2.0"; uses:="javax.servlet, javax.servlet.http, org.eclipse.jgit.lfs.server, org.eclipse.jgit.lfs.lib", - org.eclipse.jgit.lfs.server.internal;version="6.1.1";x-internal:=true, - org.eclipse.jgit.lfs.server.s3;version="6.1.1"; + org.eclipse.jgit.lfs.server.internal;version="6.2.0";x-internal:=true, + org.eclipse.jgit.lfs.server.s3;version="6.2.0"; uses:="org.eclipse.jgit.lfs.server, org.eclipse.jgit.lfs.lib" Bundle-RequiredExecutionEnvironment: JavaSE-11 @@ -24,15 +24,15 @@ javax.servlet.annotation;version="[3.1.0,5.0.0)", javax.servlet.http;version="[3.1.0,5.0.0)", org.apache.http;version="[4.3.0,5.0.0)", - org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http.apache;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http.apache;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.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 5a5b23a..a640bf3 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-Name: org.eclipse.jgit.lfs.server - Sources Bundle-SymbolicName: org.eclipse.jgit.lfs.server.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs.server/pom.xml b/org.eclipse.jgit.lfs.server/pom.xml index ae27153..354ed59 100644 --- a/org.eclipse.jgit.lfs.server/pom.xml +++ b/org.eclipse.jgit.lfs.server/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 e3c0af8..19f852b 100644 --- a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
@@ -3,27 +3,27 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.lfs.test Bundle-SymbolicName: org.eclipse.jgit.lfs.test -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 -Import-Package: org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.attributes;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.dfs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk.filter;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", +Import-Package: org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.attributes;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.dfs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk.filter;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", org.hamcrest.core;version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)", org.junit.runner;version="[4.13,5.0.0)", org.junit.runners;version="[4.13,5.0.0)" -Export-Package: org.eclipse.jgit.lfs.test;version="6.1.1";x-friends:="org.eclipse.jgit.lfs.server.test" +Export-Package: org.eclipse.jgit.lfs.test;version="6.2.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 1d782e6..5b401ad 100644 --- a/org.eclipse.jgit.lfs.test/pom.xml +++ b/org.eclipse.jgit.lfs.test/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.lfs.test</artifactId>
diff --git a/org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/LfsConfigGitTest.java b/org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/LfsConfigGitTest.java index 98a0712..3ac4157 100644 --- a/org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/LfsConfigGitTest.java +++ b/org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/LfsConfigGitTest.java
@@ -142,14 +142,6 @@ public void setUp() throws Exception { File gitAttributesFile; private void createLfsFiles(String lfsPointer) throws Exception { - /* - * FileNames ".aaa.txt" and "zzz.txt" seem to be sufficient to get the - * desired checkout order before and after ".lfsconfig", at least in a - * number of manual tries. Since the files to checkout are contained in - * a set (see DirCacheCheckout::doCheckout) the order cannot be - * guaranteed. - */ - //File to be checked out before lfs config String fileNameBefore = ".aaa.txt"; fileBefore = writeTrashFile(fileNameBefore, lfsPointer);
diff --git a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF index 09ffffb..7a9b5b9 100644 --- a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
@@ -3,33 +3,32 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.lfs Bundle-SymbolicName: org.eclipse.jgit.lfs -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor -Export-Package: org.eclipse.jgit.lfs;version="6.1.1", - org.eclipse.jgit.lfs.errors;version="6.1.1", - org.eclipse.jgit.lfs.internal;version="6.1.1";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server", - org.eclipse.jgit.lfs.lib;version="6.1.1" +Export-Package: org.eclipse.jgit.lfs;version="6.2.0", + org.eclipse.jgit.lfs.errors;version="6.2.0", + org.eclipse.jgit.lfs.internal;version="6.2.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="6.2.0" Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: com.google.gson;version="[2.8.2,3.0.0)", com.google.gson.stream;version="[2.8.2,3.0.0)", - org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)";resolution:=optional, - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.attributes;version="[6.1.1,6.2.0)", - org.eclipse.jgit.diff;version="[6.1.1,6.2.0)", - org.eclipse.jgit.dircache;version="[6.1.1,6.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.hooks;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.pack;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk.filter;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.io;version="[6.1.1,6.2.0)", - org.slf4j;version="[1.7.0,2.0.0)" + org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)";resolution:=optional, + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.attributes;version="[6.2.0,6.3.0)", + org.eclipse.jgit.diff;version="[6.2.0,6.3.0)", + org.eclipse.jgit.dircache;version="[6.2.0,6.3.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.hooks;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.pack;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk.filter;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.io;version="[6.2.0,6.3.0)"
diff --git a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF index 7a2a446..2eef821 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-Name: org.eclipse.jgit.lfs - Sources Bundle-SymbolicName: org.eclipse.jgit.lfs.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs/pom.xml b/org.eclipse.jgit.lfs/pom.xml index 949c568..4d2766e 100644 --- a/org.eclipse.jgit.lfs/pom.xml +++ b/org.eclipse.jgit.lfs/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.lfs</artifactId>
diff --git a/org.eclipse.jgit.lfs/resources/org/eclipse/jgit/lfs/internal/LfsText.properties b/org.eclipse.jgit.lfs/resources/org/eclipse/jgit/lfs/internal/LfsText.properties index 642b83d..c4c0dac 100644 --- a/org.eclipse.jgit.lfs/resources/org/eclipse/jgit/lfs/internal/LfsText.properties +++ b/org.eclipse.jgit.lfs/resources/org/eclipse/jgit/lfs/internal/LfsText.properties
@@ -6,14 +6,13 @@ invalidLongId=Invalid id: {0} invalidLongIdLength=Invalid id length {0}; should be {1} lfsFailedToGetRepository=failed to get repository {0} -lfsNoDownloadUrl="Need to download object from LFS server but couldn't determine LFS server URL" +lfsNoDownloadUrl=Need to download object from LFS server but couldn't determine LFS server URL lfsUnauthorized=Not authorized to perform operation {0} on repository {1} lfsUnavailable=LFS is not available for repository {0} -missingLocalObject="Local Object {0} is missing" +missingLocalObject=Local Object {0} is missing protocolError=LFS Protocol Error {0}: {1} repositoryNotFound=Repository {0} not found repositoryReadOnly=Repository {0} is read-only requiredHashFunctionNotAvailable=Required hash function {0} not available. serverFailure=When trying to open a connection to {0} the server responded with an error code. rc={1} -userConfigInvalid="User config file {0} invalid {1}" wrongAmountOfDataReceived=While downloading data from the content server {0} {1} bytes have been received while {2} have been expected \ No newline at end of file
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 ebf46e0..9b3d608 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
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2017, Markus Duft <markus.duft@ssi-schaefer.com> and others + * Copyright (C) 2017, 2022 Markus Duft <markus.duft@ssi-schaefer.com> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -101,8 +101,10 @@ public String call() throws IOException, AbortedByHookException { } HttpConnection api = LfsConnectionFactory.getLfsConnection( getRepository(), METHOD_POST, OPERATION_UPLOAD); - Map<String, LfsPointer> oid2ptr = requestBatchUpload(api, toPush); - uploadContents(api, oid2ptr); + if (!isDryRun()) { + Map<String, LfsPointer> oid2ptr = requestBatchUpload(api, toPush); + uploadContents(api, oid2ptr); + } return EMPTY; }
diff --git a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsConfig.java b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsConfig.java index 71d395c..857ccbe 100644 --- a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsConfig.java +++ b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsConfig.java
@@ -30,21 +30,26 @@ import static org.eclipse.jgit.lib.Constants.HEAD; /** - * Encapsulate access to the .lfsconfig. + * Encapsulate access to the {@code .lfsconfig}. + * <p> + * According to the git lfs documentation the order to find the + * {@code .lfsconfig} file is: + * </p> + * <ol> + * <li>in the root of the working tree</li> + * <li>in the index</li> + * <li>in the HEAD; for bare repositories this is the only place that is + * searched</li> + * </ol> + * <p> + * Values from the {@code .lfsconfig} are used only if not specified in another + * git config file to allow local override without modifiction of a committed + * file. + * </p> * - * According to the document - * https://github.com/git-lfs/git-lfs/blob/main/docs/man/git-lfs-config.5.ronn - * the order to find the .lfsconfig file is: - * - * <pre> - * 1. in the root of the working tree - * 2. in the index - * 3. in the HEAD, for bare repositories this is the only place - * that is searched - * </pre> - * - * Values from the .lfsconfig are used only if not specified in another git - * config file to allow local override without modifiction of a committed file. + * @see <a href= + * "https://github.com/git-lfs/git-lfs/blob/main/docs/man/git-lfs-config.5.ronn">Configuration + * options for git-lfs</a> */ public class LfsConfig { private Repository db; @@ -55,17 +60,30 @@ public class LfsConfig { * * @param db * the associated repo + */ + public LfsConfig(Repository db) { + this.db = db; + } + + /** + * Getter for the delegate to allow lazy initialization. + * + * @return the delegate {@link Config} * @throws IOException */ - public LfsConfig(Repository db) throws IOException { - this.db = db; - delegate = this.load(); + private Config getDelegate() throws IOException { + if (delegate == null) { + delegate = this.load(); + } + return delegate; } /** * Read the .lfsconfig file from the repository * - * @return The loaded lfs config or null if it does not exist + * An empty config is returned be empty if no lfs config exists. + * + * @return The loaded lfs config * * @throws IOException */ @@ -102,7 +120,7 @@ private Config loadFromWorkingTree() throws IOException { File lfsConfig = db.getFS().resolve(db.getWorkTree(), Constants.DOT_LFS_CONFIG); - if (lfsConfig.exists() && lfsConfig.isFile()) { + if (lfsConfig.isFile()) { FileBasedConfig config = new FileBasedConfig(lfsConfig, db.getFS()); try { config.load(); @@ -188,12 +206,14 @@ private Config emptyConfig() { * @param name * the key name * @return a String value from the config, <code>null</code> if not found + * @throws IOException */ + @Nullable public String getString(final String section, final String subsection, - final String name) { + final String name) throws IOException { String result = db.getConfig().getString(section, subsection, name); if (result == null) { - result = delegate.getString(section, subsection, name); + result = getDelegate().getString(section, subsection, name); } return result; }
diff --git a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsText.java b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsText.java index 06234c1..8ef8f59 100644 --- a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsText.java +++ b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsText.java
@@ -44,6 +44,5 @@ public static LfsText get() { /***/ public String repositoryReadOnly; /***/ public String requiredHashFunctionNotAvailable; /***/ public String serverFailure; - /***/ public String userConfigInvalid; /***/ public String wrongAmountOfDataReceived; }
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 cd22e24..2d52eed 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="6.1.1.qualifier" + version="6.2.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 54feb9d..7d591ed 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml index 2061948..cd6746b 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml
@@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit.gpg.bc" label="%featureName" - version="6.1.1.qualifier" + version="6.2.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import plugin="org.eclipse.jgit" version="6.1.1" match="equivalent"/> + <import plugin="org.eclipse.jgit" version="6.2.0" match="equivalent"/> </requires> <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml index 760903e..17ead4e 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 e899ad5..3081201 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="6.1.1.qualifier" + version="6.2.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import plugin="org.eclipse.jgit" version="6.1.1" match="equivalent"/> + <import plugin="org.eclipse.jgit" version="6.2.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 b725dff..cf091c3 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
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 99073e4..9d5839e 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="6.1.1.qualifier" + version="6.2.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="6.1.1" match="equivalent"/> + <import plugin="org.eclipse.jgit" version="6.2.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 3566dbb..938edc8 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
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 c04051b..23159ec 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="6.1.1.qualifier" + version="6.2.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import feature="org.eclipse.jgit" version="6.1.1" match="equivalent"/> + <import feature="org.eclipse.jgit" version="6.2.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 50338a6..b416432 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
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 3939f51..985233b 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="6.1.1.qualifier" + version="6.2.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="6.1.1" match="equivalent"/> - <import feature="org.eclipse.jgit.lfs" version="6.1.1" match="equivalent"/> - <import feature="org.eclipse.jgit.ssh.apache" version="6.1.1" match="equivalent"/> + <import feature="org.eclipse.jgit" version="6.2.0" match="equivalent"/> + <import feature="org.eclipse.jgit.lfs" version="6.2.0" match="equivalent"/> + <import feature="org.eclipse.jgit.ssh.apache" version="6.2.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 4b0e26a..bf8e938 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
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 9ccf39e..b38d113 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 d3e662b..f64898d 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="6.1.1.qualifier" + version="6.2.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import feature="org.eclipse.jgit" version="6.1.1" match="equivalent"/> + <import feature="org.eclipse.jgit" version="6.2.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 d8b5de2..fe36483 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
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId> @@ -30,7 +30,7 @@ <dependency> <groupId>org.eclipse.jgit.feature</groupId> <artifactId>org.eclipse.jgit</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 e039647..503ce01 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="6.1.1.qualifier" + version="6.2.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import feature="org.eclipse.jgit" version="6.1.1" match="equivalent"/> + <import feature="org.eclipse.jgit" version="6.2.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 591b448..ab1f5d3 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
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml index 3df4a92..94485a2 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml
@@ -2,7 +2,7 @@ <feature id="org.eclipse.jgit.ssh.jsch" label="%featureName" - version="6.1.1.qualifier" + version="6.2.0.qualifier" provider-name="%providerName"> <description url="http://www.eclipse.org/jgit/"> @@ -23,7 +23,7 @@ </url> <requires> - <import plugin="org.eclipse.jgit" version="6.1.1" match="equivalent"/> + <import plugin="org.eclipse.jgit" version="6.2.0" match="equivalent"/> </requires> <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml index e461bff..a93c70d 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 5d61eef..a72e385 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 @@ Bundle-ManifestVersion: 2 Bundle-Name: JGit Target Platform Bundle Bundle-SymbolicName: org.eclipse.jgit.target -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target index 4e40232..117ad0a 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.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.17" sequenceNumber="1646256653"> +<target name="jgit-4.17" sequenceNumber="1651525068"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="jakarta.servlet-api" version="4.0.0"/> @@ -27,8 +27,8 @@ <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/> <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> - <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/> - <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/> + <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/> + <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/> <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/> @@ -87,7 +87,7 @@ <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/> <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/> <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/> - <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220302172233/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/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.17.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd index dbb450a..c78908b 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd
@@ -1,7 +1,7 @@ target "jgit-4.17" with source configurePhase include "projects/jetty-10.0.x.tpd" -include "orbit/R20220302172233-2022-03.tpd" +include "orbit/staging-2022-06.tpd" location "https://download.eclipse.org/releases/2020-09/" { org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target index 1628217..adc5aa0 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.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.18" sequenceNumber="1646256653"> +<target name="jgit-4.18" sequenceNumber="1651525068"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="jakarta.servlet-api" version="4.0.0"/> @@ -27,8 +27,8 @@ <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/> <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> - <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/> - <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/> + <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/> + <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/> <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/> @@ -87,7 +87,7 @@ <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/> <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/> <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/> - <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220302172233/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/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.18.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd index 911c67c..bb94110 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd
@@ -1,7 +1,7 @@ target "jgit-4.18" with source configurePhase include "projects/jetty-10.0.x.tpd" -include "orbit/R20220302172233-2022-03.tpd" +include "orbit/staging-2022-06.tpd" location "https://download.eclipse.org/releases/2020-12/" { org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target index ab18f7b..5842995 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.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.19-staging" sequenceNumber="1646256653"> +<target name="jgit-4.19-staging" sequenceNumber="1651525065"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="jakarta.servlet-api" version="4.0.0"/> @@ -27,8 +27,8 @@ <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/> <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> - <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/> - <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/> + <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/> + <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/> <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/> @@ -87,7 +87,7 @@ <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/> <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/> <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/> - <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220302172233/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/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.19.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd index fdb8b11..86d5550 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd
@@ -1,7 +1,7 @@ target "jgit-4.19-staging" with source configurePhase include "projects/jetty-10.0.x.tpd" -include "orbit/R20220302172233-2022-03.tpd" +include "orbit/staging-2022-06.tpd" location "https://download.eclipse.org/staging/2021-03/" { org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target index 4c840dc..f8f7f3c 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.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.20" sequenceNumber="1646256653"> +<target name="jgit-4.20" sequenceNumber="1651525067"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="jakarta.servlet-api" version="4.0.0"/> @@ -27,8 +27,8 @@ <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/> <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> - <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/> - <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/> + <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/> + <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/> <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/> @@ -87,7 +87,7 @@ <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/> <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/> <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/> - <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220302172233/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/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.20.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd index 120ee64..55fc7fb 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd
@@ -1,7 +1,7 @@ target "jgit-4.20" with source configurePhase include "projects/jetty-10.0.x.tpd" -include "orbit/R20220302172233-2022-03.tpd" +include "orbit/staging-2022-06.tpd" location "https://download.eclipse.org/releases/2021-06/" { org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target index 7e8cd91..503f653 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.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.21" sequenceNumber="1646256653"> +<target name="jgit-4.21" sequenceNumber="1651525068"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="jakarta.servlet-api" version="4.0.0"/> @@ -27,8 +27,8 @@ <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/> <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> - <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/> - <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/> + <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/> + <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/> <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/> @@ -87,7 +87,7 @@ <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/> <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/> <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/> - <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220302172233/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/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.21.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd index 0ec2a52..10acb68 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd
@@ -1,7 +1,7 @@ target "jgit-4.21" with source configurePhase include "projects/jetty-10.0.x.tpd" -include "orbit/R20220302172233-2022-03.tpd" +include "orbit/staging-2022-06.tpd" location "https://download.eclipse.org/releases/2021-09/" { org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target index b229da1..c40cde3 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.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.22" sequenceNumber="1646256653"> +<target name="jgit-4.22" sequenceNumber="1651525008"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="jakarta.servlet-api" version="4.0.0"/> @@ -27,8 +27,8 @@ <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/> <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> - <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/> - <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/> + <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/> + <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/> <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/> <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/> @@ -87,7 +87,7 @@ <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/> <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/> <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/> - <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220302172233/repository"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/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.22.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.tpd index eb1723c..9b2533b 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.tpd
@@ -1,7 +1,7 @@ target "jgit-4.22" with source configurePhase include "projects/jetty-10.0.x.tpd" -include "orbit/R20220302172233-2022-03.tpd" +include "orbit/staging-2022-06.tpd" location "https://download.eclipse.org/releases/2021-12/" { org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target new file mode 100644 index 0000000..78456d4 --- /dev/null +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target
@@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<?pde?> +<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> +<target name="jgit-4.23" sequenceNumber="1651531554"> + <locations> + <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> + <unit id="jakarta.servlet-api" version="4.0.0"/> + <unit id="jakarta.servlet-api.source" version="4.0.0"/> + <unit id="org.eclipse.jetty.http" version="10.0.6"/> + <unit id="org.eclipse.jetty.http.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.io" version="10.0.6"/> + <unit id="org.eclipse.jetty.io.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.security" version="10.0.6"/> + <unit id="org.eclipse.jetty.security.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.server" version="10.0.6"/> + <unit id="org.eclipse.jetty.server.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.servlet" version="10.0.6"/> + <unit id="org.eclipse.jetty.servlet.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.util" version="10.0.6"/> + <unit id="org.eclipse.jetty.util.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.util.ajax" version="10.0.6"/> + <unit id="org.eclipse.jetty.util.ajax.source" version="10.0.6"/> + <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/> + </location> + <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> + <unit id="com.google.gson" version="2.8.9.v20220111-1409"/> + <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/> + <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> + <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> + <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/> + <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/> + <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/> + <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/> + <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/> + <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/> + <unit id="javaewah" version="1.1.13.v20211029-0839"/> + <unit id="javaewah.source" version="1.1.13.v20211029-0839"/> + <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/> + <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/> + <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/> + <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> + <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/> + <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/> + <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/> + <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/> + <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> + <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> + <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/> + <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/> + <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/> + <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/> + <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/> + <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/> + <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/> + <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/> + <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/> + <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/> + <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/> + <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/> + <unit id="org.assertj" version="3.20.2.v20210706-1104"/> + <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/> + <unit id="org.bouncycastle.bcpg" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcpg.source" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcpkix" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcprov" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcprov.source" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcutil" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcutil.source" version="1.70.0.v20220105-1522"/> + <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/> + <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/> + <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> + <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> + <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/> + <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/> + <unit id="org.junit" version="4.13.2.v20211018-1956"/> + <unit id="org.junit.source" version="4.13.2.v20211018-1956"/> + <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/> + <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/> + <unit id="org.mockito" version="2.23.0.v20200310-1642"/> + <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/> + <unit id="org.objenesis" version="2.6.0.v20180420-1519"/> + <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/> + <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/> + <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/> + <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/> + <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/> + <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/> + <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/repository"/> + </location> + <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> + <unit id="org.eclipse.osgi" version="0.0.0"/> + <repository location="https://download.eclipse.org/releases/2022-03/"/> + </location> + </locations> +</target>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.tpd new file mode 100644 index 0000000..69c9a11 --- /dev/null +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.tpd
@@ -0,0 +1,8 @@ +target "jgit-4.23" with source configurePhase + +include "projects/jetty-10.0.x.tpd" +include "orbit/staging-2022-06.tpd" + +location "https://download.eclipse.org/releases/2022-03/" { + org.eclipse.osgi lazy +}
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target new file mode 100644 index 0000000..12b5ea8 --- /dev/null +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target
@@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<?pde?> +<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> +<target name="jgit-4.24" sequenceNumber="1651531556"> + <locations> + <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> + <unit id="jakarta.servlet-api" version="4.0.0"/> + <unit id="jakarta.servlet-api.source" version="4.0.0"/> + <unit id="org.eclipse.jetty.http" version="10.0.6"/> + <unit id="org.eclipse.jetty.http.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.io" version="10.0.6"/> + <unit id="org.eclipse.jetty.io.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.security" version="10.0.6"/> + <unit id="org.eclipse.jetty.security.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.server" version="10.0.6"/> + <unit id="org.eclipse.jetty.server.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.servlet" version="10.0.6"/> + <unit id="org.eclipse.jetty.servlet.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.util" version="10.0.6"/> + <unit id="org.eclipse.jetty.util.source" version="10.0.6"/> + <unit id="org.eclipse.jetty.util.ajax" version="10.0.6"/> + <unit id="org.eclipse.jetty.util.ajax.source" version="10.0.6"/> + <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/> + </location> + <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> + <unit id="com.google.gson" version="2.8.9.v20220111-1409"/> + <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/> + <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> + <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> + <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/> + <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/> + <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/> + <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/> + <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/> + <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/> + <unit id="javaewah" version="1.1.13.v20211029-0839"/> + <unit id="javaewah.source" version="1.1.13.v20211029-0839"/> + <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/> + <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/> + <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/> + <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> + <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/> + <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/> + <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/> + <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/> + <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/> + <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/> + <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/> + <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/> + <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/> + <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/> + <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/> + <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/> + <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/> + <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/> + <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/> + <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/> + <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/> + <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/> + <unit id="org.assertj" version="3.20.2.v20210706-1104"/> + <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/> + <unit id="org.bouncycastle.bcpg" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcpg.source" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcpkix" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcpkix.source" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcprov" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcprov.source" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcutil" version="1.70.0.v20220105-1522"/> + <unit id="org.bouncycastle.bcutil.source" version="1.70.0.v20220105-1522"/> + <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/> + <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/> + <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/> + <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/> + <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/> + <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/> + <unit id="org.junit" version="4.13.2.v20211018-1956"/> + <unit id="org.junit.source" version="4.13.2.v20211018-1956"/> + <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/> + <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/> + <unit id="org.mockito" version="2.23.0.v20200310-1642"/> + <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/> + <unit id="org.objenesis" version="2.6.0.v20180420-1519"/> + <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/> + <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/> + <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/> + <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/> + <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/> + <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/> + <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/> + <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/repository"/> + </location> + <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> + <unit id="org.eclipse.osgi" version="0.0.0"/> + <repository location="https://download.eclipse.org/staging/2022-06/"/> + </location> + </locations> +</target>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.tpd new file mode 100644 index 0000000..9b8e6f8 --- /dev/null +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.tpd
@@ -0,0 +1,8 @@ +target "jgit-4.24" with source configurePhase + +include "projects/jetty-10.0.x.tpd" +include "orbit/staging-2022-06.tpd" + +location "https://download.eclipse.org/staging/2022-06/" { + org.eclipse.osgi lazy +}
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/staging-2022-06.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/staging-2022-06.tpd new file mode 100644 index 0000000..9e32ba4 --- /dev/null +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/staging-2022-06.tpd
@@ -0,0 +1,69 @@ +target "staging-2022-06" with source configurePhase +// see https://download.eclipse.org/tools/orbit/downloads/ + +location "https://download.eclipse.org/tools/orbit/downloads/drops/I20220502200629/repository" { + com.google.gson [2.8.9.v20220111-1409,2.8.9.v20220111-1409] + com.google.gson.source [2.8.9.v20220111-1409,2.8.9.v20220111-1409] + 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.3.v20220502-1820,1.1.3.v20220502-1820] + com.jcraft.jzlib.source [1.1.3.v20220502-1820,1.1.3.v20220502-1820] + com.sun.jna [5.8.0.v20210503-0343,5.8.0.v20210503-0343] + com.sun.jna.source [5.8.0.v20210503-0343,5.8.0.v20210503-0343] + com.sun.jna.platform [5.8.0.v20210406-1004,5.8.0.v20210406-1004] + com.sun.jna.platform.source [5.8.0.v20210406-1004,5.8.0.v20210406-1004] + javaewah [1.1.13.v20211029-0839,1.1.13.v20211029-0839] + javaewah.source [1.1.13.v20211029-0839,1.1.13.v20211029-0839] + 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.v20210923-1401,0.3.0.v20210923-1401] + net.i2p.crypto.eddsa.source [0.3.0.v20210923-1401,0.3.0.v20210923-1401] + org.apache.ant [1.10.12.v20211102-1452,1.10.12.v20211102-1452] + org.apache.ant.source [1.10.12.v20211102-1452,1.10.12.v20211102-1452] + org.apache.commons.codec [1.14.0.v20200818-1422,1.14.0.v20200818-1422] + org.apache.commons.codec.source [1.14.0.v20200818-1422,1.14.0.v20200818-1422] + org.apache.commons.compress [1.21.0.v20211103-2100,1.21.0.v20211103-2100] + org.apache.commons.compress.source [1.21.0.v20211103-2100,1.21.0.v20211103-2100] + 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.13.v20210128-2225,4.5.13.v20210128-2225] + org.apache.httpcomponents.httpclient.source [4.5.13.v20210128-2225,4.5.13.v20210128-2225] + org.apache.httpcomponents.httpcore [4.4.15.v20220209-2345,4.4.15.v20220209-2345] + org.apache.httpcomponents.httpcore.source [4.4.15.v20220209-2345,4.4.15.v20220209-2345] + org.apache.sshd.osgi [2.8.0.v20211227-1750,2.8.0.v20211227-1750] + org.apache.sshd.osgi.source [2.8.0.v20211227-1750,2.8.0.v20211227-1750] + org.apache.sshd.sftp [2.8.0.v20211227-1750,2.8.0.v20211227-1750] + org.apache.sshd.sftp.source [2.8.0.v20211227-1750,2.8.0.v20211227-1750] + org.assertj [3.20.2.v20210706-1104,3.20.2.v20210706-1104] + org.assertj.source [3.20.2.v20210706-1104,3.20.2.v20210706-1104] + org.bouncycastle.bcpg [1.70.0.v20220105-1522,1.70.0.v20220105-1522] + org.bouncycastle.bcpg.source [1.70.0.v20220105-1522,1.70.0.v20220105-1522] + org.bouncycastle.bcpkix [1.70.0.v20220105-1522,1.70.0.v20220105-1522] + org.bouncycastle.bcpkix.source [1.70.0.v20220105-1522,1.70.0.v20220105-1522] + org.bouncycastle.bcprov [1.70.0.v20220105-1522,1.70.0.v20220105-1522] + org.bouncycastle.bcprov.source [1.70.0.v20220105-1522,1.70.0.v20220105-1522] + org.bouncycastle.bcutil [1.70.0.v20220105-1522,1.70.0.v20220105-1522] + org.bouncycastle.bcutil.source [1.70.0.v20220105-1522,1.70.0.v20220105-1522] + org.hamcrest [2.2.0.v20210711-0821,2.2.0.v20210711-0821] + org.hamcrest.source [2.2.0.v20210711-0821,2.2.0.v20210711-0821] + 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.13.2.v20211018-1956,4.13.2.v20211018-1956] + org.junit.source [4.13.2.v20211018-1956,4.13.2.v20211018-1956] + 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.v20200310-1642,2.23.0.v20200310-1642] + org.mockito.source [2.23.0.v20200310-1642,2.23.0.v20200310-1642] + 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.30.v20200204-2150,1.7.30.v20200204-2150] + org.slf4j.api.source [1.7.30.v20200204-2150,1.7.30.v20200204-2150] + org.slf4j.binding.simple [1.7.30.v20200204-2150,1.7.30.v20200204-2150] + org.slf4j.binding.simple.source [1.7.30.v20200204-2150,1.7.30.v20200204-2150] + org.tukaani.xz [1.9.0.v20210624-1259,1.9.0.v20210624-1259] + org.tukaani.xz.source [1.9.0.v20210624-1259,1.9.0.v20210624-1259] +}
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 2a95042..2296e95 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
@@ -16,37 +16,10 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.target</artifactId> <packaging>pom</packaging> <name>JGit Target Platform</name> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>build-helper-maven-plugin</artifactId> - <executions> - <execution> - <id>attach-artifacts</id> - <phase>package</phase> - <goals> - <goal>attach-artifact</goal> - </goals> - <configuration> - <artifacts> - <artifact> - <file>${target-platform}.target</file> - <type>target</type> - <classifier>${target-platform}</classifier> - </artifact> - </artifacts> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> </project> \ No newline at end of file
diff --git a/org.eclipse.jgit.packaging/pom.xml b/org.eclipse.jgit.packaging/pom.xml index b650598..bfcfd65 100644 --- a/org.eclipse.jgit.packaging/pom.xml +++ b/org.eclipse.jgit.packaging/pom.xml
@@ -16,14 +16,14 @@ <groupId>org.eclipse.jgit</groupId> <artifactId>jgit.tycho.parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> <packaging>pom</packaging> <name>JGit Tycho Parent</name> <properties> <java.version>11</java.version> - <tycho-version>2.5.0</tycho-version> + <tycho-version>2.6.0</tycho-version> <tycho-extras-version>${tycho-version}</tycho-extras-version> <target-platform>jgit-4.17</target-platform> </properties> @@ -231,12 +231,7 @@ <resolver>p2</resolver> <pomDependencies>consider</pomDependencies> <target> - <artifact> - <groupId>org.eclipse.jgit</groupId> - <artifactId>org.eclipse.jgit.target</artifactId> - <version>${project.version}</version> - <classifier>${target-platform}</classifier> - </artifact> + <file>${project.basedir}/../org.eclipse.jgit.target/${target-platform}.target</file> </target> <environments> <environment>
diff --git a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF index f5c4de4..c1b6ae6 100644 --- a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
@@ -3,31 +3,31 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.pgm.test Bundle-SymbolicName: org.eclipse.jgit.pgm.test -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-11 -Import-Package: org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.diff;version="[6.1.1,6.2.0)", - org.eclipse.jgit.dircache;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.diffmergetool;version="6.1.1", - org.eclipse.jgit.internal.storage.file;version="6.1.1", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.merge;version="[6.1.1,6.2.0)", - org.eclipse.jgit.pgm;version="[6.1.1,6.2.0)", - org.eclipse.jgit.pgm.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.pgm.opt;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.io;version="[6.1.1,6.2.0)", - org.hamcrest.core;bundle-version="[2.2.0,3.0.0)", +Import-Package: org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.diff;version="[6.2.0,6.3.0)", + org.eclipse.jgit.dircache;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.diffmergetool;version="6.2.0", + org.eclipse.jgit.internal.storage.file;version="6.2.0", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.merge;version="[6.2.0,6.3.0)", + org.eclipse.jgit.pgm;version="[6.2.0,6.3.0)", + org.eclipse.jgit.pgm.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.pgm.opt;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.io;version="[6.2.0,6.3.0)", + org.hamcrest.core;bundle-version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)", org.junit.rules;version="[4.13,5.0.0)", org.kohsuke.args4j;version="[2.33.0,3.0.0)"
diff --git a/org.eclipse.jgit.pgm.test/pom.xml b/org.eclipse.jgit.pgm.test/pom.xml index c824788..d26919a 100644 --- a/org.eclipse.jgit.pgm.test/pom.xml +++ b/org.eclipse.jgit.pgm.test/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.pgm.test</artifactId>
diff --git a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF index ed980b5..2ef2cd2 100644 --- a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.pgm Bundle-SymbolicName: org.eclipse.jgit.pgm -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 @@ -14,49 +14,49 @@ org.eclipse.jetty.servlet;version="[10.0.0,11.0.0)", org.eclipse.jetty.util;version="[10.0.0,11.0.0)", org.eclipse.jetty.util.component;version="[10.0.0,11.0.0)", - org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.archive;version="[6.1.1,6.2.0)", - org.eclipse.jgit.awtui;version="[6.1.1,6.2.0)", - org.eclipse.jgit.blame;version="[6.1.1,6.2.0)", - org.eclipse.jgit.diff;version="[6.1.1,6.2.0)", - org.eclipse.jgit.dircache;version="[6.1.1,6.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.gitrepo;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.diffmergetool;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.io;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.pack;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.reftable;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.server;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.server.fs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs.server.s3;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.merge;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.notes;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revplot;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk.filter;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.pack;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http.apache;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.resolver;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.ssh.jsch;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.sshd;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk.filter;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.io;version="[6.1.1,6.2.0)", + org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.archive;version="[6.2.0,6.3.0)", + org.eclipse.jgit.awtui;version="[6.2.0,6.3.0)", + org.eclipse.jgit.blame;version="[6.2.0,6.3.0)", + org.eclipse.jgit.diff;version="[6.2.0,6.3.0)", + org.eclipse.jgit.dircache;version="[6.2.0,6.3.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.gitrepo;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.diffmergetool;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.io;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.pack;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.reftable;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.server;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.server.fs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs.server.s3;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.merge;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.notes;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revplot;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk.filter;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.pack;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http.apache;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.resolver;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.ssh.jsch;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.sshd;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk.filter;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.io;version="[6.2.0,6.3.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="6.1.1"; +Export-Package: org.eclipse.jgit.console;version="6.2.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.util", - org.eclipse.jgit.pgm;version="6.1.1"; + org.eclipse.jgit.pgm;version="6.2.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.util.io, org.eclipse.jgit.awtui, @@ -68,14 +68,14 @@ org.eclipse.jgit.treewalk, org.eclipse.jgit.api, javax.swing", - org.eclipse.jgit.pgm.debug;version="6.1.1"; + org.eclipse.jgit.pgm.debug;version="6.2.0"; uses:="org.eclipse.jgit.util.io, org.eclipse.jgit.pgm, org.eclipse.jetty.servlet", - org.eclipse.jgit.pgm.internal;version="6.1.1"; + org.eclipse.jgit.pgm.internal;version="6.2.0"; x-friends:="org.eclipse.jgit.pgm.test, org.eclipse.jgit.test", - org.eclipse.jgit.pgm.opt;version="6.1.1"; + org.eclipse.jgit.pgm.opt;version="6.2.0"; uses:="org.kohsuke.args4j, org.eclipse.jgit.lib, org.eclipse.jgit.revwalk,
diff --git a/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF index 0a5dd88..fd88286 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-Name: org.eclipse.jgit.pgm - Sources Bundle-SymbolicName: org.eclipse.jgit.pgm.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.pgm/pom.xml b/org.eclipse.jgit.pgm/pom.xml index c189dc7..c06304d 100644 --- a/org.eclipse.jgit.pgm/pom.xml +++ b/org.eclipse.jgit.pgm/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.pgm</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF index 1a5746d..596a8dd 100644 --- a/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
@@ -2,15 +2,15 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.agent;singleton:=true -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor -Fragment-Host: org.eclipse.jgit.ssh.apache;bundle-version="[6.1.1,6.2.0)" +Fragment-Host: org.eclipse.jgit.ssh.apache;bundle-version="[6.2.0,6.3.0)" Bundle-ActivationPolicy: lazy Automatic-Module-Name: org.eclipse.jgit.ssh.apache.agent Bundle-RequiredExecutionEnvironment: JavaSE-11 -Import-Package: org.eclipse.jgit.transport.sshd;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)" +Import-Package: org.eclipse.jgit.transport.sshd;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)" Require-Bundle: com.sun.jna;bundle-version="[5.8.0,6.0.0)", com.sun.jna.platform;bundle-version="[5.8.0,6.0.0)" -Export-Package: org.eclipse.jgit.internal.transport.sshd.agent.connector;version="6.1.1";x-internal:=true +Export-Package: org.eclipse.jgit.internal.transport.sshd.agent.connector;version="6.2.0";x-internal:=true
diff --git a/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF index d06e6b1..57f00a9 100644 --- a/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@ Bundle-Name: org.eclipse.jgit.ssh.apache.agent - Sources Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.agent.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache.agent;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache.agent;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache.agent/pom.xml b/org.eclipse.jgit.ssh.apache.agent/pom.xml index 77b9c95..262b9c6 100644 --- a/org.eclipse.jgit.ssh.apache.agent/pom.xml +++ b/org.eclipse.jgit.ssh.apache.agent/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ssh.apache.agent</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache.agent/src/org/eclipse/jgit/internal/transport/sshd/agent/connector/WinPipeConnector.java b/org.eclipse.jgit.ssh.apache.agent/src/org/eclipse/jgit/internal/transport/sshd/agent/connector/WinPipeConnector.java index 7bad90f..81c6537 100644 --- a/org.eclipse.jgit.ssh.apache.agent/src/org/eclipse/jgit/internal/transport/sshd/agent/connector/WinPipeConnector.java +++ b/org.eclipse.jgit.ssh.apache.agent/src/org/eclipse/jgit/internal/transport/sshd/agent/connector/WinPipeConnector.java
@@ -90,7 +90,7 @@ public boolean connect() throws IOException { file = libs.kernel.CreateFile(pipeName, WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, FILE_SHARE_NONE, null, WinNT.OPEN_EXISTING, FILE_ATTRIBUTE_NONE, null); - if (file == null || file == WinBase.INVALID_HANDLE_VALUE) { + if (file == null || WinBase.INVALID_HANDLE_VALUE.equals(file)) { int errorCode = libs.kernel.GetLastError(); if (errorCode == WinError.ERROR_FILE_NOT_FOUND && CANONICAL_PIPE_NAME.equalsIgnoreCase(pipeName)) {
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 411d43c..794a585 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-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ssh.apache.test Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.test -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 @@ -21,16 +21,16 @@ org.apache.sshd.core;version="[2.8.0,2.9.0)", org.apache.sshd.server;version="[2.8.0,2.9.0)", org.apache.sshd.server.forward;version="[2.8.0,2.9.0)", - org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.transport.sshd.proxy;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit.ssh;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.sshd;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.sshd.agent;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.transport.sshd.proxy;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit.ssh;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.sshd;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.sshd.agent;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", org.hamcrest;version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)", org.junit.experimental.theories;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.ssh.apache.test/pom.xml b/org.eclipse.jgit.ssh.apache.test/pom.xml index 3e98e33..6f9dcac 100644 --- a/org.eclipse.jgit.ssh.apache.test/pom.xml +++ b/org.eclipse.jgit.ssh.apache.test/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java b/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java index 3d7c765..a8fcca7 100644 --- a/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java +++ b/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, 2020 Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -789,4 +789,76 @@ public void testConnectOnlyRsaSha1() throws Exception { session.disconnect(); } } + + private void verifyAuthLog(String message, String first) { + assertTrue(message.contains(System.lineSeparator())); + String[] lines = message.split(System.lineSeparator()); + int pubkeyIndex = -1; + int passwordIndex = -1; + for (int i = 0; i < lines.length; i++) { + String line = lines[i]; + if (i == 0) { + assertTrue(line.contains(first)); + } + if (line.contains("publickey:")) { + if (pubkeyIndex < 0) { + pubkeyIndex = i; + assertTrue(line.contains("/userkey")); + } + } else if (line.contains("password:")) { + if (passwordIndex < 0) { + passwordIndex = i; + assertTrue(line.contains("attempt 1")); + } + } + } + assertTrue(pubkeyIndex > 0 && passwordIndex > 0); + assertTrue(pubkeyIndex < passwordIndex); + } + + @Test + public void testAuthFailureMessageCancel() throws Exception { + File userKey = new File(getTemporaryDirectory(), "userkey"); + copyTestResource("id_ed25519", userKey); + File publicKey = new File(getTemporaryDirectory(), "userkey.pub"); + copyTestResource("id_ed25519.pub", publicKey); + // Don't set this as the user's key; we do want to try with a wrong key. + server.enablePasswordAuthentication(); + TestCredentialsProvider provider = new TestCredentialsProvider( + "wrongpass"); + TransportException e = assertThrows(TransportException.class, + () -> cloneWith("ssh://git/doesntmatter", defaultCloneDir, + provider, // + "Host git", // + "HostName localhost", // + "Port " + testPort, // + "User " + TEST_USER, // + "IdentityFile " + userKey.getAbsolutePath(), // + "PreferredAuthentications publickey,password")); + verifyAuthLog(e.getMessage(), "canceled"); + } + + @Test + public void testAuthFailureMessage() throws Exception { + File userKey = new File(getTemporaryDirectory(), "userkey"); + copyTestResource("id_ed25519", userKey); + File publicKey = new File(getTemporaryDirectory(), "userkey.pub"); + copyTestResource("id_ed25519.pub", publicKey); + // Don't set this as the user's key; we do want to try with a wrong key. + server.enablePasswordAuthentication(); + // Enough passwords not to cancel authentication + TestCredentialsProvider provider = new TestCredentialsProvider( + "wrongpass", "wrongpass", "wrongpass"); + TransportException e = assertThrows(TransportException.class, + () -> cloneWith("ssh://git/doesntmatter", defaultCloneDir, + provider, // + "Host git", // + "HostName localhost", // + "Port " + testPort, // + "User " + TEST_USER, // + "IdentityFile " + userKey.getAbsolutePath(), // + "PreferredAuthentications publickey,password")); + verifyAuthLog(e.getMessage(), "log in"); + } + }
diff --git a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF index 73feaec..041f0ce 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-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-ActivationPolicy: lazy -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 -Export-Package: org.eclipse.jgit.internal.transport.sshd;version="6.1.1";x-internal:=true; +Export-Package: org.eclipse.jgit.internal.transport.sshd;version="6.2.0";x-internal:=true; uses:="org.apache.sshd.client, org.apache.sshd.client.auth, org.apache.sshd.client.auth.keyboard, @@ -23,17 +23,17 @@ org.apache.sshd.common.signature, org.apache.sshd.common.util.buffer, org.eclipse.jgit.transport", - org.eclipse.jgit.internal.transport.sshd.agent;version="6.1.1";x-internal:=true, - org.eclipse.jgit.internal.transport.sshd.auth;version="6.1.1";x-internal:=true, - org.eclipse.jgit.internal.transport.sshd.proxy;version="6.1.1";x-friends:="org.eclipse.jgit.ssh.apache.test", - org.eclipse.jgit.transport.sshd;version="6.1.1"; + org.eclipse.jgit.internal.transport.sshd.agent;version="6.2.0";x-internal:=true, + org.eclipse.jgit.internal.transport.sshd.auth;version="6.2.0";x-internal:=true, + org.eclipse.jgit.internal.transport.sshd.proxy;version="6.2.0";x-friends:="org.eclipse.jgit.ssh.apache.test", + org.eclipse.jgit.transport.sshd;version="6.2.0"; uses:="org.eclipse.jgit.transport, org.apache.sshd.client.config.hosts, org.apache.sshd.common.keyprovider, org.eclipse.jgit.util, org.apache.sshd.client.session, org.apache.sshd.client.keyverifier", - org.eclipse.jgit.transport.sshd.agent;version="6.1.1" + org.eclipse.jgit.transport.sshd.agent;version="6.2.0" Import-Package: net.i2p.crypto.eddsa;version="[0.3.0,0.4.0)", org.apache.sshd.agent;version="[2.8.0,2.9.0)", org.apache.sshd.client;version="[2.8.0,2.9.0)", @@ -86,12 +86,12 @@ org.apache.sshd.sftp;version="[2.8.0,2.9.0)", org.apache.sshd.sftp.client;version="[2.8.0,2.9.0)", org.apache.sshd.sftp.common;version="[2.8.0,2.9.0)", - org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.fnmatch;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.transport.ssh;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.fnmatch;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.transport.ssh;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.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 9fefa6e..76a9fd5 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-Name: org.eclipse.jgit.ssh.apache - Sources Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache/pom.xml b/org.eclipse.jgit.ssh.apache/pom.xml index 674c7a4..106bc38 100644 --- a/org.eclipse.jgit.ssh.apache/pom.xml +++ b/org.eclipse.jgit.ssh.apache/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ssh.apache</artifactId> @@ -50,16 +50,6 @@ <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> <version>${apache-sshd-version}</version> - <exclusions> - <exclusion> - <groupId>org.apache.sshd</groupId> - <artifactId>sshd-core</artifactId> - </exclusion> - <exclusion> - <groupId>org.apache.sshd</groupId> - <artifactId>sshd-common</artifactId> - </exclusion> - </exclusions> </dependency> <dependency>
diff --git a/org.eclipse.jgit.ssh.apache/resources/org/eclipse/jgit/internal/transport/sshd/SshdText.properties b/org.eclipse.jgit.ssh.apache/resources/org/eclipse/jgit/internal/transport/sshd/SshdText.properties index 4f735ba..c676221 100644 --- a/org.eclipse.jgit.ssh.apache/resources/org/eclipse/jgit/internal/transport/sshd/SshdText.properties +++ b/org.eclipse.jgit.ssh.apache/resources/org/eclipse/jgit/internal/transport/sshd/SshdText.properties
@@ -1,5 +1,22 @@ authenticationCanceled=SSH authentication canceled: no password given authenticationOnClosedSession=Authentication canceled: session is already closing or closed +authGssApiAttempt={0}: trying mechanism OID {1} +authGssApiExhausted={0}: no more mechanisms to try +authGssApiFailure={0}: server refused authentication; mechanism {1} +authGssApiNotTried={0}: not tried +authGssApiPartialSuccess={0}: partial success with mechanism OID {1}, continue with authentication methods {2} +authPasswordAttempt={0}: attempt {1} +authPasswordChangeAttempt={0}: attempt {1} with password change +authPasswordExhausted={0}: no more attempts +authPasswordFailure={0}: server refused (wrong password) +authPasswordNotTried={0}: not tried +authPasswordPartialSuccess={0}: partial success, continue with authentication methods {1} +authPubkeyAttempt={0}: trying {1} key {2} with signature type {3} +authPubkeyAttemptAgent={0}: trying {1} key {2} from SSH agent with signature type {3} +authPubkeyExhausted={0}: no more keys to try +authPubkeyFailure={0}: server refused {1} key {2} +authPubkeyNoKeys={0}: no keys to try +authPubkeyPartialSuccess={0}: partial success for {1} key {2}, continue with authentication methods {3} cannotReadPublicKey=Cannot read public key from file {0} closeListenerFailed=Ssh session close listener failed configInvalidPath=Invalid path in ssh config key {0}: {1}
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/AuthenticationLogger.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/AuthenticationLogger.java new file mode 100644 index 0000000..add79b3 --- /dev/null +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/AuthenticationLogger.java
@@ -0,0 +1,238 @@ +/* + * Copyright (C) 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.internal.transport.sshd; + +import static org.eclipse.jgit.internal.transport.sshd.CachingKeyPairProvider.getKeyId; + +import java.security.KeyPair; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.apache.sshd.client.auth.password.PasswordAuthenticationReporter; +import org.apache.sshd.client.auth.password.UserAuthPassword; +import org.apache.sshd.client.auth.pubkey.PublicKeyAuthenticationReporter; +import org.apache.sshd.client.auth.pubkey.UserAuthPublicKey; +import org.apache.sshd.client.session.ClientSession; +import org.apache.sshd.common.config.keys.KeyUtils; + +/** + * Provides a log of authentication attempts for a {@link ClientSession}. + */ +public class AuthenticationLogger { + + private final List<String> messages = new ArrayList<>(); + + // We're interested in this log only in the failure case, so we don't need + // to log authentication success. + + private final PublicKeyAuthenticationReporter pubkeyLogger = new PublicKeyAuthenticationReporter() { + + private boolean hasAttempts; + + @Override + public void signalAuthenticationAttempt(ClientSession session, + String service, KeyPair identity, String signature) + throws Exception { + hasAttempts = true; + String message; + if (identity.getPrivate() == null) { + // SSH agent key + message = MessageFormat.format( + SshdText.get().authPubkeyAttemptAgent, + UserAuthPublicKey.NAME, KeyUtils.getKeyType(identity), + getKeyId(session, identity), signature); + } else { + message = MessageFormat.format( + SshdText.get().authPubkeyAttempt, + UserAuthPublicKey.NAME, KeyUtils.getKeyType(identity), + getKeyId(session, identity), signature); + } + messages.add(message); + } + + @Override + public void signalAuthenticationExhausted(ClientSession session, + String service) throws Exception { + String message; + if (hasAttempts) { + message = MessageFormat.format( + SshdText.get().authPubkeyExhausted, + UserAuthPublicKey.NAME); + } else { + message = MessageFormat.format(SshdText.get().authPubkeyNoKeys, + UserAuthPublicKey.NAME); + } + messages.add(message); + hasAttempts = false; + } + + @Override + public void signalAuthenticationFailure(ClientSession session, + String service, KeyPair identity, boolean partial, + List<String> serverMethods) throws Exception { + String message; + if (partial) { + message = MessageFormat.format( + SshdText.get().authPubkeyPartialSuccess, + UserAuthPublicKey.NAME, KeyUtils.getKeyType(identity), + getKeyId(session, identity), serverMethods); + } else { + message = MessageFormat.format( + SshdText.get().authPubkeyFailure, + UserAuthPublicKey.NAME, KeyUtils.getKeyType(identity), + getKeyId(session, identity)); + } + messages.add(message); + } + }; + + private final PasswordAuthenticationReporter passwordLogger = new PasswordAuthenticationReporter() { + + private int attempts; + + @Override + public void signalAuthenticationAttempt(ClientSession session, + String service, String oldPassword, boolean modified, + String newPassword) throws Exception { + attempts++; + String message; + if (modified) { + message = MessageFormat.format( + SshdText.get().authPasswordChangeAttempt, + UserAuthPassword.NAME, Integer.valueOf(attempts)); + } else { + message = MessageFormat.format( + SshdText.get().authPasswordAttempt, + UserAuthPassword.NAME, Integer.valueOf(attempts)); + } + messages.add(message); + } + + @Override + public void signalAuthenticationExhausted(ClientSession session, + String service) throws Exception { + String message; + if (attempts > 0) { + message = MessageFormat.format( + SshdText.get().authPasswordExhausted, + UserAuthPassword.NAME); + } else { + message = MessageFormat.format( + SshdText.get().authPasswordNotTried, + UserAuthPassword.NAME); + } + messages.add(message); + attempts = 0; + } + + @Override + public void signalAuthenticationFailure(ClientSession session, + String service, String password, boolean partial, + List<String> serverMethods) throws Exception { + String message; + if (partial) { + message = MessageFormat.format( + SshdText.get().authPasswordPartialSuccess, + UserAuthPassword.NAME, serverMethods); + } else { + message = MessageFormat.format( + SshdText.get().authPasswordFailure, + UserAuthPassword.NAME); + } + messages.add(message); + } + }; + + private final GssApiWithMicAuthenticationReporter gssLogger = new GssApiWithMicAuthenticationReporter() { + + private boolean hasAttempts; + + @Override + public void signalAuthenticationAttempt(ClientSession session, + String service, String mechanism) { + hasAttempts = true; + String message = MessageFormat.format( + SshdText.get().authGssApiAttempt, + GssApiWithMicAuthFactory.NAME, mechanism); + messages.add(message); + } + + @Override + public void signalAuthenticationExhausted(ClientSession session, + String service) { + String message; + if (hasAttempts) { + message = MessageFormat.format( + SshdText.get().authGssApiExhausted, + GssApiWithMicAuthFactory.NAME); + } else { + message = MessageFormat.format( + SshdText.get().authGssApiNotTried, + GssApiWithMicAuthFactory.NAME); + } + messages.add(message); + hasAttempts = false; + } + + @Override + public void signalAuthenticationFailure(ClientSession session, + String service, String mechanism, boolean partial, + List<String> serverMethods) { + String message; + if (partial) { + message = MessageFormat.format( + SshdText.get().authGssApiPartialSuccess, + GssApiWithMicAuthFactory.NAME, mechanism, + serverMethods); + } else { + message = MessageFormat.format( + SshdText.get().authGssApiFailure, + GssApiWithMicAuthFactory.NAME, mechanism); + } + messages.add(message); + } + }; + + /** + * Creates a new {@link AuthenticationLogger} and configures the + * {@link ClientSession} to report authentication attempts through this + * instance. + * + * @param session + * to configure + */ + public AuthenticationLogger(ClientSession session) { + session.setPublicKeyAuthenticationReporter(pubkeyLogger); + session.setPasswordAuthenticationReporter(passwordLogger); + session.setAttribute( + GssApiWithMicAuthenticationReporter.GSS_AUTHENTICATION_REPORTER, + gssLogger); + // TODO: keyboard-interactive? sshd 2.8.0 has no callback + // interface for it. + } + + /** + * Retrieves the log messages for the authentication attempts. + * + * @return the messages as an unmodifiable list + */ + public List<String> getLog() { + return Collections.unmodifiableList(messages); + } + + /** + * Drops all previously recorded log messages. + */ + public void clear() { + messages.clear(); + } +}
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/CachingKeyPairProvider.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/CachingKeyPairProvider.java index 79b3637..cbd6a64 100644 --- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/CachingKeyPairProvider.java +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/CachingKeyPairProvider.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -11,6 +11,7 @@ import static java.text.MessageFormat.format; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; @@ -19,18 +20,24 @@ import java.security.InvalidKeyException; import java.security.KeyPair; import java.security.PrivateKey; +import java.security.PublicKey; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.NoSuchElementException; import java.util.concurrent.CancellationException; import javax.security.auth.DestroyFailedException; +import org.apache.sshd.common.AttributeRepository.AttributeKey; +import org.apache.sshd.client.session.ClientSession; import org.apache.sshd.common.NamedResource; import org.apache.sshd.common.config.keys.FilePasswordProvider; +import org.apache.sshd.common.config.keys.KeyUtils; import org.apache.sshd.common.keyprovider.FileKeyPairProvider; import org.apache.sshd.common.session.SessionContext; import org.apache.sshd.common.util.io.resource.IoResource; @@ -43,6 +50,14 @@ public class CachingKeyPairProvider extends FileKeyPairProvider implements Iterable<KeyPair> { + /** + * An attribute set on the {@link SessionContext} recording loaded keys by + * fingerprint. This enables us to provide nicer output by showing key + * paths, if possible. Users can identify key identities used easier by + * filename than by fingerprint. + */ + public static final AttributeKey<Map<String, Path>> KEY_PATHS_BY_FINGERPRINT = new AttributeKey<>(); + private final KeyCache cache; /** @@ -78,6 +93,33 @@ public Iterable<KeyPair> loadKeys(SessionContext session) { return () -> iterator(session); } + static String getKeyId(ClientSession session, KeyPair identity) { + String fingerprint = KeyUtils.getFingerPrint(identity.getPublic()); + Map<String, Path> registered = session + .getAttribute(KEY_PATHS_BY_FINGERPRINT); + if (registered != null) { + Path path = registered.get(fingerprint); + if (path != null) { + Path home = session + .resolveAttribute(JGitSshClient.HOME_DIRECTORY); + if (home != null && path.startsWith(home)) { + try { + path = home.relativize(path); + String pathString = path.toString(); + if (!pathString.isEmpty()) { + return "~" + File.separator + pathString; //$NON-NLS-1$ + } + } catch (IllegalArgumentException e) { + // Cannot be relativized. Ignore, and work with the + // original path + } + } + return path.toString(); + } + } + return fingerprint; + } + private KeyPair loadKey(SessionContext session, Path path) throws IOException, GeneralSecurityException { if (!Files.exists(path)) { @@ -123,13 +165,23 @@ private KeyPair loadKey(SessionContext session, NamedResource resource, SshdText.get().identityFileUnsupportedFormat, path)); } KeyPair result = keys.next(); + PublicKey pk = result.getPublic(); + if (pk != null) { + Map<String, Path> registered = session + .getAttribute(KEY_PATHS_BY_FINGERPRINT); + if (registered == null) { + registered = new HashMap<>(); + session.setAttribute(KEY_PATHS_BY_FINGERPRINT, registered); + } + registered.put(KeyUtils.getFingerPrint(pk), path); + } if (keys.hasNext()) { log.warn(format(SshdText.get().identityFileMultipleKeys, path)); keys.forEachRemaining(k -> { - PrivateKey pk = k.getPrivate(); - if (pk != null) { + PrivateKey priv = k.getPrivate(); + if (priv != null) { try { - pk.destroy(); + priv.destroy(); } catch (DestroyFailedException e) { // Ignore }
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/GssApiWithMicAuthentication.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/GssApiWithMicAuthentication.java index c3cac0c..df01db3 100644 --- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/GssApiWithMicAuthentication.java +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/GssApiWithMicAuthentication.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -18,6 +18,7 @@ import java.net.UnknownHostException; import java.util.Collection; import java.util.Iterator; +import java.util.List; import org.apache.sshd.client.auth.AbstractUserAuth; import org.apache.sshd.client.session.ClientSession; @@ -71,7 +72,10 @@ protected boolean sendAuthDataRequest(ClientSession session, String service) if (context != null) { close(false); } + GssApiWithMicAuthenticationReporter reporter = session.getAttribute( + GssApiWithMicAuthenticationReporter.GSS_AUTHENTICATION_REPORTER); if (!nextMechanism.hasNext()) { + reporter.signalAuthenticationExhausted(session, service); return false; } state = ProtocolState.STARTED; @@ -79,6 +83,7 @@ protected boolean sendAuthDataRequest(ClientSession session, String service) // RFC 4462 states that SPNEGO must not be used with ssh while (GssApiMechanisms.SPNEGO.equals(currentMechanism)) { if (!nextMechanism.hasNext()) { + reporter.signalAuthenticationExhausted(session, service); return false; } currentMechanism = nextMechanism.next(); @@ -102,6 +107,10 @@ protected boolean sendAuthDataRequest(ClientSession session, String service) state = ProtocolState.FAILED; return false; } + if (reporter != null) { + reporter.signalAuthenticationAttempt(session, service, + currentMechanism.toString()); + } Buffer buffer = session .createBuffer(SshConstants.SSH_MSG_USERAUTH_REQUEST); buffer.putString(session.getUsername()); @@ -246,4 +255,26 @@ private boolean unexpectedMessage(int command) { return false; } + @Override + public void signalAuthMethodSuccess(ClientSession session, String service, + Buffer buffer) throws Exception { + GssApiWithMicAuthenticationReporter reporter = session.getAttribute( + GssApiWithMicAuthenticationReporter.GSS_AUTHENTICATION_REPORTER); + if (reporter != null) { + reporter.signalAuthenticationSuccess(session, service, + currentMechanism.toString()); + } + } + + @Override + public void signalAuthMethodFailure(ClientSession session, String service, + boolean partial, List<String> serverMethods, Buffer buffer) + throws Exception { + GssApiWithMicAuthenticationReporter reporter = session.getAttribute( + GssApiWithMicAuthenticationReporter.GSS_AUTHENTICATION_REPORTER); + if (reporter != null) { + reporter.signalAuthenticationFailure(session, service, + currentMechanism.toString(), partial, serverMethods); + } + } }
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/GssApiWithMicAuthenticationReporter.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/GssApiWithMicAuthenticationReporter.java new file mode 100644 index 0000000..201a131 --- /dev/null +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/GssApiWithMicAuthenticationReporter.java
@@ -0,0 +1,93 @@ +/* + * Copyright (C) 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.internal.transport.sshd; + +import java.util.List; + +import org.apache.sshd.client.session.ClientSession; +import org.apache.sshd.common.AttributeRepository.AttributeKey; + +/** + * Callback interface for recording authentication state in + * {@link GssApiWithMicAuthentication}. + */ +public interface GssApiWithMicAuthenticationReporter { + + /** + * An {@link AttributeKey} for a {@link ClientSession} holding the + * {@link GssApiWithMicAuthenticationReporter}. + */ + static final AttributeKey<GssApiWithMicAuthenticationReporter> GSS_AUTHENTICATION_REPORTER = new AttributeKey<>(); + + /** + * Called when a new authentication attempt is made. + * + * @param session + * the {@link ClientSession} + * @param service + * the name of the requesting SSH service name + * @param mechanism + * the OID of the mechanism used + */ + default void signalAuthenticationAttempt(ClientSession session, + String service, String mechanism) { + // nothing + } + + /** + * Called when there are no more mechanisms to try. + * + * @param session + * the {@link ClientSession} + * @param service + * the name of the requesting SSH service name + */ + default void signalAuthenticationExhausted(ClientSession session, + String service) { + // nothing + } + + /** + * Called when authentication was succeessful. + * + * @param session + * the {@link ClientSession} + * @param service + * the name of the requesting SSH service name + * @param mechanism + * the OID of the mechanism used + */ + default void signalAuthenticationSuccess(ClientSession session, + String service, String mechanism) { + // nothing + } + + /** + * Called when the authentication was not successful. + * + * @param session + * the {@link ClientSession} + * @param service + * the name of the requesting SSH service name + * @param mechanism + * the OID of the mechanism used + * @param partial + * {@code true} if authentication was partially successful, + * meaning one continues with additional authentication methods + * given by {@code serverMethods} + * @param serverMethods + * the {@link List} of authentication methods that can continue + */ + default void signalAuthenticationFailure(ClientSession session, + String service, String mechanism, boolean partial, + List<String> serverMethods) { + // nothing + } +}
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPasswordAuthentication.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPasswordAuthentication.java index ff8caaa..33c3c60 100644 --- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPasswordAuthentication.java +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPasswordAuthentication.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -11,13 +11,11 @@ import static org.apache.sshd.core.CoreModuleProperties.PASSWORD_PROMPTS; -import org.apache.sshd.client.auth.keyboard.UserInteraction; import org.apache.sshd.client.auth.password.UserAuthPassword; import org.apache.sshd.client.session.ClientSession; /** - * A password authentication handler that uses the {@link JGitUserInteraction} - * to ask the user for the password. It also respects the + * A password authentication handler that respects the * {@code NumberOfPasswordPrompts} ssh config. */ public class JGitPasswordAuthentication extends UserAuthPassword { @@ -35,30 +33,11 @@ public void init(ClientSession session, String service) throws Exception { } @Override - protected boolean sendAuthDataRequest(ClientSession session, String service) - throws Exception { + protected String resolveAttemptedPassword(ClientSession session, + String service) throws Exception { if (++attempts > maxAttempts) { - return false; + return null; } - UserInteraction interaction = session.getUserInteraction(); - if (!interaction.isInteractionAllowed(session)) { - return false; - } - String password = getPassword(session, interaction); - if (password == null) { - throw new AuthenticationCanceledException(); - } - // sendPassword takes a buffer as first argument, but actually doesn't - // use it and creates its own buffer... - sendPassword(null, session, password, password); - return true; - } - - private String getPassword(ClientSession session, - UserInteraction interaction) { - String[] results = interaction.interactive(session, null, null, "", //$NON-NLS-1$ - new String[] { SshdText.get().passwordPrompt }, - new boolean[] { false }); - return (results == null || results.length == 0) ? null : results[0]; + return super.resolveAttemptedPassword(session, service); } }
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java index 71e8e61..72f0bdb 100644 --- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -87,6 +87,11 @@ public class JGitSshClient extends SshClient { public static final AttributeKey<String> PREFERRED_AUTHENTICATIONS = new AttributeKey<>(); /** + * An attribute key for the home directory. + */ + public static final AttributeKey<Path> HOME_DIRECTORY = new AttributeKey<>(); + + /** * An attribute key for storing an alternate local address to connect to if * a local forward from a ProxyJump ssh config is present. If set, * {@link #connect(HostConfigEntry, AttributeRepository, SocketAddress)}
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitUserInteraction.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitUserInteraction.java index c51a75b..2a725ea 100644 --- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitUserInteraction.java +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitUserInteraction.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -120,15 +120,16 @@ public boolean isInteractionAllowed(ClientSession session) { return null; }).filter(s -> s != null).toArray(String[]::new); } - // TODO What to throw to abort the connection/authentication process? - // In UserAuthKeyboardInteractive.getUserResponses() it's clear that - // returning null is valid and signifies "an error"; we'll try the - // next authentication method. But if the user explicitly canceled, - // then we don't want to try the next methods... - // - // Probably not a serious issue with the typical order of public-key, - // keyboard-interactive, password. - return null; + throw new AuthenticationCanceledException(); + } + + @Override + public String resolveAuthPasswordAttempt(ClientSession session) + throws Exception { + String[] results = interactive(session, null, null, "", //$NON-NLS-1$ + new String[] { SshdText.get().passwordPrompt }, + new boolean[] { false }); + return (results == null || results.length == 0) ? null : results[0]; } @Override
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/SshdText.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/SshdText.java index 19ad85c..39332d9 100644 --- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/SshdText.java +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/SshdText.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -29,6 +29,23 @@ public static SshdText get() { // @formatter:off /***/ public String authenticationCanceled; /***/ public String authenticationOnClosedSession; + /***/ public String authGssApiAttempt; + /***/ public String authGssApiExhausted; + /***/ public String authGssApiFailure; + /***/ public String authGssApiNotTried; + /***/ public String authGssApiPartialSuccess; + /***/ public String authPasswordAttempt; + /***/ public String authPasswordChangeAttempt; + /***/ public String authPasswordExhausted; + /***/ public String authPasswordFailure; + /***/ public String authPasswordNotTried; + /***/ public String authPasswordPartialSuccess; + /***/ public String authPubkeyAttempt; + /***/ public String authPubkeyAttemptAgent; + /***/ public String authPubkeyExhausted; + /***/ public String authPubkeyFailure; + /***/ public String authPubkeyNoKeys; + /***/ public String authPubkeyPartialSuccess; /***/ public String closeListenerFailed; /***/ public String cannotReadPublicKey; /***/ public String configInvalidPath;
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSession.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSession.java index b742f5e..b94ccc6 100644 --- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSession.java +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSession.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -52,6 +52,8 @@ import org.eclipse.jgit.annotations.NonNull; import org.eclipse.jgit.errors.TransportException; import org.eclipse.jgit.internal.transport.ssh.OpenSshConfigFile; +import org.eclipse.jgit.internal.transport.sshd.AuthenticationCanceledException; +import org.eclipse.jgit.internal.transport.sshd.AuthenticationLogger; import org.eclipse.jgit.internal.transport.sshd.JGitSshClient; import org.eclipse.jgit.internal.transport.sshd.SshdText; import org.eclipse.jgit.transport.FtpChannel; @@ -119,6 +121,7 @@ private ClientSession connect(URIish target, List<URIish> jumps, ClientSession resultSession = null; ClientSession proxySession = null; PortForwardingTracker portForward = null; + AuthenticationLogger authLog = null; try { if (!hops.isEmpty()) { URIish hop = hops.remove(0); @@ -165,6 +168,7 @@ private ClientSession connect(URIish target, List<URIish> jumps, resultSession.addCloseFutureListener(listener); } // Authentication timeout is by default 2 minutes. + authLog = new AuthenticationLogger(resultSession); resultSession.auth().verify(resultSession.getAuthTimeout()); return resultSession; } catch (IOException e) { @@ -173,17 +177,34 @@ private ClientSession connect(URIish target, List<URIish> jumps, close(resultSession, e); if (e instanceof SshException && ((SshException) e) .getDisconnectCode() == SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE) { - // Ensure the user gets to know on which URI the authentication - // was denied. + String message = format(SshdText.get().loginDenied, host, + Integer.toString(port)); throw new TransportException(target, - format(SshdText.get().loginDenied, host, - Integer.toString(port)), - e); + withAuthLog(message, authLog), e); + } else if (e instanceof SshException && e + .getCause() instanceof AuthenticationCanceledException) { + String message = e.getCause().getMessage(); + throw new TransportException(target, + withAuthLog(message, authLog), e.getCause()); } throw e; + } finally { + if (authLog != null) { + authLog.clear(); + } } } + private String withAuthLog(String message, AuthenticationLogger authLog) { + if (authLog != null) { + String log = String.join(System.lineSeparator(), authLog.getLog()); + if (!log.isEmpty()) { + return message + System.lineSeparator() + log; + } + } + return message; + } + private ClientSession connect(HostConfigEntry config, AttributeRepository context, Duration timeout) throws IOException {
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSessionFactory.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSessionFactory.java index 58cf8e1..c792c18 100644 --- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSessionFactory.java +++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSessionFactory.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, 2021 Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2018, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -13,6 +13,7 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.InvalidPathException; import java.nio.file.Path; import java.security.KeyPair; import java.time.Duration; @@ -34,7 +35,6 @@ import org.apache.sshd.client.auth.keyboard.UserAuthKeyboardInteractiveFactory; import org.apache.sshd.client.config.hosts.HostConfigEntryResolver; import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.SshException; import org.apache.sshd.common.compression.BuiltinCompressions; import org.apache.sshd.common.config.keys.FilePasswordProvider; import org.apache.sshd.common.config.keys.loader.openssh.kdf.BCryptKdfOptions; @@ -44,7 +44,6 @@ import org.eclipse.jgit.annotations.NonNull; import org.eclipse.jgit.errors.TransportException; import org.eclipse.jgit.internal.transport.ssh.OpenSshConfigFile; -import org.eclipse.jgit.internal.transport.sshd.AuthenticationCanceledException; import org.eclipse.jgit.internal.transport.sshd.CachingKeyPairProvider; import org.eclipse.jgit.internal.transport.sshd.GssApiWithMicAuthFactory; import org.eclipse.jgit.internal.transport.sshd.JGitPasswordAuthFactory; @@ -243,6 +242,12 @@ public SshdSession getSession(URIish uri, JGitSshClient.PREFERRED_AUTHENTICATIONS, defaultAuths); } + try { + jgitClient.setAttribute(JGitSshClient.HOME_DIRECTORY, + home.getAbsoluteFile().toPath()); + } catch (SecurityException | InvalidPathException e) { + // Ignore + } // Other things? return client; }); @@ -255,13 +260,7 @@ public SshdSession getSession(URIish uri, if (e instanceof TransportException) { throw (TransportException) e; } - Throwable cause = e; - if (e instanceof SshException && e - .getCause() instanceof AuthenticationCanceledException) { - // Results in a nicer error message - cause = e.getCause(); - } - throw new TransportException(uri, cause.getMessage(), cause); + throw new TransportException(uri, e.getMessage(), e); } }
diff --git a/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF index 4a08940..f48b926 100644 --- a/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
@@ -3,18 +3,18 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ssh.jsch.test Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.test -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: com.jcraft.jsch;version="[0.1.54,0.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit.ssh;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.ssh.jsch;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit.ssh;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.ssh.jsch;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", org.hamcrest;version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)", org.junit.experimental.theories;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.ssh.jsch.test/pom.xml b/org.eclipse.jgit.ssh.jsch.test/pom.xml index ca1e742..9a3a847 100644 --- a/org.eclipse.jgit.ssh.jsch.test/pom.xml +++ b/org.eclipse.jgit.ssh.jsch.test/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ssh.jsch.test</artifactId>
diff --git a/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF index 332d981..4238239 100644 --- a/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
@@ -3,19 +3,19 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ssh.jsch Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch;singleton:=true -Fragment-Host: org.eclipse.jgit;bundle-version="[6.1.1,6.2.0)" +Fragment-Host: org.eclipse.jgit;bundle-version="[6.2.0,6.3.0)" Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-ActivationPolicy: lazy -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 -Export-Package: org.eclipse.jgit.transport.ssh.jsch;version="6.1.1" +Export-Package: org.eclipse.jgit.transport.ssh.jsch;version="6.2.0" Import-Package: com.jcraft.jsch;version="[0.1.37,0.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.transport.ssh;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.io;version="[6.1.1,6.2.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.transport.ssh;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.io;version="[6.2.0,6.3.0)", org.slf4j;version="[1.7.0,2.0.0)"
diff --git a/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF index b56bb7c..edb6b19 100644 --- a/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@ Bundle-Name: org.eclipse.jgit.ssh.jsch - Sources Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.jsch/pom.xml b/org.eclipse.jgit.ssh.jsch/pom.xml index 3b6d66c..1ff971f 100644 --- a/org.eclipse.jgit.ssh.jsch/pom.xml +++ b/org.eclipse.jgit.ssh.jsch/pom.xml
@@ -17,7 +17,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ssh.jsch</artifactId>
diff --git a/org.eclipse.jgit.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.test/META-INF/MANIFEST.MF index 581395d..85d93a9 100644 --- a/org.eclipse.jgit.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.test Bundle-SymbolicName: org.eclipse.jgit.test -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Bundle-RequiredExecutionEnvironment: JavaSE-11 @@ -16,61 +16,61 @@ 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.assertj.core.api;version="[3.14.0,4.0.0)", - org.eclipse.jgit.annotations;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api;version="[6.1.1,6.2.0)", - org.eclipse.jgit.api.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.archive;version="[6.1.1,6.2.0)", - org.eclipse.jgit.attributes;version="[6.1.1,6.2.0)", - org.eclipse.jgit.awtui;version="[6.1.1,6.2.0)", - org.eclipse.jgit.blame;version="[6.1.1,6.2.0)", - org.eclipse.jgit.diff;version="[6.1.1,6.2.0)", - org.eclipse.jgit.dircache;version="[6.1.1,6.2.0)", - org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.events;version="[6.1.1,6.2.0)", - org.eclipse.jgit.fnmatch;version="[6.1.1,6.2.0)", - org.eclipse.jgit.gitrepo;version="[6.1.1,6.2.0)", - org.eclipse.jgit.hooks;version="[6.1.1,6.2.0)", - org.eclipse.jgit.ignore;version="[6.1.1,6.2.0)", - org.eclipse.jgit.ignore.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.diffmergetool;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.fsck;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.dfs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.io;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.pack;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.storage.reftable;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.transport.connectivity;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.transport.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.transport.parser;version="[6.1.1,6.2.0)", - org.eclipse.jgit.internal.transport.ssh;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit;version="[6.1.1,6.2.0)", - org.eclipse.jgit.junit.time;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lfs;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.logging;version="[6.1.1,6.2.0)", - org.eclipse.jgit.merge;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.notes;version="[6.1.1,6.2.0)", - org.eclipse.jgit.patch;version="[6.1.1,6.2.0)", - org.eclipse.jgit.pgm;version="[6.1.1,6.2.0)", - org.eclipse.jgit.pgm.internal;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revplot;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk.filter;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.file;version="[6.1.1,6.2.0)", - org.eclipse.jgit.storage.pack;version="[6.1.1,6.2.0)", - org.eclipse.jgit.submodule;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.http;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport.resolver;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.treewalk.filter;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.io;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util.sha1;version="[6.1.1,6.2.0)", + org.eclipse.jgit.annotations;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api;version="[6.2.0,6.3.0)", + org.eclipse.jgit.api.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.archive;version="[6.2.0,6.3.0)", + org.eclipse.jgit.attributes;version="[6.2.0,6.3.0)", + org.eclipse.jgit.awtui;version="[6.2.0,6.3.0)", + org.eclipse.jgit.blame;version="[6.2.0,6.3.0)", + org.eclipse.jgit.diff;version="[6.2.0,6.3.0)", + org.eclipse.jgit.dircache;version="[6.2.0,6.3.0)", + org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.events;version="[6.2.0,6.3.0)", + org.eclipse.jgit.fnmatch;version="[6.2.0,6.3.0)", + org.eclipse.jgit.gitrepo;version="[6.2.0,6.3.0)", + org.eclipse.jgit.hooks;version="[6.2.0,6.3.0)", + org.eclipse.jgit.ignore;version="[6.2.0,6.3.0)", + org.eclipse.jgit.ignore.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.diffmergetool;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.fsck;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.dfs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.io;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.pack;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.storage.reftable;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.transport.connectivity;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.transport.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.transport.parser;version="[6.2.0,6.3.0)", + org.eclipse.jgit.internal.transport.ssh;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit;version="[6.2.0,6.3.0)", + org.eclipse.jgit.junit.time;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lfs;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.logging;version="[6.2.0,6.3.0)", + org.eclipse.jgit.merge;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.notes;version="[6.2.0,6.3.0)", + org.eclipse.jgit.patch;version="[6.2.0,6.3.0)", + org.eclipse.jgit.pgm;version="[6.2.0,6.3.0)", + org.eclipse.jgit.pgm.internal;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revplot;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk.filter;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.file;version="[6.2.0,6.3.0)", + org.eclipse.jgit.storage.pack;version="[6.2.0,6.3.0)", + org.eclipse.jgit.submodule;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.http;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport.resolver;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.treewalk.filter;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.io;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util.sha1;version="[6.2.0,6.3.0)", org.hamcrest;version="[1.1.0,3.0.0)", org.hamcrest.collection;version="[1.1.0,3.0.0)", org.junit;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.test/pom.xml b/org.eclipse.jgit.test/pom.xml index 6b66919..0d1e545 100644 --- a/org.eclipse.jgit.test/pom.xml +++ b/org.eclipse.jgit.test/pom.xml
@@ -19,7 +19,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.test</artifactId>
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/FetchCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/FetchCommandTest.java index 6479d15..0884d72 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/FetchCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/FetchCommandTest.java
@@ -96,6 +96,53 @@ public void testForcedFetch() throws Exception { } @Test + public void testFetchSimpleNegativeRefSpec() throws Exception { + remoteGit.commit().setMessage("commit").call(); + + FetchResult res = git.fetch().setRemote("test") + .setRefSpecs("refs/heads/master:refs/heads/test", + "^:refs/heads/test") + .call(); + assertNull(res.getTrackingRefUpdate("refs/heads/test")); + + res = git.fetch().setRemote("test") + .setRefSpecs("refs/heads/master:refs/heads/test", + "^refs/heads/master") + .call(); + assertNull(res.getTrackingRefUpdate("refs/heads/test")); + } + + @Test + public void negativeRefSpecFilterBySource() throws Exception { + remoteGit.commit().setMessage("commit").call(); + remoteGit.branchCreate().setName("test").call(); + remoteGit.commit().setMessage("commit1").call(); + remoteGit.branchCreate().setName("dev").call(); + + FetchResult res = git.fetch().setRemote("test") + .setRefSpecs("refs/*:refs/origins/*", "^refs/*/test") + .call(); + assertNotNull(res.getTrackingRefUpdate("refs/origins/heads/master")); + assertNull(res.getTrackingRefUpdate("refs/origins/heads/test")); + assertNotNull(res.getTrackingRefUpdate("refs/origins/heads/dev")); + } + + @Test + public void negativeRefSpecFilterByDestination() throws Exception { + remoteGit.commit().setMessage("commit").call(); + remoteGit.branchCreate().setName("meta").call(); + remoteGit.commit().setMessage("commit1").call(); + remoteGit.branchCreate().setName("data").call(); + + FetchResult res = git.fetch().setRemote("test") + .setRefSpecs("refs/*:refs/secret/*", "^:refs/secret/*/meta") + .call(); + assertNotNull(res.getTrackingRefUpdate("refs/secret/heads/master")); + assertNull(res.getTrackingRefUpdate("refs/secret/heads/meta")); + assertNotNull(res.getTrackingRefUpdate("refs/secret/heads/data")); + } + + @Test public void fetchAddsBranches() throws Exception { final String branch1 = "b1"; final String branch2 = "b2";
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LsRemoteCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LsRemoteCommandTest.java index 12ec2aa..05af175 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LsRemoteCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LsRemoteCommandTest.java
@@ -21,6 +21,8 @@ import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.RefUpdate; +import org.eclipse.jgit.lib.StoredConfig; +import org.eclipse.jgit.util.SystemReader; import org.junit.Test; public class LsRemoteCommandTest extends RepositoryTestCase { @@ -107,6 +109,20 @@ public void testLsRemoteWithoutLocalRepository() throws Exception { } @Test + public void testLsRemoteWithoutLocalRepositoryUrlInsteadOf() + throws Exception { + String uri = fileUri(); + StoredConfig userConfig = SystemReader.getInstance().getUserConfig(); + userConfig.load(); + userConfig.setString("url", uri, "insteadOf", "file:///foo"); + userConfig.save(); + Collection<Ref> refs = Git.lsRemoteRepository().setRemote("file:///foo") + .setHeads(true).call(); + assertNotNull(refs); + assertEquals(2, refs.size()); + } + + @Test public void testLsRemoteWithSymRefs() throws Exception { File directory = createTempDirectory("testRepository"); CloneCommand command = Git.cloneRepository();
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java index 64475f5..917b6c3 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java
@@ -36,6 +36,7 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.RepositoryState; import org.eclipse.jgit.lib.Sets; +import org.eclipse.jgit.lib.StoredConfig; import org.eclipse.jgit.merge.ContentMergeStrategy; import org.eclipse.jgit.merge.MergeStrategy; import org.eclipse.jgit.merge.ResolveMerger.MergeFailureReason; @@ -2018,6 +2019,73 @@ public void testMergeConflictWithMessageOption() throws Exception { } } + @Test + public void testMergeConflictWithMessageAndCommentChar() throws Exception { + try (Git git = new Git(db)) { + writeTrashFile("a", "1\na\n3\n"); + git.add().addFilepattern("a").call(); + RevCommit initialCommit = git.commit().setMessage("initial").call(); + + createBranch(initialCommit, "refs/heads/side"); + checkoutBranch("refs/heads/side"); + + writeTrashFile("a", "1\na(side)\n3\n"); + git.add().addFilepattern("a").call(); + git.commit().setMessage("side").call(); + + checkoutBranch("refs/heads/master"); + + writeTrashFile("a", "1\na(main)\n3\n"); + git.add().addFilepattern("a").call(); + git.commit().setMessage("main").call(); + + StoredConfig config = db.getConfig(); + config.setString("core", null, "commentChar", "^"); + + Ref sideBranch = db.exactRef("refs/heads/side"); + + git.merge().include(sideBranch).setStrategy(MergeStrategy.RESOLVE) + .setMessage("user message").call(); + + assertEquals("user message\n\n^ Conflicts:\n^\ta\n", + db.readMergeCommitMsg()); + } + } + + @Test + public void testMergeConflictWithMessageAndCommentCharAuto() + throws Exception { + try (Git git = new Git(db)) { + writeTrashFile("a", "1\na\n3\n"); + git.add().addFilepattern("a").call(); + RevCommit initialCommit = git.commit().setMessage("initial").call(); + + createBranch(initialCommit, "refs/heads/side"); + checkoutBranch("refs/heads/side"); + + writeTrashFile("a", "1\na(side)\n3\n"); + git.add().addFilepattern("a").call(); + git.commit().setMessage("side").call(); + + checkoutBranch("refs/heads/master"); + + writeTrashFile("a", "1\na(main)\n3\n"); + git.add().addFilepattern("a").call(); + git.commit().setMessage("main").call(); + + StoredConfig config = db.getConfig(); + config.setString("core", null, "commentChar", "auto"); + + Ref sideBranch = db.exactRef("refs/heads/side"); + + git.merge().include(sideBranch).setStrategy(MergeStrategy.RESOLVE) + .setMessage("#user message").call(); + + assertEquals("#user message\n\n; Conflicts:\n;\ta\n", + db.readMergeCommitMsg()); + } + } + private static void setExecutable(Git git, String path, boolean executable) { FS.DETECTED.setExecute( new File(git.getRepository().getWorkTree(), path), executable);
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java index c64ff0b..d574e45 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
@@ -30,6 +30,7 @@ import org.eclipse.jgit.api.MergeResult.MergeStatus; import org.eclipse.jgit.api.RebaseCommand.InteractiveHandler; +import org.eclipse.jgit.api.RebaseCommand.InteractiveHandler2; import org.eclipse.jgit.api.RebaseCommand.Operation; import org.eclipse.jgit.api.RebaseResult.Status; import org.eclipse.jgit.api.errors.InvalidRebaseStepException; @@ -46,6 +47,7 @@ import org.eclipse.jgit.events.ListenerHandle; import org.eclipse.jgit.junit.RepositoryTestCase; import org.eclipse.jgit.lib.AbbreviatedObjectId; +import org.eclipse.jgit.lib.CommitConfig.CleanupMode; import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; @@ -56,6 +58,7 @@ import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.ReflogEntry; import org.eclipse.jgit.lib.RepositoryState; +import org.eclipse.jgit.lib.StoredConfig; import org.eclipse.jgit.merge.MergeStrategy; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevSort; @@ -3410,6 +3413,99 @@ public String modifyCommitMessage(String commit) { } + @Test + public void testInteractiveRebaseSquashFixupSequence() throws Exception { + // create file1, add and commit + writeTrashFile(FILE1, "file1"); + git.add().addFilepattern(FILE1).call(); + git.commit().setMessage("commit1").call(); + + // modify file1, add and commit + writeTrashFile(FILE1, "modified file1"); + git.add().addFilepattern(FILE1).call(); + git.commit().setMessage("commit2").call(); + + // modify file1, add and commit + writeTrashFile(FILE1, "modified file1 a second time"); + git.add().addFilepattern(FILE1).call(); + // Make it difficult; use git standard comment characters in the commit + // messages + git.commit().setMessage("#commit3").call(); + + // modify file1, add and commit + writeTrashFile(FILE1, "modified file1 a third time"); + git.add().addFilepattern(FILE1).call(); + git.commit().setMessage("@commit4").call(); + + // modify file1, add and commit + writeTrashFile(FILE1, "modified file1 a fourth time"); + git.add().addFilepattern(FILE1).call(); + git.commit().setMessage(";commit5").call(); + + StoredConfig config = git.getRepository().getConfig(); + config.setString("core", null, "commentChar", "auto"); + // With "auto", we should end up with '@' being used as comment + // character (commit4 is skipped, so it should not advance the + // character). + RebaseResult result = git.rebase().setUpstream("HEAD~4") + .runInteractively(new InteractiveHandler2() { + + @Override + public void prepareSteps(List<RebaseTodoLine> steps) { + try { + steps.get(0).setAction(Action.PICK); + steps.get(1).setAction(Action.SQUASH); + steps.get(2).setAction(Action.FIXUP); + steps.get(3).setAction(Action.SQUASH); + } catch (IllegalTodoFileModification e) { + fail("unexpected exception: " + e); + } + } + + @Override + public String modifyCommitMessage(String commit) { + fail("should not be called"); + return commit; + } + + @Override + public ModifyResult editCommitMessage(String message, + CleanupMode mode, char commentChar) { + assertEquals('@', commentChar); + assertEquals("@ This is a combination of 4 commits.\n" + + "@ The first commit's message is:\n" + + "commit2\n" + + "@ This is the 2nd commit message:\n" + + "#commit3\n" + + "@ The 3rd commit message will be skipped:\n" + + "@ @commit4\n" + + "@ This is the 4th commit message:\n" + + ";commit5", message); + return new ModifyResult() { + + @Override + public String getMessage() { + return message; + } + + @Override + public CleanupMode getCleanupMode() { + return mode; + } + + @Override + public boolean shouldAddChangeId() { + return false; + } + }; + } + }).call(); + assertEquals(Status.OK, result.getStatus()); + Iterator<RevCommit> logIterator = git.log().all().call().iterator(); + String actualCommitMsg = logIterator.next().getFullMessage(); + assertEquals("commit2\n#commit3\n;commit5", actualCommitMsg); + } + private File getTodoFile() { File todoFile = new File(db.getDirectory(), GIT_REBASE_TODO); return todoFile;
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/CommitConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/CommitConfigTest.java index d95d781..7066f9d 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/CommitConfigTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/CommitConfigTest.java
@@ -11,7 +11,10 @@ package org.eclipse.jgit.lib; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.CommitConfig.CleanupMode; @@ -169,6 +172,82 @@ public void testCleanScissorsAtEnd() throws Exception { CommitConfig.cleanText(message, CleanupMode.SCISSORS, '#')); } + @Test + public void testCommentCharDefault() throws Exception { + CommitConfig cfg = parse(""); + assertEquals('#', cfg.getCommentChar()); + assertFalse(cfg.isAutoCommentChar()); + } + + @Test + public void testCommentCharAuto() throws Exception { + CommitConfig cfg = parse("[core]\n\tcommentChar = auto\n"); + assertEquals('#', cfg.getCommentChar()); + assertTrue(cfg.isAutoCommentChar()); + } + + @Test + public void testCommentCharEmpty() throws Exception { + CommitConfig cfg = parse("[core]\n\tcommentChar =\n"); + assertEquals('#', cfg.getCommentChar()); + } + + @Test + public void testCommentCharInvalid() throws Exception { + CommitConfig cfg = parse("[core]\n\tcommentChar = \" \"\n"); + assertEquals('#', cfg.getCommentChar()); + } + + @Test + public void testCommentCharNonAscii() throws Exception { + CommitConfig cfg = parse("[core]\n\tcommentChar = ö\n"); + assertEquals('#', cfg.getCommentChar()); + } + + @Test + public void testCommentChar() throws Exception { + CommitConfig cfg = parse("[core]\n\tcommentChar = _\n"); + assertEquals('_', cfg.getCommentChar()); + } + + @Test + public void testDetermineCommentChar() throws Exception { + String text = "A commit message\n\nBody\n"; + assertEquals('#', CommitConfig.determineCommentChar(text)); + } + + @Test + public void testDetermineCommentChar2() throws Exception { + String text = "A commit message\n\nBody\n\n# Conflicts:\n#\tfoo.txt\n"; + char ch = CommitConfig.determineCommentChar(text); + assertNotEquals('#', ch); + assertTrue(ch > ' ' && ch < 127); + } + + @Test + public void testDetermineCommentChar3() throws Exception { + String text = "A commit message\n\n;Body\n\n# Conflicts:\n#\tfoo.txt\n"; + char ch = CommitConfig.determineCommentChar(text); + assertNotEquals('#', ch); + assertNotEquals(';', ch); + assertTrue(ch > ' ' && ch < 127); + } + + @Test + public void testDetermineCommentChar4() throws Exception { + String text = "A commit message\n\nBody\n\n # Conflicts:\n\t #\tfoo.txt\n"; + char ch = CommitConfig.determineCommentChar(text); + assertNotEquals('#', ch); + assertTrue(ch > ' ' && ch < 127); + } + + @Test + public void testDetermineCommentChar5() throws Exception { + String text = "A commit message\n\nBody\n\n#a\n;b\n@c\n!d\n$\n%\n^\n&\n|\n:"; + char ch = CommitConfig.determineCommentChar(text); + assertEquals(0, ch); + } + private static CommitConfig parse(String content) throws ConfigInvalidException { Config c = new Config();
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/RefSpecTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/RefSpecTest.java index b56308c..ef0817a 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/RefSpecTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/RefSpecTest.java
@@ -443,6 +443,26 @@ public void invalidSetDestination() { a.setDestination("refs/remotes/origin/*/*"); } + @Test(expected = IllegalArgumentException.class) + public void invalidNegativeAndForce() { + assertNotNull(new RefSpec("^+refs/heads/master")); + } + + @Test(expected = IllegalArgumentException.class) + public void invalidForceAndNegative() { + assertNotNull(new RefSpec("+^refs/heads/master")); + } + + @Test(expected = IllegalArgumentException.class) + public void invalidNegativeNoSrcDest() { + assertNotNull(new RefSpec("^")); + } + + @Test(expected = IllegalArgumentException.class) + public void invalidNegativeBothSrcDest() { + assertNotNull(new RefSpec("^refs/heads/*:refs/heads/*")); + } + @Test public void sourceOnlywithWildcard() { RefSpec a = new RefSpec("refs/heads/*", @@ -480,4 +500,32 @@ public void matchingForced() { assertTrue(a.isMatching()); assertTrue(a.isForceUpdate()); } + + @Test + public void negativeRefSpecWithDest() { + RefSpec a = new RefSpec("^:refs/readonly/*"); + assertTrue(a.isNegative()); + assertNull(a.getSource()); + assertEquals(a.getDestination(), "refs/readonly/*"); + } + + // Because of some of the API's existing behavior, without a colon at the + // end of the refspec, dest will be null. + @Test + public void negativeRefSpecWithSrcAndNullDest() { + RefSpec a = new RefSpec("^refs/testdata/*"); + assertTrue(a.isNegative()); + assertNull(a.getDestination()); + assertEquals(a.getSource(), "refs/testdata/*"); + } + + // Because of some of the API's existing behavior, with a colon at the end + // of the refspec, dest will be empty. + @Test + public void negativeRefSpecWithSrcAndEmptyDest() { + RefSpec a = new RefSpec("^refs/testdata/*:"); + assertTrue(a.isNegative()); + assertTrue(a.getDestination().isEmpty()); + assertEquals(a.getSource(), "refs/testdata/*"); + } }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/SideBandInputStreamTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/SideBandInputStreamTest.java new file mode 100644 index 0000000..7ac8319 --- /dev/null +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/SideBandInputStreamTest.java
@@ -0,0 +1,229 @@ +/* + * Copyright (C) 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.transport; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; + +import org.junit.Before; +import org.junit.Test; + +public class SideBandInputStreamTest { + + private StringWriter messages; + + private SideBandInputStream sideband; + + @Before + public void setup() { + messages = new StringWriter(); + } + + @Test + public void progressSingleCR() throws IOException { + init(packet("message\r")); + assertTrue(sideband.read() < 0); + assertEquals("message\r", messages.toString()); + } + + @Test + public void progressSingleLF() throws IOException { + init(packet("message\n")); + assertTrue(sideband.read() < 0); + assertEquals("message\n", messages.toString()); + } + + @Test + public void progressSingleCRLF() throws IOException { + init(packet("message\r\n")); + assertTrue(sideband.read() < 0); + assertEquals("message\r\n", messages.toString()); + } + + @Test + public void progressMultiCR() throws IOException { + init(packet("message 0%\rmessage 100%\r")); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\rmessage 100%\r", messages.toString()); + } + + @Test + public void progressMultiLF() throws IOException { + init(packet("message 0%\nmessage 100%\n")); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\nmessage 100%\n", messages.toString()); + } + + @Test + public void progressMultiCRLF() throws IOException { + init(packet("message 0%\r\nmessage 100%\r\n")); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\r\nmessage 100%\r\n", messages.toString()); + } + + @Test + public void progressPartial() throws IOException { + init(packet("message")); + assertTrue(sideband.read() < 0); + assertEquals("", messages.toString()); + sideband.drainMessages(); + assertEquals("message\n", messages.toString()); + } + + @Test + public void progressPartialTwoCR() throws IOException { + init(packet("message") + packet("message\r")); + assertTrue(sideband.read() < 0); + assertEquals("messagemessage\r", messages.toString()); + } + + @Test + public void progressPartialTwoLF() throws IOException { + init(packet("message") + packet("message\n")); + assertTrue(sideband.read() < 0); + assertEquals("messagemessage\n", messages.toString()); + } + + @Test + public void progressPartialTwoCRLF() throws IOException { + init(packet("message") + packet("message\r\n")); + assertTrue(sideband.read() < 0); + assertEquals("messagemessage\r\n", messages.toString()); + } + + @Test + public void progressPartialThreeCR() throws IOException { + init(packet("message") + packet("message") + packet("message\r")); + assertTrue(sideband.read() < 0); + assertEquals("messagemessagemessage\r", messages.toString()); + } + + @Test + public void progressPartialThreeLF() throws IOException { + init(packet("message") + packet("message") + packet("message\n")); + assertTrue(sideband.read() < 0); + assertEquals("messagemessagemessage\n", messages.toString()); + } + + @Test + public void progressPartialThreeCRLF() throws IOException { + init(packet("message") + packet("message") + packet("message\r\n")); + assertTrue(sideband.read() < 0); + assertEquals("messagemessagemessage\r\n", messages.toString()); + } + + @Test + public void progressPartialCR() throws IOException { + init(packet("message 0%\rmessage 100%")); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\r", messages.toString()); + sideband.drainMessages(); + assertEquals("message 0%\rmessage 100%\n", messages.toString()); + } + + @Test + public void progressPartialLF() throws IOException { + init(packet("message 0%\nmessage 100%")); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\n", messages.toString()); + sideband.drainMessages(); + assertEquals("message 0%\nmessage 100%\n", messages.toString()); + } + + @Test + public void progressPartialCRLF() throws IOException { + init(packet("message 0%\r\nmessage 100%")); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\r\n", messages.toString()); + sideband.drainMessages(); + assertEquals("message 0%\r\nmessage 100%\n", messages.toString()); + } + + @Test + public void progressPartialSplitCR() throws IOException { + init(packet("message") + "0006\001a" + packet(" 0%\rmessa") + + packet("ge 100%")); + assertEquals('a', sideband.read()); + assertEquals("", messages.toString()); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\r", messages.toString()); + sideband.drainMessages(); + assertEquals("message 0%\rmessage 100%\n", messages.toString()); + } + + @Test + public void progressPartialSplitLF() throws IOException { + init(packet("message") + "0006\001a" + packet(" 0%\nmessa") + + packet("ge 100%")); + assertEquals('a', sideband.read()); + assertEquals("", messages.toString()); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\n", messages.toString()); + sideband.drainMessages(); + assertEquals("message 0%\nmessage 100%\n", messages.toString()); + } + + @Test + public void progressPartialSplitCRLF() throws IOException { + init(packet("message") + "0006\001a" + packet(" 0%\r\nmessa") + + packet("ge 100%")); + assertEquals('a', sideband.read()); + assertEquals("", messages.toString()); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\r\n", messages.toString()); + sideband.drainMessages(); + assertEquals("message 0%\r\nmessage 100%\n", messages.toString()); + } + + @Test + public void progressInterleaved() throws IOException { + init(packet("message 0%\r") + "0006\001a" + packet("message 10%") + + "0006\001b" + packet("\rmessage 100%\n")); + assertEquals('a', sideband.read()); + assertEquals("message 0%\r", messages.toString()); + assertEquals('b', sideband.read()); + assertEquals("message 0%\r", messages.toString()); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\rmessage 10%\rmessage 100%\n", + messages.toString()); + } + + @Test + public void progressInterleavedPartial() throws IOException { + init(packet("message 0%\r") + "0006\001a" + packet("message 10%") + + "0006\001b" + packet("\rmessage 100%")); + assertEquals('a', sideband.read()); + assertEquals("message 0%\r", messages.toString()); + assertEquals('b', sideband.read()); + assertEquals("message 0%\r", messages.toString()); + assertTrue(sideband.read() < 0); + assertEquals("message 0%\rmessage 10%\r", messages.toString()); + sideband.drainMessages(); + assertEquals("message 0%\rmessage 10%\rmessage 100%\n", + messages.toString()); + } + + private String packet(String data) { + return String.format("%04x\002%s", Integer.valueOf(data.length() + 5), + data); + } + + private void init(String packets) { + InputStream rawIn = new ByteArrayInputStream( + (packets + "0000").getBytes(StandardCharsets.UTF_8)); + sideband = new SideBandInputStream(rawIn, null, messages, null); + } +}
diff --git a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF index 7baa215..e9c5879 100644 --- a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
@@ -4,14 +4,14 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit.ui Bundle-SymbolicName: org.eclipse.jgit.ui -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-RequiredExecutionEnvironment: JavaSE-11 -Export-Package: org.eclipse.jgit.awtui;version="6.1.1" -Import-Package: org.eclipse.jgit.errors;version="[6.1.1,6.2.0)", - org.eclipse.jgit.lib;version="[6.1.1,6.2.0)", - org.eclipse.jgit.nls;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revplot;version="[6.1.1,6.2.0)", - org.eclipse.jgit.revwalk;version="[6.1.1,6.2.0)", - org.eclipse.jgit.transport;version="[6.1.1,6.2.0)", - org.eclipse.jgit.util;version="[6.1.1,6.2.0)" +Export-Package: org.eclipse.jgit.awtui;version="6.2.0" +Import-Package: org.eclipse.jgit.errors;version="[6.2.0,6.3.0)", + org.eclipse.jgit.lib;version="[6.2.0,6.3.0)", + org.eclipse.jgit.nls;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revplot;version="[6.2.0,6.3.0)", + org.eclipse.jgit.revwalk;version="[6.2.0,6.3.0)", + org.eclipse.jgit.transport;version="[6.2.0,6.3.0)", + org.eclipse.jgit.util;version="[6.2.0,6.3.0)"
diff --git a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF index 75f3d21..df93dc2 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-Name: org.eclipse.jgit.ui - Sources Bundle-SymbolicName: org.eclipse.jgit.ui.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit.ui;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit.ui;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ui/pom.xml b/org.eclipse.jgit.ui/pom.xml index 125e120..31c7149 100644 --- a/org.eclipse.jgit.ui/pom.xml +++ b/org.eclipse.jgit.ui/pom.xml
@@ -19,7 +19,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> </parent> <artifactId>org.eclipse.jgit.ui</artifactId>
diff --git a/org.eclipse.jgit/META-INF/MANIFEST.MF b/org.eclipse.jgit/META-INF/MANIFEST.MF index eb8eb8b..e72f00f 100644 --- a/org.eclipse.jgit/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit/META-INF/MANIFEST.MF
@@ -3,12 +3,12 @@ Bundle-Name: %Bundle-Name Automatic-Module-Name: org.eclipse.jgit Bundle-SymbolicName: org.eclipse.jgit -Bundle-Version: 6.1.1.qualifier +Bundle-Version: 6.2.0.qualifier Bundle-Localization: plugin Bundle-Vendor: %Bundle-Vendor Eclipse-ExtensibleAPI: true -Export-Package: org.eclipse.jgit.annotations;version="6.1.1", - org.eclipse.jgit.api;version="6.1.1"; +Export-Package: org.eclipse.jgit.annotations;version="6.2.0", + org.eclipse.jgit.api;version="6.2.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.notes, org.eclipse.jgit.dircache, @@ -23,18 +23,18 @@ org.eclipse.jgit.revwalk.filter, org.eclipse.jgit.blame, org.eclipse.jgit.merge", - org.eclipse.jgit.api.errors;version="6.1.1"; + org.eclipse.jgit.api.errors;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.errors", - org.eclipse.jgit.attributes;version="6.1.1"; + org.eclipse.jgit.attributes;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.treewalk", - org.eclipse.jgit.blame;version="6.1.1"; + org.eclipse.jgit.blame;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.diff", - org.eclipse.jgit.diff;version="6.1.1"; + org.eclipse.jgit.diff;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.attributes, org.eclipse.jgit.revwalk, @@ -42,48 +42,48 @@ org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.treewalk, org.eclipse.jgit.util", - org.eclipse.jgit.dircache;version="6.1.1"; + org.eclipse.jgit.dircache;version="6.2.0"; uses:="org.eclipse.jgit.events, org.eclipse.jgit.lib, org.eclipse.jgit.attributes, org.eclipse.jgit.treewalk, org.eclipse.jgit.util", - org.eclipse.jgit.errors;version="6.1.1"; + org.eclipse.jgit.errors;version="6.2.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.dircache, org.eclipse.jgit.lib, org.eclipse.jgit.internal.storage.pack", - org.eclipse.jgit.events;version="6.1.1"; + org.eclipse.jgit.events;version="6.2.0"; uses:="org.eclipse.jgit.lib", - org.eclipse.jgit.fnmatch;version="6.1.1", - org.eclipse.jgit.gitrepo;version="6.1.1"; + org.eclipse.jgit.fnmatch;version="6.2.0", + org.eclipse.jgit.gitrepo;version="6.2.0"; uses:="org.xml.sax.helpers, org.eclipse.jgit.api, org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, org.xml.sax", - org.eclipse.jgit.gitrepo.internal;version="6.1.1";x-internal:=true, - org.eclipse.jgit.hooks;version="6.1.1";uses:="org.eclipse.jgit.lib", - org.eclipse.jgit.ignore;version="6.1.1", - org.eclipse.jgit.ignore.internal;version="6.1.1"; + org.eclipse.jgit.gitrepo.internal;version="6.2.0";x-internal:=true, + org.eclipse.jgit.hooks;version="6.2.0";uses:="org.eclipse.jgit.lib", + org.eclipse.jgit.ignore;version="6.2.0", + org.eclipse.jgit.ignore.internal;version="6.2.0"; x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.internal;version="6.1.1"; + org.eclipse.jgit.internal;version="6.2.0"; x-friends:="org.eclipse.jgit.test, org.eclipse.jgit.http.test", - org.eclipse.jgit.internal.diffmergetool;version="6.1.1"; + org.eclipse.jgit.internal.diffmergetool;version="6.2.0"; x-friends:="org.eclipse.jgit.test, org.eclipse.jgit.pgm.test, org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.fsck;version="6.1.1"; + org.eclipse.jgit.internal.fsck;version="6.2.0"; x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.internal.revwalk;version="6.1.1"; + org.eclipse.jgit.internal.revwalk;version="6.2.0"; x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.internal.storage.dfs;version="6.1.1"; + org.eclipse.jgit.internal.storage.dfs;version="6.2.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="6.1.1"; + org.eclipse.jgit.internal.storage.file;version="6.2.0"; x-friends:="org.eclipse.jgit.test, org.eclipse.jgit.junit, org.eclipse.jgit.junit.http, @@ -92,32 +92,32 @@ org.eclipse.jgit.pgm, org.eclipse.jgit.pgm.test, org.eclipse.jgit.ssh.apache", - org.eclipse.jgit.internal.storage.io;version="6.1.1"; + org.eclipse.jgit.internal.storage.io;version="6.2.0"; x-friends:="org.eclipse.jgit.junit, org.eclipse.jgit.test, org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.storage.pack;version="6.1.1"; + org.eclipse.jgit.internal.storage.pack;version="6.2.0"; x-friends:="org.eclipse.jgit.junit, org.eclipse.jgit.test, org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.storage.reftable;version="6.1.1"; + org.eclipse.jgit.internal.storage.reftable;version="6.2.0"; x-friends:="org.eclipse.jgit.http.test, org.eclipse.jgit.junit, org.eclipse.jgit.test, org.eclipse.jgit.pgm", - org.eclipse.jgit.internal.submodule;version="6.1.1";x-internal:=true, - org.eclipse.jgit.internal.transport.connectivity;version="6.1.1"; + org.eclipse.jgit.internal.submodule;version="6.2.0";x-internal:=true, + org.eclipse.jgit.internal.transport.connectivity;version="6.2.0"; x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.internal.transport.http;version="6.1.1"; + org.eclipse.jgit.internal.transport.http;version="6.2.0"; x-friends:="org.eclipse.jgit.test", - org.eclipse.jgit.internal.transport.parser;version="6.1.1"; + org.eclipse.jgit.internal.transport.parser;version="6.2.0"; x-friends:="org.eclipse.jgit.http.server, org.eclipse.jgit.test", - org.eclipse.jgit.internal.transport.ssh;version="6.1.1"; + org.eclipse.jgit.internal.transport.ssh;version="6.2.0"; x-friends:="org.eclipse.jgit.ssh.apache, org.eclipse.jgit.ssh.jsch, org.eclipse.jgit.test", - org.eclipse.jgit.lib;version="6.1.1"; + org.eclipse.jgit.lib;version="6.2.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.util.sha1, org.eclipse.jgit.dircache, @@ -131,11 +131,11 @@ org.eclipse.jgit.util, org.eclipse.jgit.submodule, org.eclipse.jgit.util.time", - org.eclipse.jgit.lib.internal;version="6.1.1"; + org.eclipse.jgit.lib.internal;version="6.2.0"; x-friends:="org.eclipse.jgit.test, org.eclipse.jgit.pgm", - org.eclipse.jgit.logging;version="6.1.1", - org.eclipse.jgit.merge;version="6.1.1"; + org.eclipse.jgit.logging;version="6.2.0", + org.eclipse.jgit.merge;version="6.2.0"; uses:="org.eclipse.jgit.dircache, org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, @@ -144,40 +144,40 @@ org.eclipse.jgit.util, org.eclipse.jgit.api, org.eclipse.jgit.attributes", - org.eclipse.jgit.nls;version="6.1.1", - org.eclipse.jgit.notes;version="6.1.1"; + org.eclipse.jgit.nls;version="6.2.0", + org.eclipse.jgit.notes;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk, org.eclipse.jgit.merge", - org.eclipse.jgit.patch;version="6.1.1"; + org.eclipse.jgit.patch;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.diff", - org.eclipse.jgit.revplot;version="6.1.1"; + org.eclipse.jgit.revplot;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.revwalk", - org.eclipse.jgit.revwalk;version="6.1.1"; + org.eclipse.jgit.revwalk;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.diff, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.revwalk.filter, org.eclipse.jgit.treewalk", - org.eclipse.jgit.revwalk.filter;version="6.1.1"; + org.eclipse.jgit.revwalk.filter;version="6.2.0"; uses:="org.eclipse.jgit.revwalk, org.eclipse.jgit.lib, org.eclipse.jgit.util", - org.eclipse.jgit.storage.file;version="6.1.1"; + org.eclipse.jgit.storage.file;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.util", - org.eclipse.jgit.storage.pack;version="6.1.1"; + org.eclipse.jgit.storage.pack;version="6.2.0"; uses:="org.eclipse.jgit.lib", - org.eclipse.jgit.submodule;version="6.1.1"; + org.eclipse.jgit.submodule;version="6.2.0"; uses:="org.eclipse.jgit.lib, org.eclipse.jgit.diff, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.treewalk, org.eclipse.jgit.util", - org.eclipse.jgit.transport;version="6.1.1"; + org.eclipse.jgit.transport;version="6.2.0"; uses:="javax.crypto, org.eclipse.jgit.util.io, org.eclipse.jgit.lib, @@ -190,21 +190,21 @@ org.eclipse.jgit.transport.resolver, org.eclipse.jgit.storage.pack, org.eclipse.jgit.errors", - org.eclipse.jgit.transport.http;version="6.1.1"; + org.eclipse.jgit.transport.http;version="6.2.0"; uses:="javax.net.ssl", - org.eclipse.jgit.transport.resolver;version="6.1.1"; + org.eclipse.jgit.transport.resolver;version="6.2.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.lib", - org.eclipse.jgit.treewalk;version="6.1.1"; + org.eclipse.jgit.treewalk;version="6.2.0"; uses:="org.eclipse.jgit.dircache, org.eclipse.jgit.lib, org.eclipse.jgit.attributes, org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.util", - org.eclipse.jgit.treewalk.filter;version="6.1.1"; + org.eclipse.jgit.treewalk.filter;version="6.2.0"; uses:="org.eclipse.jgit.treewalk", - org.eclipse.jgit.util;version="6.1.1"; + org.eclipse.jgit.util;version="6.2.0"; uses:="org.eclipse.jgit.transport, org.eclipse.jgit.hooks, org.eclipse.jgit.revwalk, @@ -217,12 +217,12 @@ org.eclipse.jgit.treewalk, javax.net.ssl, org.eclipse.jgit.util.time", - org.eclipse.jgit.util.io;version="6.1.1"; + org.eclipse.jgit.util.io;version="6.2.0"; uses:="org.eclipse.jgit.attributes, org.eclipse.jgit.lib, org.eclipse.jgit.treewalk", - org.eclipse.jgit.util.sha1;version="6.1.1", - org.eclipse.jgit.util.time;version="6.1.1" + org.eclipse.jgit.util.sha1;version="6.2.0", + org.eclipse.jgit.util.time;version="6.2.0" Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)", javax.crypto,
diff --git a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF index 33e6156..a418bc3 100644 --- a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF +++ b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@ Bundle-Name: org.eclipse.jgit - Sources Bundle-SymbolicName: org.eclipse.jgit.source Bundle-Vendor: Eclipse.org - JGit -Bundle-Version: 6.1.1.qualifier -Eclipse-SourceBundle: org.eclipse.jgit;version="6.1.1.qualifier";roots="." +Bundle-Version: 6.2.0.qualifier +Eclipse-SourceBundle: org.eclipse.jgit;version="6.2.0.qualifier";roots="."
diff --git a/org.eclipse.jgit/pom.xml b/org.eclipse.jgit/pom.xml index f0e92b3..2fbec2f 100644 --- a/org.eclipse.jgit/pom.xml +++ b/org.eclipse.jgit/pom.xml
@@ -20,7 +20,7 @@ <parent> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.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 e6f4e65..9f264fc 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
@@ -393,6 +393,7 @@ invalidModeFor=Invalid mode {0} for {1} {2} in {3}. invalidModeForPath=Invalid mode {0} for path {1} invalidNameContainsDotDot=Invalid name (contains ".."): {0} +invalidNegativeAndForce= RefSpec can't be negative and forceful. invalidObject=Invalid {0} {1}: {2} invalidOldIdSent=invalid old id sent invalidPacketLineHeader=Invalid packet line header: {0}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java index f88179a..ceba89d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java
@@ -30,6 +30,7 @@ import org.eclipse.jgit.events.WorkingTreeModifiedEvent; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.lib.CommitConfig; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.ObjectId; @@ -183,9 +184,13 @@ public CherryPickResult call() throws GitAPIException, NoMessageException, String message; if (unmergedPaths != null) { + CommitConfig cfg = repo.getConfig() + .get(CommitConfig.KEY); + message = srcCommit.getFullMessage(); + char commentChar = cfg.getCommentChar(message); message = new MergeMessageFormatter() - .formatWithConflicts(srcCommit.getFullMessage(), - unmergedPaths, '#'); + .formatWithConflicts(message, unmergedPaths, + commentChar); } else { message = srcCommit.getFullMessage(); }
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 7a591aa..3b3baf5 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java
@@ -233,11 +233,25 @@ public RevCommit call() throws GitAPIException, AbortedByHookException, config = repo.getConfig().get(CommitConfig.KEY); cleanupMode = config.resolve(cleanupMode, cleanDefaultIsStrip); } - char comments; - if (commentChar == null) { - comments = '#'; // TODO use git config core.commentChar - } else { - comments = commentChar.charValue(); + char comments = (char) 0; + if (CleanupMode.STRIP.equals(cleanupMode) + || CleanupMode.SCISSORS.equals(cleanupMode)) { + if (commentChar == null) { + if (config == null) { + config = repo.getConfig().get(CommitConfig.KEY); + } + if (config.isAutoCommentChar()) { + // We're supposed to pick a character that isn't used, + // but then cleaning up won't remove any lines. So don't + // bother. + comments = (char) 0; + cleanupMode = CleanupMode.WHITESPACE; + } else { + comments = config.getCommentChar(); + } + } else { + comments = commentChar.charValue(); + } } message = CommitConfig.cleanText(message, cleanupMode, comments); @@ -309,8 +323,14 @@ private void checkIfEmpty(RevWalk rw, ObjectId headId, ObjectId indexTreeId) private void sign(CommitBuilder commit) throws ServiceUnavailableException, CanceledException, UnsupportedSigningFormatException { if (gpgSigner == null) { - throw new ServiceUnavailableException( - JGitText.get().signingServiceUnavailable); + gpgSigner = GpgSigner.getDefault(); + if (gpgSigner == null) { + throw new ServiceUnavailableException( + JGitText.get().signingServiceUnavailable); + } + } + if (signingKey == null) { + signingKey = gpgConfig.getSigningKey(); } if (gpgSigner instanceof GpgObjectSigner) { ((GpgObjectSigner) gpgSigner).signObject(commit, @@ -645,12 +665,6 @@ private void processOptions(RepositoryState state, RevWalk rw) signCommit = gpgConfig.isSignCommits() ? Boolean.TRUE : Boolean.FALSE; } - if (signingKey == null) { - signingKey = gpgConfig.getSigningKey(); - } - if (gpgSigner == null) { - gpgSigner = GpgSigner.getDefault(); - } } private boolean isMergeDuringRebase(RepositoryState state) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java index 0c69106..c341558 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2011, 2020 Christoph Brill <egore911@egore911.de> and others + * Copyright (C) 2011, 2022 Christoph Brill <egore911@egore911.de> 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 @@ -9,6 +9,7 @@ */ package org.eclipse.jgit.api; +import java.io.IOException; import java.net.URISyntaxException; import java.text.MessageFormat; import java.util.ArrayList; @@ -20,8 +21,8 @@ import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.InvalidRemoteException; import org.eclipse.jgit.api.errors.JGitInternalException; +import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.errors.NotSupportedException; -import org.eclipse.jgit.errors.TransportException; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; @@ -30,6 +31,8 @@ import org.eclipse.jgit.transport.RefSpec; import org.eclipse.jgit.transport.Transport; import org.eclipse.jgit.transport.URIish; +import org.eclipse.jgit.transport.UrlConfig; +import org.eclipse.jgit.util.SystemReader; /** * The ls-remote command @@ -153,7 +156,7 @@ private Map<String, Ref> execute() throws GitAPIException, try (Transport transport = repo != null ? Transport.open(repo, remote) - : Transport.open(new URIish(remote))) { + : Transport.open(new URIish(translate(remote)))) { transport.setOptionUploadPack(uploadPack); configure(transport); Collection<RefSpec> refSpecs = new ArrayList<>(1); @@ -185,11 +188,16 @@ private Map<String, Ref> execute() throws GitAPIException, throw new JGitInternalException( JGitText.get().exceptionCaughtDuringExecutionOfLsRemoteCommand, e); - } catch (TransportException e) { + } catch (IOException | ConfigInvalidException e) { throw new org.eclipse.jgit.api.errors.TransportException( - e.getMessage(), - e); + e.getMessage(), e); } } + private String translate(String uri) + throws IOException, ConfigInvalidException { + UrlConfig urls = new UrlConfig( + SystemReader.getInstance().getUserConfig()); + return urls.replace(uri); + } }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java index ce068b6..ed4a534 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java
@@ -34,6 +34,7 @@ import org.eclipse.jgit.events.WorkingTreeModifiedEvent; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.lib.CommitConfig; import org.eclipse.jgit.lib.Config.ConfigEnum; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.NullProgressMonitor; @@ -404,8 +405,11 @@ public MergeResult call() throws GitAPIException, NoHeadException, MergeStatus.FAILED, mergeStrategy, lowLevelResults, failingPaths, null); } + CommitConfig cfg = repo.getConfig().get(CommitConfig.KEY); + char commentChar = cfg.getCommentChar(message); String mergeMessageWithConflicts = new MergeMessageFormatter() - .formatWithConflicts(mergeMessage, unmergedPaths, '#'); + .formatWithConflicts(mergeMessage, unmergedPaths, + commentChar); repo.writeMergeCommitMsg(mergeMessageWithConflicts); return new MergeResult(null, merger.getBaseCommitId(), new ObjectId[] { headCommit.getId(),
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java index 2b0d8ce..4e0d9d7 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
@@ -449,7 +449,8 @@ private RebaseResult processStep(RebaseTodoLine step, boolean shouldPick) String oldMessage = commitToPick.getFullMessage(); CleanupMode mode = commitConfig.resolve(CleanupMode.DEFAULT, true); boolean[] doChangeId = { false }; - String newMessage = editCommitMessage(doChangeId, oldMessage, mode); + String newMessage = editCommitMessage(doChangeId, oldMessage, mode, + commitConfig.getCommentChar(oldMessage)); try (Git git = new Git(repo)) { newHead = git.commit() .setMessage(newMessage) @@ -494,12 +495,12 @@ private RebaseResult processStep(RebaseTodoLine step, boolean shouldPick) } private String editCommitMessage(boolean[] doChangeId, String message, - @NonNull CleanupMode mode) { + @NonNull CleanupMode mode, char commentChar) { String newMessage; CommitConfig.CleanupMode cleanup; if (interactiveHandler instanceof InteractiveHandler2) { InteractiveHandler2.ModifyResult modification = ((InteractiveHandler2) interactiveHandler) - .editCommitMessage(message, mode, '#'); + .editCommitMessage(message, mode, commentChar); newMessage = modification.getMessage(); cleanup = modification.getCleanupMode(); if (CleanupMode.DEFAULT.equals(cleanup)) { @@ -511,7 +512,7 @@ private String editCommitMessage(boolean[] doChangeId, String message, cleanup = CommitConfig.CleanupMode.STRIP; doChangeId[0] = false; } - return CommitConfig.cleanText(newMessage, cleanup, '#'); + return CommitConfig.cleanText(newMessage, cleanup, commentChar); } private RebaseResult cherryPickCommit(RevCommit commitToPick) @@ -808,8 +809,9 @@ private RevCommit squashIntoPrevious(boolean sequenceContainsSquash, if (isLast) { boolean[] doChangeId = { false }; if (sequenceContainsSquash) { + char commentChar = commitMessage.charAt(0); commitMessage = editCommitMessage(doChangeId, commitMessage, - CleanupMode.STRIP); + CleanupMode.STRIP, commentChar); } retNewHead = git.commit() .setMessage(commitMessage) @@ -829,30 +831,60 @@ private RevCommit squashIntoPrevious(boolean sequenceContainsSquash, } @SuppressWarnings("nls") - private static String composeSquashMessage(boolean isSquash, + private String composeSquashMessage(boolean isSquash, RevCommit commitToPick, String currSquashMessage, int count) { StringBuilder sb = new StringBuilder(); String ordinal = getOrdinal(count); - sb.setLength(0); - sb.append("# This is a combination of ").append(count) - .append(" commits.\n"); - // Add the previous message without header (i.e first line) - sb.append(currSquashMessage - .substring(currSquashMessage.indexOf('\n') + 1)); - sb.append("\n"); - if (isSquash) { - sb.append("# This is the ").append(count).append(ordinal) - .append(" commit message:\n"); - sb.append(commitToPick.getFullMessage()); + // currSquashMessage is always non-empty here, and the first character + // is the comment character used so far. + char commentChar = currSquashMessage.charAt(0); + String newMessage = commitToPick.getFullMessage(); + if (!isSquash) { + sb.append(commentChar).append(" This is a combination of ") + .append(count).append(" commits.\n"); + // Add the previous message without header (i.e first line) + sb.append(currSquashMessage + .substring(currSquashMessage.indexOf('\n') + 1)); + sb.append('\n'); + sb.append(commentChar).append(" The ").append(count).append(ordinal) + .append(" commit message will be skipped:\n") + .append(commentChar).append(' '); + sb.append(newMessage.replaceAll("([\n\r])", + "$1" + commentChar + ' ')); } else { - sb.append("# The ").append(count).append(ordinal) - .append(" commit message will be skipped:\n# "); - sb.append(commitToPick.getFullMessage().replaceAll("([\n\r])", - "$1# ")); + String currentMessage = currSquashMessage; + if (commitConfig.isAutoCommentChar()) { + // Figure out a new comment character taking into account the + // new message + String cleaned = CommitConfig.cleanText(currentMessage, + CommitConfig.CleanupMode.STRIP, commentChar) + '\n' + + newMessage; + char newCommentChar = commitConfig.getCommentChar(cleaned); + if (newCommentChar != commentChar) { + currentMessage = replaceCommentChar(currentMessage, + commentChar, newCommentChar); + commentChar = newCommentChar; + } + } + sb.append(commentChar).append(" This is a combination of ") + .append(count).append(" commits.\n"); + // Add the previous message without header (i.e first line) + sb.append( + currentMessage.substring(currentMessage.indexOf('\n') + 1)); + sb.append('\n'); + sb.append(commentChar).append(" This is the ").append(count) + .append(ordinal).append(" commit message:\n"); + sb.append(newMessage); } return sb.toString(); } + private String replaceCommentChar(String message, char oldChar, + char newChar) { + // (?m) - Switch on multi-line matching; \h - horizontal whitespace + return message.replaceAll("(?m)^(\\h*)" + oldChar, "$1" + newChar); //$NON-NLS-1$ //$NON-NLS-2$ + } + private static String getOrdinal(int count) { switch (count % 10) { case 1: @@ -886,10 +918,11 @@ static int parseSquashFixupSequenceCount(String currSquashMessage) { private void initializeSquashFixupFile(String messageFile, String fullMessage) throws IOException { - rebaseState - .createFile( - messageFile, - "# This is a combination of 1 commits.\n# The first commit's message is:\n" + fullMessage); //$NON-NLS-1$); + char commentChar = commitConfig.getCommentChar(fullMessage); + rebaseState.createFile(messageFile, + commentChar + " This is a combination of 1 commits.\n" //$NON-NLS-1$ + + commentChar + " The first commit's message is:\n" //$NON-NLS-1$ + + fullMessage); } private String getOurCommitName() {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java index db88ad8..513f579 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/RevertCommand.java
@@ -30,6 +30,7 @@ import org.eclipse.jgit.events.WorkingTreeModifiedEvent; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.lib.CommitConfig; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.ObjectId; @@ -185,9 +186,12 @@ public RevCommit call() throws NoMessageException, UnmergedPathsException, MergeStatus.CONFLICTING, strategy, merger.getMergeResults(), failingPaths, null); if (!merger.failed() && !unmergedPaths.isEmpty()) { + CommitConfig config = repo.getConfig() + .get(CommitConfig.KEY); + char commentChar = config.getCommentChar(newMessage); String message = new MergeMessageFormatter() .formatWithConflicts(newMessage, - merger.getUnmergedPaths(), '#'); + merger.getUnmergedPaths(), commentChar); repo.writeRevertHead(srcCommit.getId()); repo.writeMergeCommitMsg(message); }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java index 3d50a82..f6fc393 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
@@ -26,9 +26,9 @@ import java.text.MessageFormat; import java.time.Instant; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -113,7 +113,7 @@ public CheckoutMetadata(EolStreamType eolStreamType, private Repository repo; - private HashMap<String, CheckoutMetadata> updated = new HashMap<>(); + private Map<String, CheckoutMetadata> updated = new LinkedHashMap<>(); private ArrayList<String> conflicts = new ArrayList<>();
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 535c6b9..43dbc37 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 Obeo. and others + * Copyright (C) 2015, 2022 Obeo 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 @@ -38,6 +38,8 @@ public class PrePushHook extends GitHook<String> { private String refs; + private boolean dryRun; + /** * Constructor for PrePushHook * <p> @@ -145,6 +147,27 @@ public void setRemoteLocation(String location) { } /** + * Sets whether the push is a dry run. + * + * @param dryRun + * {@code true} if the push is a dry run, {@code false} otherwise + * @since 6.2 + */ + public void setDryRun(boolean dryRun) { + this.dryRun = dryRun; + } + + /** + * Tells whether the push is a dry run. + * + * @return {@code true} if the push is a dry run, {@code false} otherwise + * @since 6.2 + */ + protected boolean isDryRun() { + return dryRun; + } + + /** * Set Refs * * @param toRefs
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 16b3f37..b81e605 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
@@ -421,6 +421,7 @@ public static JGitText get() { /***/ public String invalidModeFor; /***/ public String invalidModeForPath; /***/ public String invalidNameContainsDotDot; + /***/ public String invalidNegativeAndForce; /***/ public String invalidObject; /***/ public String invalidOldIdSent; /***/ public String invalidPacketLineHeader;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java index 07e3814..4aa2edf 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
@@ -28,7 +28,6 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.InterruptedIOException; @@ -892,38 +891,27 @@ PackedRefList getPackedRefs() throws IOException { } private PackedRefList readPackedRefs() throws IOException { - int maxStaleRetries = 5; - int retries = 0; - while (true) { - final FileSnapshot snapshot = FileSnapshot.save(packedRefsFile); - final MessageDigest digest = Constants.newMessageDigest(); - try (BufferedReader br = new BufferedReader(new InputStreamReader( - new DigestInputStream(new FileInputStream(packedRefsFile), - digest), - UTF_8))) { - try { - return new PackedRefList(parsePackedRefs(br), snapshot, - ObjectId.fromRaw(digest.digest())); - } catch (IOException e) { - if (FileUtils.isStaleFileHandleInCausalChain(e) - && retries < maxStaleRetries) { - if (LOG.isDebugEnabled()) { - LOG.debug(MessageFormat.format( - JGitText.get().packedRefsHandleIsStale, - Integer.valueOf(retries)), e); + try { + PackedRefList result = FileUtils.readWithRetries(packedRefsFile, + f -> { + FileSnapshot snapshot = FileSnapshot.save(f); + MessageDigest digest = Constants.newMessageDigest(); + try (BufferedReader br = new BufferedReader( + new InputStreamReader( + new DigestInputStream( + new FileInputStream(f), digest), + UTF_8))) { + return new PackedRefList(parsePackedRefs(br), + snapshot, + ObjectId.fromRaw(digest.digest())); } - retries++; - continue; - } - throw e; - } - } catch (FileNotFoundException noPackedRefs) { - if (packedRefsFile.exists()) { - throw noPackedRefs; - } - // Ignore it and leave the new list empty. - return NO_PACKED_REFS; - } + }); + return result != null ? result : NO_PACKED_REFS; + } catch (IOException e) { + throw e; + } catch (Exception e) { + throw new IOException(MessageFormat + .format(JGitText.get().cannotReadFile, packedRefsFile), e); } } @@ -1090,40 +1078,55 @@ LooseRef scanRef(LooseRef ref, String name) throws IOException { } final int limit = 4096; - final byte[] buf; - FileSnapshot otherSnapshot = FileSnapshot.save(path); - try { - buf = IO.readSome(path, limit); - } catch (FileNotFoundException noFile) { - if (path.isFile()) { - throw noFile; - } - return null; // doesn't exist or no file; not a reference. - } - int n = buf.length; + class LooseItems { + final FileSnapshot snapshot; + + final byte[] buf; + + LooseItems(FileSnapshot snapshot, byte[] buf) { + this.snapshot = snapshot; + this.buf = buf; + } + } + LooseItems loose = null; + try { + loose = FileUtils.readWithRetries(path, + f -> new LooseItems(FileSnapshot.save(f), + IO.readSome(f, limit))); + } catch (IOException e) { + throw e; + } catch (Exception e) { + throw new IOException( + MessageFormat.format(JGitText.get().cannotReadFile, path), + e); + } + if (loose == null) { + return null; + } + int n = loose.buf.length; if (n == 0) return null; // empty file; not a reference. - if (isSymRef(buf, n)) { + if (isSymRef(loose.buf, n)) { if (n == limit) return null; // possibly truncated ref // trim trailing whitespace - while (0 < n && Character.isWhitespace(buf[n - 1])) + while (0 < n && Character.isWhitespace(loose.buf[n - 1])) n--; if (n < 6) { - String content = RawParseUtils.decode(buf, 0, n); + String content = RawParseUtils.decode(loose.buf, 0, n); throw new IOException(MessageFormat.format(JGitText.get().notARef, name, content)); } - final String target = RawParseUtils.decode(buf, 5, n); + final String target = RawParseUtils.decode(loose.buf, 5, n); if (ref != null && ref.isSymbolic() && ref.getTarget().getName().equals(target)) { assert(currentSnapshot != null); - currentSnapshot.setClean(otherSnapshot); + currentSnapshot.setClean(loose.snapshot); return ref; } - return newSymbolicRef(otherSnapshot, name, target); + return newSymbolicRef(loose.snapshot, name, target); } if (n < OBJECT_ID_STRING_LENGTH) @@ -1131,23 +1134,23 @@ LooseRef scanRef(LooseRef ref, String name) throws IOException { final ObjectId id; try { - id = ObjectId.fromString(buf, 0); + id = ObjectId.fromString(loose.buf, 0); if (ref != null && !ref.isSymbolic() && id.equals(ref.getTarget().getObjectId())) { assert(currentSnapshot != null); - currentSnapshot.setClean(otherSnapshot); + currentSnapshot.setClean(loose.snapshot); return ref; } } catch (IllegalArgumentException notRef) { - while (0 < n && Character.isWhitespace(buf[n - 1])) + while (0 < n && Character.isWhitespace(loose.buf[n - 1])) n--; - String content = RawParseUtils.decode(buf, 0, n); + String content = RawParseUtils.decode(loose.buf, 0, n); throw new IOException(MessageFormat.format(JGitText.get().notARef, name, content), notRef); } - return new LooseUnpeeled(otherSnapshot, name, id); + return new LooseUnpeeled(loose.snapshot, name, id); } private static boolean isSymRef(byte[] buf, int n) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/BaseSearch.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/BaseSearch.java index 1c24aff..cda456c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/BaseSearch.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/BaseSearch.java
@@ -142,6 +142,7 @@ private static int nextSlash(byte[] pathBuf, int ptr, int end) { return ptr; } + @SuppressWarnings("ReferenceEquality") private void add(AnyObjectId id, int objectType, int pathHash) { ObjectToPack obj = new ObjectToPack(id, objectType); obj.setEdge();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CommitConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CommitConfig.java index 55cc026..6a9b45b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CommitConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CommitConfig.java
@@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Julian Ruppel <julian.ruppel@sap.com> + * Copyright (c) 2020, 2022 Julian Ruppel <julian.ruppel@sap.com> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -29,6 +29,7 @@ import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.RawParseUtils; +import org.eclipse.jgit.util.StringUtils; /** * The standard "commit" configuration parameters. @@ -44,6 +45,9 @@ public class CommitConfig { private static final String CUT = " ------------------------ >8 ------------------------\n"; //$NON-NLS-1$ + private static final char[] COMMENT_CHARS = { '#', ';', '@', '!', '$', '%', + '^', '&', '|', ':' }; + /** * How to clean up commit messages when committing. * @@ -99,6 +103,10 @@ public boolean matchConfigValue(String in) { private CleanupMode cleanupMode; + private char commentCharacter = '#'; + + private boolean autoCommentChar = false; + private CommitConfig(Config rc) { commitTemplatePath = rc.getString(ConfigConstants.CONFIG_COMMIT_SECTION, null, ConfigConstants.CONFIG_KEY_COMMIT_TEMPLATE); @@ -106,6 +114,18 @@ private CommitConfig(Config rc) { null, ConfigConstants.CONFIG_KEY_COMMIT_ENCODING); cleanupMode = rc.getEnum(ConfigConstants.CONFIG_COMMIT_SECTION, null, ConfigConstants.CONFIG_KEY_CLEANUP, CleanupMode.DEFAULT); + String comment = rc.getString(ConfigConstants.CONFIG_CORE_SECTION, null, + ConfigConstants.CONFIG_KEY_COMMENT_CHAR); + if (!StringUtils.isEmptyOrNull(comment)) { + if ("auto".equalsIgnoreCase(comment)) { //$NON-NLS-1$ + autoCommentChar = true; + } else { + char first = comment.charAt(0); + if (first > ' ' && first < 127) { + commentCharacter = first; + } + } + } } /** @@ -131,6 +151,51 @@ public String getCommitEncoding() { } /** + * Retrieves the comment character set by git config + * {@code core.commentChar}. + * + * @return the character to use for comments in commit messages + * @since 6.2 + */ + public char getCommentChar() { + return commentCharacter; + } + + /** + * Determines the comment character to use for a particular text. If + * {@code core.commentChar} is "auto", tries to determine an unused + * character; if none is found, falls back to '#'. Otherwise returns the + * character given by {@code core.commentChar}. + * + * @param text + * existing text + * + * @return the character to use + * @since 6.2 + */ + public char getCommentChar(String text) { + if (isAutoCommentChar()) { + char toUse = determineCommentChar(text); + if (toUse > 0) { + return toUse; + } + return '#'; + } + return getCommentChar(); + } + + /** + * Tells whether the comment character should be determined by choosing a + * character not occurring in a commit message. + * + * @return {@code true} if git config {@code core.commentChar} is "auto" + * @since 6.2 + */ + public boolean isAutoCommentChar() { + return autoCommentChar; + } + + /** * Retrieves the {@link CleanupMode} as given by git config * {@code commit.cleanup}. * @@ -315,4 +380,41 @@ private static boolean isComment(String text, char commentChar) { } return false; } + + /** + * Determines a comment character by choosing one from a limited set of + * 7-bit ASCII characters that do not occur in the given text at the + * beginning of any line. If none can be determined, {@code (char) 0} is + * returned. + * + * @param text + * to get a comment character for + * @return the comment character, or {@code (char) 0} if none could be + * determined + * @since 6.2 + */ + public static char determineCommentChar(String text) { + if (StringUtils.isEmptyOrNull(text)) { + return '#'; + } + final boolean[] inUse = new boolean[127]; + for (String line : text.split("\n")) { //$NON-NLS-1$ + int len = line.length(); + for (int i = 0; i < len; i++) { + char ch = line.charAt(i); + if (!Character.isWhitespace(ch)) { + if (ch >= 0 && ch < inUse.length) { + inUse[ch] = true; + } + break; + } + } + } + for (char candidate : COMMENT_CHARS) { + if (!inUse[candidate]) { + return candidate; + } + } + return (char) 0; + } } \ No newline at end of file
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java index 80d720a..8ad32d4 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
@@ -2,7 +2,7 @@ * Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com> * Copyright (C) 2010, Chris Aniszczyk <caniszczyk@gmail.com> * Copyright (C) 2012-2013, Robin Rosenberg - * Copyright (C) 2018-2021, Andre Bossert <andre.bossert@siemens.com> and others + * Copyright (C) 2018-2022, Andre Bossert <andre.bossert@siemens.com> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -203,6 +203,13 @@ public final class ConfigConstants { public static final String CONFIG_KEY_FORCE_SIGN_ANNOTATED = "forceSignAnnotated"; /** + * The "commentChar" key. + * + * @since 6.2 + */ + public static final String CONFIG_KEY_COMMENT_CHAR = "commentChar"; + + /** * The "hooksPath" key. * * @since 5.6
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSignatureVerifierFactory.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSignatureVerifierFactory.java index 4b1dbed..59775c4 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSignatureVerifierFactory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSignatureVerifierFactory.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2021, Thomas Wolf <thomas.wolf@paranor.ch> and others + * Copyright (C) 2021, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -26,20 +26,41 @@ public abstract class GpgSignatureVerifierFactory { private static final Logger LOG = LoggerFactory .getLogger(GpgSignatureVerifierFactory.class); - private static volatile GpgSignatureVerifierFactory defaultFactory = loadDefault(); + private static class DefaultFactory { - private static GpgSignatureVerifierFactory loadDefault() { - try { - ServiceLoader<GpgSignatureVerifierFactory> loader = ServiceLoader - .load(GpgSignatureVerifierFactory.class); - Iterator<GpgSignatureVerifierFactory> iter = loader.iterator(); - if (iter.hasNext()) { - return iter.next(); + private static volatile GpgSignatureVerifierFactory defaultFactory = loadDefault(); + + private static GpgSignatureVerifierFactory loadDefault() { + try { + ServiceLoader<GpgSignatureVerifierFactory> loader = ServiceLoader + .load(GpgSignatureVerifierFactory.class); + Iterator<GpgSignatureVerifierFactory> iter = loader.iterator(); + if (iter.hasNext()) { + return iter.next(); + } + } catch (ServiceConfigurationError e) { + LOG.error(e.getMessage(), e); } - } catch (ServiceConfigurationError e) { - LOG.error(e.getMessage(), e); + return null; } - return null; + + private DefaultFactory() { + // No instantiation + } + + public static GpgSignatureVerifierFactory getDefault() { + return defaultFactory; + } + + /** + * Sets the default factory. + * + * @param factory + * the new default factory + */ + public static void setDefault(GpgSignatureVerifierFactory factory) { + defaultFactory = factory; + } } /** @@ -48,7 +69,7 @@ private static GpgSignatureVerifierFactory loadDefault() { * @return the default factory or {@code null} if none set */ public static GpgSignatureVerifierFactory getDefault() { - return defaultFactory; + return DefaultFactory.getDefault(); } /** @@ -58,7 +79,7 @@ public static GpgSignatureVerifierFactory getDefault() { * the new default factory */ public static void setDefault(GpgSignatureVerifierFactory factory) { - defaultFactory = factory; + DefaultFactory.setDefault(factory); } /**
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSigner.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSigner.java index 5b32cf0..b25a61b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSigner.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSigner.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2018, Salesforce. and others + * Copyright (C) 2018, 2022 Salesforce 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 @@ -26,22 +26,38 @@ * @since 5.3 */ public abstract class GpgSigner { + private static final Logger LOG = LoggerFactory.getLogger(GpgSigner.class); - private static GpgSigner defaultSigner = loadGpgSigner(); + private static class DefaultSigner { - private static GpgSigner loadGpgSigner() { - try { - ServiceLoader<GpgSigner> loader = ServiceLoader - .load(GpgSigner.class); - Iterator<GpgSigner> iter = loader.iterator(); - if (iter.hasNext()) { - return iter.next(); + private static volatile GpgSigner defaultSigner = loadGpgSigner(); + + private static GpgSigner loadGpgSigner() { + try { + ServiceLoader<GpgSigner> loader = ServiceLoader + .load(GpgSigner.class); + Iterator<GpgSigner> iter = loader.iterator(); + if (iter.hasNext()) { + return iter.next(); + } + } catch (ServiceConfigurationError e) { + LOG.error(e.getMessage(), e); } - } catch (ServiceConfigurationError e) { - LOG.error(e.getMessage(), e); + return null; } - return null; + + private DefaultSigner() { + // No instantiation + } + + public static GpgSigner getDefault() { + return defaultSigner; + } + + public static void setDefault(GpgSigner signer) { + defaultSigner = signer; + } } /** @@ -50,7 +66,7 @@ private static GpgSigner loadGpgSigner() { * @return the default signer, or <code>null</code>. */ public static GpgSigner getDefault() { - return defaultSigner; + return DefaultSigner.getDefault(); } /** @@ -61,7 +77,7 @@ public static GpgSigner getDefault() { * default. */ public static void setDefault(GpgSigner signer) { - GpgSigner.defaultSigner = signer; + DefaultSigner.setDefault(signer); } /**
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommit.java b/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommit.java index 94e7c53..c11fca1 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommit.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommit.java
@@ -138,6 +138,7 @@ public final PlotCommit getChild(int nth) { * the commit to test. * @return true if the given commit built on top of this commit. */ + @SuppressWarnings("ReferenceEquality") public final boolean isChild(PlotCommit c) { for (PlotCommit a : children) if (a == c)
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java b/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java index 18ea756..458f240 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java
@@ -92,6 +92,7 @@ public void findPassingThrough(final PlotCommit<L> currCommit, } /** {@inheritDoc} */ + @SuppressWarnings("ReferenceEquality") @Override protected void enter(int index, PlotCommit<L> currCommit) { setupChildren(currCommit); @@ -188,6 +189,7 @@ private void continueActiveLanes(PlotCommit currCommit) { * may be null if <code>currCommit</code> is the first commit on * the lane */ + @SuppressWarnings("ReferenceEquality") private void handleBlockedLanes(final int index, final PlotCommit currCommit, final PlotCommit childOnLane) { for (PlotCommit child : currCommit.children) { @@ -214,6 +216,7 @@ private void handleBlockedLanes(final int index, final PlotCommit currCommit, } // Handles the case where currCommit is a non-first parent of the child + @SuppressWarnings("ReferenceEquality") private PlotLane handleMerge(final int index, final PlotCommit currCommit, final PlotCommit childOnLane, PlotCommit child, PlotLane laneToUse) { @@ -287,6 +290,7 @@ private PlotLane handleMerge(final int index, final PlotCommit currCommit, * @param child * @param laneToContinue */ + @SuppressWarnings("ReferenceEquality") private void drawLaneToChild(final int commitIndex, PlotCommit child, PlotLane laneToContinue) { for (int r = commitIndex - 1; r >= 0; r--) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RewriteGenerator.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RewriteGenerator.java index a928c2e..4565a4b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RewriteGenerator.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RewriteGenerator.java
@@ -58,6 +58,7 @@ int outputType() { return source.outputType() & ~NEEDS_REWRITE; } + @SuppressWarnings("ReferenceEquality") @Override RevCommit next() throws MissingObjectException, IncorrectObjectTypeException, IOException {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileBasedConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileBasedConfig.java index 7b5f00e..567e409 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileBasedConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileBasedConfig.java
@@ -20,7 +20,6 @@ import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.text.MessageFormat; @@ -37,15 +36,11 @@ import org.eclipse.jgit.util.FileUtils; import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.RawParseUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * The configuration file that is stored in the file of the file system. */ public class FileBasedConfig extends StoredConfig { - private static final Logger LOG = LoggerFactory - .getLogger(FileBasedConfig.class); private final File configFile; @@ -115,16 +110,15 @@ public final File getFile() { */ @Override public void load() throws IOException, ConfigInvalidException { - final int maxRetries = 5; - int retryDelayMillis = 20; - int retries = 0; - while (true) { - final FileSnapshot oldSnapshot = snapshot; - final FileSnapshot newSnapshot; - // don't use config in this snapshot to avoid endless recursion - newSnapshot = FileSnapshot.saveNoConfig(getFile()); - try { - final byte[] in = IO.readFully(getFile()); + try { + FileSnapshot[] lastSnapshot = { null }; + Boolean wasRead = FileUtils.readWithRetries(getFile(), f -> { + final FileSnapshot oldSnapshot = snapshot; + final FileSnapshot newSnapshot; + // don't use config in this snapshot to avoid endless recursion + newSnapshot = FileSnapshot.saveNoConfig(f); + lastSnapshot[0] = newSnapshot; + final byte[] in = IO.readFully(f); final ObjectId newHash = hash(in); if (hash.equals(newHash)) { if (oldSnapshot.equals(newSnapshot)) { @@ -145,47 +139,17 @@ public void load() throws IOException, ConfigInvalidException { snapshot = newSnapshot; hash = newHash; } - return; - } catch (FileNotFoundException noFile) { - // might be locked by another process (see exception Javadoc) - if (retries < maxRetries && configFile.exists()) { - if (LOG.isDebugEnabled()) { - LOG.debug(MessageFormat.format( - JGitText.get().configHandleMayBeLocked, - Integer.valueOf(retries)), noFile); - } - try { - Thread.sleep(retryDelayMillis); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - retries++; - retryDelayMillis *= 2; // max wait 1260 ms - continue; - } - if (configFile.exists()) { - throw noFile; - } + return Boolean.TRUE; + }); + if (wasRead == null) { clear(); - snapshot = newSnapshot; - return; - } catch (IOException e) { - if (FileUtils.isStaleFileHandle(e) - && retries < maxRetries) { - if (LOG.isDebugEnabled()) { - LOG.debug(MessageFormat.format( - JGitText.get().configHandleIsStale, - Integer.valueOf(retries)), e); - } - retries++; - continue; - } - throw new IOException(MessageFormat - .format(JGitText.get().cannotReadFile, getFile()), e); - } catch (ConfigInvalidException e) { - throw new ConfigInvalidException(MessageFormat - .format(JGitText.get().cannotReadFile, getFile()), e); + snapshot = lastSnapshot[0]; } + } catch (IOException e) { + throw e; + } catch (Exception e) { + throw new ConfigInvalidException(MessageFormat + .format(JGitText.get().cannotReadFile, getFile()), e); } }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java index f48e1e6..3f167cc 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java
@@ -1,7 +1,7 @@ /* * Copyright (C) 2008, 2010 Google Inc. * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> - * Copyright (C) 2008, 2020 Shawn O. Pearce <spearce@spearce.org> and others + * Copyright (C) 2008, 2022 Shawn O. Pearce <spearce@spearce.org> 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 @@ -1004,9 +1004,12 @@ private void receivePack(final ProgressMonitor monitor, OutputStream outputStream) throws IOException { onReceivePack(); InputStream input = in; - if (sideband) - input = new SideBandInputStream(input, monitor, getMessageWriter(), - outputStream); + SideBandInputStream sidebandIn = null; + if (sideband) { + sidebandIn = new SideBandInputStream(input, monitor, + getMessageWriter(), outputStream); + input = sidebandIn; + } try (ObjectInserter ins = local.newObjectInserter()) { PackParser parser = ins.newPackParser(input); @@ -1015,6 +1018,10 @@ private void receivePack(final ProgressMonitor monitor, parser.setLockMessage(lockMessage); packLock = parser.parse(monitor); ins.flush(); + } finally { + if (sidebandIn != null) { + sidebandIn.drainMessages(); + } } }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java index b87a85d..b7be59d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java
@@ -1,6 +1,6 @@ /* * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com> - * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others + * Copyright (C) 2008, 2022 Shawn O. Pearce <spearce@spearce.org> 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 @@ -194,10 +194,11 @@ protected void doPush(final ProgressMonitor monitor, // the other data channels. // int b = in.read(); - if (0 <= b) + if (0 <= b) { throw new TransportException(uri, MessageFormat.format( JGitText.get().expectedEOFReceived, Character.valueOf((char) b))); + } } } } catch (TransportException e) { @@ -205,6 +206,9 @@ protected void doPush(final ProgressMonitor monitor, } catch (Exception e) { throw new TransportException(uri, e.getMessage(), e); } finally { + if (in instanceof SideBandInputStream) { + ((SideBandInputStream) in).drainMessages(); + } close(); } }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java index 7d7b3ee..87e5476 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java
@@ -31,6 +31,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.errors.NotSupportedException; @@ -56,6 +57,12 @@ class FetchProcess { /** List of things we want to fetch from the remote repository. */ private final Collection<RefSpec> toFetch; + /** + * List of things we don't want to fetch from the remote repository or to + * the local repository. + */ + private final Collection<RefSpec> negativeRefSpecs; + /** Set of refs we will actually wind up asking to obtain. */ private final HashMap<ObjectId, Ref> askFor = new HashMap<>(); @@ -74,9 +81,12 @@ class FetchProcess { private Map<String, Ref> localRefs; - FetchProcess(Transport t, Collection<RefSpec> f) { + FetchProcess(Transport t, Collection<RefSpec> refSpecs) { transport = t; - toFetch = f; + toFetch = refSpecs.stream().filter(refSpec -> !refSpec.isNegative()) + .collect(Collectors.toList()); + negativeRefSpecs = refSpecs.stream().filter(RefSpec::isNegative) + .collect(Collectors.toList()); } void execute(ProgressMonitor monitor, FetchResult result, @@ -389,8 +399,13 @@ private boolean askForIsComplete() throws TransportException { private void expandWildcard(RefSpec spec, Set<Ref> matched) throws TransportException { for (Ref src : conn.getRefs()) { - if (spec.matchSource(src) && matched.add(src)) - want(src, spec.expandFromSource(src)); + if (spec.matchSource(src)) { + RefSpec expandedRefSpec = spec.expandFromSource(src); + if (!matchNegativeRefSpec(expandedRefSpec) + && matched.add(src)) { + want(src, expandedRefSpec); + } + } } } @@ -406,11 +421,27 @@ private void expandSingle(RefSpec spec, Set<Ref> matched) if (src == null) { throw new TransportException(MessageFormat.format(JGitText.get().remoteDoesNotHaveSpec, want)); } - if (matched.add(src)) { + if (!matchNegativeRefSpec(spec) && matched.add(src)) { want(src, spec); } } + private boolean matchNegativeRefSpec(RefSpec spec) { + for (RefSpec negativeRefSpec : negativeRefSpecs) { + if (negativeRefSpec.getSource() != null && spec.getSource() != null + && negativeRefSpec.matchSource(spec.getSource())) { + return true; + } + + if (negativeRefSpec.getDestination() != null + && spec.getDestination() != null && negativeRefSpec + .matchDestination(spec.getDestination())) { + return true; + } + } + return false; + } + private boolean localHasObject(ObjectId id) throws TransportException { try { return transport.local.getObjectDatabase().has(id);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushProcess.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushProcess.java index 942dad4..b59ae0c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushProcess.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushProcess.java
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com> and others + * Copyright (C) 2008, 2022 Marek Zawirski <marek.zawirski@gmail.com> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -166,6 +166,7 @@ PushResult execute(ProgressMonitor monitor) if (prePush != null) { try { prePush.setRefs(willBeAttempted); + prePush.setDryRun(transport.isDryRun()); prePush.call(); } catch (AbortedByHookException | IOException e) { throw new TransportException(e.getMessage(), e);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java index 56d0036..e36eecc 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java
@@ -53,6 +53,9 @@ public static boolean isWildcard(String s) { /** Is this the special ":" RefSpec? */ private boolean matching; + /** Is this a negative refspec. */ + private boolean negative; + /** * How strict to be about wildcards. * @@ -96,12 +99,23 @@ public RefSpec() { wildcard = false; srcName = Constants.HEAD; dstName = null; + negative =false; allowMismatchedWildcards = WildcardMode.REQUIRE_MATCH; } /** * Parse a ref specification for use during transport operations. * <p> + * {@link RefSpec}s can be regular or negative, regular RefSpecs indicate + * what to include in transport operations while negative RefSpecs indicate + * what to exclude in fetch. + * <p> + * Negative {@link RefSpec}s can't be force, must have only source or + * destination. Wildcard patterns are also supported in negative RefSpecs + * but they can not go with {@code WildcardMode.REQUIRE_MATCH} because they + * are natually one to many mappings. + * + * <p> * Specifications are typically one of the following forms: * <ul> * <li><code>refs/heads/master</code></li> @@ -121,6 +135,12 @@ public RefSpec() { * <li><code>refs/heads/*:refs/heads/master</code></li> * </ul> * + * Negative specifications are usually like: + * <ul> + * <li><code>^:refs/heads/master</code></li> + * <li><code>^refs/heads/*</code></li> + * </ul> + * * @param spec * string describing the specification. * @param mode @@ -133,11 +153,22 @@ public RefSpec() { public RefSpec(String spec, WildcardMode mode) { this.allowMismatchedWildcards = mode; String s = spec; + + if (s.startsWith("^+") || s.startsWith("+^")) { + throw new IllegalArgumentException( + JGitText.get().invalidNegativeAndForce); + } + if (s.startsWith("+")) { //$NON-NLS-1$ force = true; s = s.substring(1); } + if(s.startsWith("^")) { + negative = true; + s = s.substring(1); + } + boolean matchPushSpec = false; final int c = s.lastIndexOf(':'); if (c == 0) { @@ -181,6 +212,21 @@ public RefSpec(String spec, WildcardMode mode) { } srcName = checkValid(s); } + + // Negative refspecs must only have dstName or srcName. + if (isNegative()) { + if (isNullOrEmpty(srcName) && isNullOrEmpty(dstName)) { + throw new IllegalArgumentException(MessageFormat + .format(JGitText.get().invalidRefSpec, spec)); + } + if (!isNullOrEmpty(srcName) && !isNullOrEmpty(dstName)) { + throw new IllegalArgumentException(MessageFormat + .format(JGitText.get().invalidRefSpec, spec)); + } + if(wildcard && mode == WildcardMode.REQUIRE_MATCH) { + throw new IllegalArgumentException(MessageFormat + .format(JGitText.get().invalidRefSpec, spec));} + } matching = matchPushSpec; } @@ -205,13 +251,15 @@ public RefSpec(String spec, WildcardMode mode) { * the specification is invalid. */ public RefSpec(String spec) { - this(spec, WildcardMode.REQUIRE_MATCH); + this(spec, spec.startsWith("^") ? WildcardMode.ALLOW_MISMATCH + : WildcardMode.REQUIRE_MATCH); } private RefSpec(RefSpec p) { matching = false; force = p.isForceUpdate(); wildcard = p.isWildcard(); + negative = p.isNegative(); srcName = p.getSource(); dstName = p.getDestination(); allowMismatchedWildcards = p.allowMismatchedWildcards; @@ -246,6 +294,10 @@ public boolean isForceUpdate() { */ public RefSpec setForceUpdate(boolean forceUpdate) { final RefSpec r = new RefSpec(this); + if (forceUpdate && isNegative()) { + throw new IllegalArgumentException( + JGitText.get().invalidNegativeAndForce); + } r.matching = matching; r.force = forceUpdate; return r; @@ -265,6 +317,16 @@ public boolean isWildcard() { } /** + * Check if this specification is a negative one. + * + * @return true if this specification is negative. + * @since 6.2 + */ + public boolean isNegative() { + return negative; + } + + /** * Get the source ref description. * <p> * During a fetch this is the name of the ref on the remote repository we @@ -435,6 +497,10 @@ private RefSpec expandFromSourceImp(String name) { return this; } + private static boolean isNullOrEmpty(String refName) { + return refName == null || refName.isEmpty(); + } + /** * Expand this specification to exactly match a ref. * <p> @@ -570,6 +636,9 @@ public boolean equals(Object obj) { if (isForceUpdate() != b.isForceUpdate()) { return false; } + if(isNegative() != b.isNegative()) { + return false; + } if (isMatching()) { return b.isMatching(); } else if (b.isMatching()) { @@ -587,6 +656,9 @@ public String toString() { if (isForceUpdate()) { r.append('+'); } + if(isNegative()) { + r.append('^'); + } if (isMatching()) { r.append(':'); } else {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/RemoteConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/RemoteConfig.java index 2f3160b..c4e105e 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/RemoteConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/RemoteConfig.java
@@ -16,10 +16,7 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import org.eclipse.jgit.lib.Config; @@ -54,10 +51,6 @@ public class RemoteConfig implements Serializable { private static final String KEY_TIMEOUT = "timeout"; //$NON-NLS-1$ - private static final String KEY_INSTEADOF = "insteadof"; //$NON-NLS-1$ - - private static final String KEY_PUSHINSTEADOF = "pushinsteadof"; //$NON-NLS-1$ - private static final boolean DEFAULT_MIRROR = false; /** Default value for {@link #getUploadPack()} if not specified. */ @@ -135,10 +128,10 @@ public RemoteConfig(Config rc, String remoteName) String val; vlst = rc.getStringList(SECTION, name, KEY_URL); - Map<String, String> insteadOf = getReplacements(rc, KEY_INSTEADOF); + UrlConfig urls = new UrlConfig(rc); uris = new ArrayList<>(vlst.length); for (String s : vlst) { - uris.add(new URIish(replaceUri(s, insteadOf))); + uris.add(new URIish(urls.replace(s))); } String[] plst = rc.getStringList(SECTION, name, KEY_PUSHURL); pushURIs = new ArrayList<>(plst.length); @@ -148,11 +141,9 @@ public RemoteConfig(Config rc, String remoteName) if (pushURIs.isEmpty()) { // Would default to the uris. If we have pushinsteadof, we must // supply rewritten push uris. - Map<String, String> pushInsteadOf = getReplacements(rc, - KEY_PUSHINSTEADOF); - if (!pushInsteadOf.isEmpty()) { + if (urls.hasPushReplacements()) { for (String s : vlst) { - String replaced = replaceUri(s, pushInsteadOf); + String replaced = urls.replacePush(s); if (!s.equals(replaced)) { pushURIs.add(new URIish(replaced)); } @@ -248,39 +239,6 @@ private void unset(Config rc, String key) { rc.unset(SECTION, getName(), key); } - private Map<String, String> getReplacements(final Config config, - final String keyName) { - final Map<String, String> replacements = new HashMap<>(); - for (String url : config.getSubsections(KEY_URL)) - for (String insteadOf : config.getStringList(KEY_URL, url, keyName)) - replacements.put(insteadOf, url); - return replacements; - } - - private String replaceUri(final String uri, - final Map<String, String> replacements) { - if (replacements.isEmpty()) { - return uri; - } - Entry<String, String> match = null; - for (Entry<String, String> replacement : replacements.entrySet()) { - // Ignore current entry if not longer than previous match - if (match != null - && match.getKey().length() > replacement.getKey() - .length()) { - continue; - } - if (!uri.startsWith(replacement.getKey())) { - continue; - } - match = replacement; - } - if (match != null) { - return match.getValue() + uri.substring(match.getKey().length()); - } - return uri; - } - /** * Get the local name this remote configuration is recognized as. *
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java index 8a8d977..96c7be5 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java
@@ -1,6 +1,6 @@ /* * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> - * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others + * Copyright (C) 2008, 2022 Shawn O. Pearce <spearce@spearce.org> 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 @@ -28,6 +28,8 @@ import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.RawParseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Unmultiplexes the data portion of a side-band channel. @@ -46,6 +48,10 @@ * @since 4.11 */ public class SideBandInputStream extends InputStream { + + private static final Logger LOG = LoggerFactory + .getLogger(SideBandInputStream.class); + static final int CH_DATA = 1; static final int CH_PROGRESS = 2; static final int CH_ERROR = 3; @@ -210,6 +216,21 @@ private void beginTask(int totalWorkUnits) { monitor.beginTask(remote(currentTask), totalWorkUnits); } + /** + * Forces any buffered progress messages to be written. + */ + void drainMessages() { + if (!progressBuffer.isEmpty()) { + try { + progress("\n"); //$NON-NLS-1$ + } catch (IOException e) { + // Just log; otherwise this IOException might hide a real + // TransportException + LOG.error(e.getMessage(), e); + } + } + } + private static String remote(String msg) { String prefix = JGitText.get().prefixRemote; StringBuilder r = new StringBuilder(prefix.length() + msg.length() + 1);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SshSessionFactory.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SshSessionFactory.java index 1e98a56..a0194ea 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SshSessionFactory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SshSessionFactory.java
@@ -1,6 +1,6 @@ /* * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> - * Copyright (C) 2008, 2020 Shawn O. Pearce <spearce@spearce.org> and others + * Copyright (C) 2008, 2022 Shawn O. Pearce <spearce@spearce.org> 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 @@ -36,15 +36,35 @@ */ public abstract class SshSessionFactory { - private static volatile SshSessionFactory INSTANCE = loadSshSessionFactory(); + private static class DefaultFactory { - private static SshSessionFactory loadSshSessionFactory() { - ServiceLoader<SshSessionFactory> loader = ServiceLoader.load(SshSessionFactory.class); - Iterator<SshSessionFactory> iter = loader.iterator(); - if(iter.hasNext()) { - return iter.next(); + private static volatile SshSessionFactory INSTANCE = loadSshSessionFactory(); + + private static SshSessionFactory loadSshSessionFactory() { + ServiceLoader<SshSessionFactory> loader = ServiceLoader + .load(SshSessionFactory.class); + Iterator<SshSessionFactory> iter = loader.iterator(); + if (iter.hasNext()) { + return iter.next(); + } + return null; } - return null; + + private DefaultFactory() { + // No instantiation + } + + public static SshSessionFactory getInstance() { + return INSTANCE; + } + + public static void setInstance(SshSessionFactory newFactory) { + if (newFactory != null) { + INSTANCE = newFactory; + } else { + INSTANCE = loadSshSessionFactory(); + } + } } /** @@ -57,7 +77,7 @@ private static SshSessionFactory loadSshSessionFactory() { * @return factory the current factory for this JVM. */ public static SshSessionFactory getInstance() { - return INSTANCE; + return DefaultFactory.getInstance(); } /** @@ -68,11 +88,7 @@ public static SshSessionFactory getInstance() { * {@code null} the default factory will be restored. */ public static void setInstance(SshSessionFactory newFactory) { - if (newFactory != null) { - INSTANCE = newFactory; - } else { - INSTANCE = loadSshSessionFactory(); - } + DefaultFactory.setInstance(newFactory); } /**
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java index 0eab443..3222d63 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
@@ -1230,7 +1230,9 @@ public void setPushOptions(List<String> pushOptions) { * @param toFetch * specification of refs to fetch locally. May be null or the * empty collection to use the specifications from the - * RemoteConfig. Source for each RefSpec can't be null. + * RemoteConfig. May contains regular and negative + * {@link RefSpec}s. Source for each regular RefSpec can't + * be null. * @return information describing the tracking refs updated. * @throws org.eclipse.jgit.errors.NotSupportedException * this transport implementation does not support fetching @@ -1264,7 +1266,9 @@ public FetchResult fetch(final ProgressMonitor monitor, * @param toFetch * specification of refs to fetch locally. May be null or the * empty collection to use the specifications from the - * RemoteConfig. Source for each RefSpec can't be null. + * RemoteConfig. May contains regular and negative + * {@link RefSpec}s. Source for each regular RefSpec can't + * be null. * @param branch * the initial branch to check out when cloning the repository. * Can be specified as ref name (<code>refs/heads/master</code>),
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UrlConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UrlConfig.java new file mode 100644 index 0000000..574fcf8 --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UrlConfig.java
@@ -0,0 +1,120 @@ +/* + * Copyright (C) 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.transport; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.eclipse.jgit.lib.Config; + +/** + * Support for URL translations via git configs {@code url.<base>.insteadOf} and + * {@code url.<base>.pushInsteadOf}. + * + * @since 6.2 + */ +public class UrlConfig { + + private static final String KEY_INSTEADOF = "insteadof"; //$NON-NLS-1$ + + private static final String KEY_PUSHINSTEADOF = "pushinsteadof"; //$NON-NLS-1$ + + private static final String SECTION_URL = "url"; //$NON-NLS-1$ + + private final Config config; + + private Map<String, String> insteadOf; + + private Map<String, String> pushInsteadOf; + + /** + * Creates a new {@link UrlConfig} instance. + * + * @param config + * {@link Config} to read values from + */ + public UrlConfig(Config config) { + this.config = config; + } + + /** + * Performs replacements as defined by git config + * {@code url.<base>.insteadOf}. If there is no match, the input is returned + * unchanged. + * + * @param url + * to substitute + * @return the {@code url} with substitution applied + */ + public String replace(String url) { + if (insteadOf == null) { + insteadOf = load(KEY_INSTEADOF); + } + return replace(url, insteadOf); + } + + /** + * Tells whether there are push replacements. + * + * @return {@code true} if there are push replacements, {@code false} + * otherwise + */ + public boolean hasPushReplacements() { + if (pushInsteadOf == null) { + pushInsteadOf = load(KEY_PUSHINSTEADOF); + } + return !pushInsteadOf.isEmpty(); + } + + /** + * Performs replacements as defined by git config + * {@code url.<base>.pushInsteadOf}. If there is no match, the input is + * returned unchanged. + * + * @param url + * to substitute + * @return the {@code url} with substitution applied + */ + public String replacePush(String url) { + if (pushInsteadOf == null) { + pushInsteadOf = load(KEY_PUSHINSTEADOF); + } + return replace(url, pushInsteadOf); + } + + private Map<String, String> load(String key) { + Map<String, String> replacements = new HashMap<>(); + for (String url : config.getSubsections(SECTION_URL)) { + for (String prefix : config.getStringList(SECTION_URL, url, key)) { + replacements.put(prefix, url); + } + } + return replacements; + } + + private String replace(String uri, Map<String, String> replacements) { + Entry<String, String> match = null; + for (Entry<String, String> replacement : replacements.entrySet()) { + // Ignore current entry if not longer than previous match + if (match != null && match.getKey().length() > replacement.getKey() + .length()) { + continue; + } + if (uri.startsWith(replacement.getKey())) { + match = replacement; + } + } + if (match != null) { + return match.getValue() + uri.substring(match.getKey().length()); + } + return uri; + } +}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java index b9dd9ba..f013e7e 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java
@@ -17,6 +17,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InterruptedIOException; import java.nio.channels.FileChannel; import java.nio.file.AtomicMoveNotSupportedException; import java.nio.file.CopyOption; @@ -655,6 +656,99 @@ && isStaleFileHandle((IOException) throwable)) { } /** + * Like a {@link java.util.function.Function} but throwing an + * {@link Exception}. + * + * @param <A> + * input type + * @param <B> + * output type + * @since 6.2 + */ + @FunctionalInterface + public interface IOFunction<A, B> { + + /** + * Performs the function. + * + * @param t + * input to operate on + * @return the output + * @throws Exception + * if a problem occurs + */ + B apply(A t) throws Exception; + } + + private static void backOff(long delay, IOException cause) + throws IOException { + try { + Thread.sleep(delay); + } catch (InterruptedException e) { + IOException interruption = new InterruptedIOException(); + interruption.initCause(e); + interruption.addSuppressed(cause); + Thread.currentThread().interrupt(); // Re-set flag + throw interruption; + } + } + + /** + * Invokes the given {@link IOFunction}, performing a limited number of + * re-tries if exceptions occur that indicate either a stale NFS file handle + * or that indicate that the file may be written concurrently. + * + * @param <T> + * result type + * @param file + * to read + * @param reader + * for reading the file and creating an instance of {@code T} + * @return the result of the {@code reader}, or {@code null} if the file + * does not exist + * @throws Exception + * if a problem occurs + * @since 6.2 + */ + public static <T> T readWithRetries(File file, + IOFunction<File, ? extends T> reader) + throws Exception { + int maxStaleRetries = 5; + int retries = 0; + long backoff = 50; + while (true) { + try { + try { + return reader.apply(file); + } catch (IOException e) { + if (FileUtils.isStaleFileHandleInCausalChain(e) + && retries < maxStaleRetries) { + if (LOG.isDebugEnabled()) { + LOG.debug(MessageFormat.format( + JGitText.get().packedRefsHandleIsStale, + Integer.valueOf(retries)), e); + } + retries++; + continue; + } + throw e; + } + } catch (FileNotFoundException noFile) { + if (!file.isFile()) { + return null; + } + // Probably Windows and some other thread is writing the file + // concurrently. + if (backoff > 1000) { + throw noFile; + } + backOff(backoff, noFile); + backoff *= 2; // 50, 100, 200, 400, 800 ms + } + } + } + + /** * @param file * @return {@code true} if the passed file is a symbolic link */
diff --git a/pom.xml b/pom.xml index 81093c0..53afbbe 100644 --- a/pom.xml +++ b/pom.xml
@@ -18,7 +18,7 @@ <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit-parent</artifactId> <packaging>pom</packaging> - <version>6.1.1-SNAPSHOT</version> + <version>6.2.0-SNAPSHOT</version> <name>JGit - Parent</name> <url>${jgit-url}</url> @@ -150,11 +150,11 @@ <java.version>11</java.version> <bundle-manifest>${project.build.directory}/META-INF/MANIFEST.MF</bundle-manifest> - <jgit-last-release-version>6.0.0.202111291000-r</jgit-last-release-version> + <jgit-last-release-version>6.1.0.202203080745-r</jgit-last-release-version> <ant-version>1.10.12</ant-version> <apache-sshd-version>2.8.0</apache-sshd-version> <jsch-version>0.1.55</jsch-version> - <jzlib-version>1.1.1</jzlib-version> + <jzlib-version>1.1.3</jzlib-version> <javaewah-version>1.1.13</javaewah-version> <junit-version>4.13.2</junit-version> <test-fork-count>1C</test-fork-count> @@ -168,7 +168,7 @@ <httpcore-version>4.4.14</httpcore-version> <slf4j-version>1.7.30</slf4j-version> <maven-javadoc-plugin-version>3.3.1</maven-javadoc-plugin-version> - <tycho-extras-version>2.5.0</tycho-extras-version> + <tycho-extras-version>2.6.0</tycho-extras-version> <gson-version>2.8.9</gson-version> <bouncycastle-version>1.70</bouncycastle-version> <spotbugs-maven-plugin-version>4.3.0</spotbugs-maven-plugin-version>