Merge branch 'stable-4.9' into stable-4.10
* stable-4.9: Prepare 4.9.9-SNAPSHOT builds JGit v4.9.8.201812241815-r UploadPack: Test filtering by AdvertiseRefsHook in stateless transports Prepare 4.7.8-SNAPSHOT builds JGit v4.7.7.201812240805-r Fix feature versions imported by feature org.eclipse.jgit.pgm Prepare 4.5.6-SNAPSHOT builds JGit v4.5.5.201812240535-r Call AdvertiseRefsHook before validating wants Change-Id: I2e499f34b1c481af794fa9325b0dfebaccdf3cb0 Signed-off-by: Jonathan Nieder <jrn@google.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
commit
60a606a261
|
@ -46,5 +46,7 @@ Import-Package: javax.servlet;version="[2.5.0,3.2.0)",
|
|||
org.eclipse.jgit.util;version="[4.10.1,4.11.0)",
|
||||
org.hamcrest.core;version="[1.1.0,2.0.0)",
|
||||
org.junit;version="[4.12,5.0.0)",
|
||||
org.junit.rules;version="[4.12,5.0.0)",
|
||||
org.junit.runner;version="[4.12,5.0.0)",
|
||||
org.junit.runners;version="[4.12,5.0.0)"
|
||||
Require-Bundle: org.hamcrest.library;bundle-version="[1.1.0,2.0.0)"
|
||||
|
|
|
@ -70,6 +70,13 @@
|
|||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-library</artifactId>
|
||||
<scope>test</scope>
|
||||
<version>[1.1.0,2.0.0)</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jgit</groupId>
|
||||
<artifactId>org.eclipse.jgit</artifactId>
|
||||
|
|
|
@ -85,6 +85,7 @@
|
|||
import org.eclipse.jgit.errors.TransportException;
|
||||
import org.eclipse.jgit.errors.UnsupportedCredentialItem;
|
||||
import org.eclipse.jgit.http.server.GitServlet;
|
||||
import org.eclipse.jgit.http.server.resolver.DefaultUploadPackFactory;
|
||||
import org.eclipse.jgit.internal.JGitText;
|
||||
import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
|
||||
import org.eclipse.jgit.junit.TestRepository;
|
||||
|
@ -105,24 +106,35 @@
|
|||
import org.eclipse.jgit.lib.StoredConfig;
|
||||
import org.eclipse.jgit.revwalk.RevBlob;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import org.eclipse.jgit.storage.file.FileBasedConfig;
|
||||
import org.eclipse.jgit.transport.AbstractAdvertiseRefsHook;
|
||||
import org.eclipse.jgit.transport.AdvertiseRefsHook;
|
||||
import org.eclipse.jgit.transport.CredentialItem;
|
||||
import org.eclipse.jgit.transport.CredentialsProvider;
|
||||
import org.eclipse.jgit.transport.FetchConnection;
|
||||
import org.eclipse.jgit.transport.HttpTransport;
|
||||
import org.eclipse.jgit.transport.RefSpec;
|
||||
import org.eclipse.jgit.transport.RemoteRefUpdate;
|
||||
import org.eclipse.jgit.transport.Transport;
|
||||
import org.eclipse.jgit.transport.TransportHttp;
|
||||
import org.eclipse.jgit.transport.URIish;
|
||||
import org.eclipse.jgit.transport.UploadPack;
|
||||
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
|
||||
import org.eclipse.jgit.transport.http.HttpConnectionFactory;
|
||||
import org.eclipse.jgit.transport.http.JDKHttpConnectionFactory;
|
||||
import org.eclipse.jgit.transport.http.apache.HttpClientConnectionFactory;
|
||||
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
|
||||
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
||||
import org.eclipse.jgit.transport.resolver.UploadPackFactory;
|
||||
import org.eclipse.jgit.util.FS;
|
||||
import org.eclipse.jgit.util.HttpSupport;
|
||||
import org.eclipse.jgit.util.SystemReader;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.junit.runners.Parameterized.Parameters;
|
||||
|
@ -131,6 +143,11 @@
|
|||
public class SmartClientSmartServerTest extends HttpTestCase {
|
||||
private static final String HDR_TRANSFER_ENCODING = "Transfer-Encoding";
|
||||
|
||||
@Rule
|
||||
public ExpectedException thrown = ExpectedException.none();
|
||||
|
||||
private AdvertiseRefsHook advertiseRefsHook;
|
||||
|
||||
private Repository remoteRepository;
|
||||
|
||||
private CredentialsProvider testCredentials = new UsernamePasswordCredentialsProvider(
|
||||
|
@ -148,7 +165,7 @@ public class SmartClientSmartServerTest extends HttpTestCase {
|
|||
|
||||
private RevBlob A_txt;
|
||||
|
||||
private RevCommit A, B;
|
||||
private RevCommit A, B, unreachableCommit;
|
||||
|
||||
@Parameters
|
||||
public static Collection<Object[]> data() {
|
||||
|
@ -175,6 +192,19 @@ public void setUp() throws Exception {
|
|||
ConfigConstants.CONFIG_KEY_LOGALLREFUPDATES, true);
|
||||
|
||||
GitServlet gs = new GitServlet();
|
||||
gs.setUploadPackFactory(new UploadPackFactory<HttpServletRequest>() {
|
||||
@Override
|
||||
public UploadPack create(HttpServletRequest req, Repository db)
|
||||
throws ServiceNotEnabledException,
|
||||
ServiceNotAuthorizedException {
|
||||
DefaultUploadPackFactory f = new DefaultUploadPackFactory();
|
||||
UploadPack up = f.create(req, db);
|
||||
if (advertiseRefsHook != null) {
|
||||
up.setAdvertiseRefsHook(advertiseRefsHook);
|
||||
}
|
||||
return up;
|
||||
}
|
||||
});
|
||||
|
||||
ServletContextHandler app = addNormalContext(gs, src, srcName);
|
||||
|
||||
|
@ -200,6 +230,8 @@ public void setUp() throws Exception {
|
|||
B = src.commit().parent(A).add("A_txt", "C").add("B", "B").create();
|
||||
src.update(master, B);
|
||||
|
||||
unreachableCommit = src.commit().add("A_txt", A_txt).create();
|
||||
|
||||
src.update("refs/garbage/a/very/long/ref/name/to/compress", B);
|
||||
}
|
||||
|
||||
|
@ -455,6 +487,56 @@ public void testListRemote_BadName() throws IOException, URISyntaxException {
|
|||
info.getResponseHeader(HDR_CONTENT_TYPE));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFetchBySHA1() throws Exception {
|
||||
Repository dst = createBareRepository();
|
||||
assertFalse(dst.hasObject(A_txt));
|
||||
|
||||
try (Transport t = Transport.open(dst, remoteURI)) {
|
||||
t.fetch(NullProgressMonitor.INSTANCE,
|
||||
Collections.singletonList(new RefSpec(B.name())));
|
||||
}
|
||||
|
||||
assertTrue(dst.hasObject(A_txt));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFetchBySHA1Unreachable() throws Exception {
|
||||
Repository dst = createBareRepository();
|
||||
assertFalse(dst.hasObject(A_txt));
|
||||
|
||||
try (Transport t = Transport.open(dst, remoteURI)) {
|
||||
thrown.expect(TransportException.class);
|
||||
thrown.expectMessage(Matchers.containsString(
|
||||
"want " + unreachableCommit.name() + " not valid"));
|
||||
t.fetch(NullProgressMonitor.INSTANCE, Collections
|
||||
.singletonList(new RefSpec(unreachableCommit.name())));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFetchBySHA1UnreachableByAdvertiseRefsHook()
|
||||
throws Exception {
|
||||
Repository dst = createBareRepository();
|
||||
assertFalse(dst.hasObject(A_txt));
|
||||
|
||||
advertiseRefsHook = new AbstractAdvertiseRefsHook() {
|
||||
@Override
|
||||
protected Map<String, Ref> getAdvertisedRefs(Repository repository,
|
||||
RevWalk revWalk) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
};
|
||||
|
||||
try (Transport t = Transport.open(dst, remoteURI)) {
|
||||
thrown.expect(TransportException.class);
|
||||
thrown.expectMessage(Matchers.containsString(
|
||||
"want " + A.name() + " not valid"));
|
||||
t.fetch(NullProgressMonitor.INSTANCE, Collections
|
||||
.singletonList(new RefSpec(A.name())));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitialClone_Small() throws Exception {
|
||||
Repository dst = createBareRepository();
|
||||
|
|
|
@ -85,7 +85,6 @@
|
|||
import org.eclipse.jgit.lib.ObjectReader;
|
||||
import org.eclipse.jgit.lib.ProgressMonitor;
|
||||
import org.eclipse.jgit.lib.Ref;
|
||||
import org.eclipse.jgit.lib.RefDatabase;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.revwalk.AsyncRevObjectQueue;
|
||||
import org.eclipse.jgit.revwalk.BitmapWalker;
|
||||
|
@ -764,8 +763,14 @@ public PackStatistics getStatistics() {
|
|||
}
|
||||
|
||||
private Map<String, Ref> getAdvertisedOrDefaultRefs() throws IOException {
|
||||
if (refs == null)
|
||||
setAdvertisedRefs(db.getRefDatabase().getRefs(RefDatabase.ALL));
|
||||
if (refs != null) {
|
||||
return refs;
|
||||
}
|
||||
|
||||
advertiseRefsHook.advertiseRefs(this);
|
||||
if (refs == null) {
|
||||
setAdvertisedRefs(db.getRefDatabase().getRefs(ALL));
|
||||
}
|
||||
return refs;
|
||||
}
|
||||
|
||||
|
@ -944,15 +949,7 @@ private void verifyClientShallow()
|
|||
*/
|
||||
public void sendAdvertisedRefs(final RefAdvertiser adv) throws IOException,
|
||||
ServiceMayNotContinueException {
|
||||
try {
|
||||
advertiseRefsHook.advertiseRefs(this);
|
||||
} catch (ServiceMayNotContinueException fail) {
|
||||
if (fail.getMessage() != null) {
|
||||
adv.writeOne("ERR " + fail.getMessage()); //$NON-NLS-1$
|
||||
fail.setOutput();
|
||||
}
|
||||
throw fail;
|
||||
}
|
||||
Map<String, Ref> advertisedOrDefaultRefs = getAdvertisedOrDefaultRefs();
|
||||
|
||||
adv.init(db);
|
||||
adv.advertiseCapability(OPTION_INCLUDE_TAG);
|
||||
|
@ -977,7 +974,6 @@ public void sendAdvertisedRefs(final RefAdvertiser adv) throws IOException,
|
|||
adv.advertiseCapability(OPTION_ALLOW_REACHABLE_SHA1_IN_WANT);
|
||||
adv.advertiseCapability(OPTION_AGENT, UserAgent.get());
|
||||
adv.setDerefTags(true);
|
||||
Map<String, Ref> advertisedOrDefaultRefs = getAdvertisedOrDefaultRefs();
|
||||
findSymrefs(adv, advertisedOrDefaultRefs);
|
||||
advertised = adv.send(advertisedOrDefaultRefs);
|
||||
if (adv.isEmpty())
|
||||
|
|
Loading…
Reference in New Issue