Merge "Transport: Implement AutoCloseable"
This commit is contained in:
commit
a693d7b33c
|
@ -140,8 +140,7 @@ public void testListRemote() throws IOException {
|
|||
assertEquals("http", remoteURI.getScheme());
|
||||
|
||||
Map<String, Ref> map;
|
||||
Transport t = Transport.open(dst, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, remoteURI)) {
|
||||
// I didn't make up these public interface names, I just
|
||||
// approved them for inclusion into the code base. Sorry.
|
||||
// --spearce
|
||||
|
@ -149,14 +148,9 @@ public void testListRemote() throws IOException {
|
|||
assertTrue("isa TransportHttp", t instanceof TransportHttp);
|
||||
assertTrue("isa HttpTransport", t instanceof HttpTransport);
|
||||
|
||||
FetchConnection c = t.openFetch();
|
||||
try {
|
||||
try (FetchConnection c = t.openFetch()) {
|
||||
map = c.getRefsMap();
|
||||
} finally {
|
||||
c.close();
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
assertNotNull("have map of refs", map);
|
||||
|
@ -201,11 +195,8 @@ public void testInitialClone_Loose() throws Exception {
|
|||
Repository dst = createBareRepository();
|
||||
assertFalse(dst.hasObject(A_txt));
|
||||
|
||||
Transport t = Transport.open(dst, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, remoteURI)) {
|
||||
t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
assertTrue(dst.hasObject(A_txt));
|
||||
|
@ -226,11 +217,8 @@ public void testInitialClone_Packed() throws Exception {
|
|||
Repository dst = createBareRepository();
|
||||
assertFalse(dst.hasObject(A_txt));
|
||||
|
||||
Transport t = Transport.open(dst, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, remoteURI)) {
|
||||
t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
assertTrue(dst.hasObject(A_txt));
|
||||
|
@ -265,8 +253,7 @@ public void testPushNotSupported() throws Exception {
|
|||
final RevCommit Q = src.commit().create();
|
||||
final Repository db = src.getRepository();
|
||||
|
||||
Transport t = Transport.open(db, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(db, remoteURI)) {
|
||||
try {
|
||||
t.push(NullProgressMonitor.INSTANCE, push(src, Q));
|
||||
fail("push incorrectly completed against a dumb server");
|
||||
|
@ -274,8 +261,6 @@ public void testPushNotSupported() throws Exception {
|
|||
String exp = "remote does not support smart HTTP push";
|
||||
assertEquals(exp, nse.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -157,8 +157,7 @@ private static String nameOf(final Repository db) {
|
|||
public void testRepositoryNotFound_Dumb() throws Exception {
|
||||
URIish uri = toURIish("/dumb.none/not-found");
|
||||
Repository dst = createBareRepository();
|
||||
Transport t = Transport.open(dst, uri);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, uri)) {
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("connection opened to not found repository");
|
||||
|
@ -167,8 +166,6 @@ public void testRepositoryNotFound_Dumb() throws Exception {
|
|||
+ "/info/refs?service=git-upload-pack not found";
|
||||
assertEquals(exp, err.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -176,8 +173,7 @@ public void testRepositoryNotFound_Dumb() throws Exception {
|
|||
public void testRepositoryNotFound_Smart() throws Exception {
|
||||
URIish uri = toURIish("/smart.none/not-found");
|
||||
Repository dst = createBareRepository();
|
||||
Transport t = Transport.open(dst, uri);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, uri)) {
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("connection opened to not found repository");
|
||||
|
@ -186,8 +182,6 @@ public void testRepositoryNotFound_Smart() throws Exception {
|
|||
+ "/info/refs?service=git-upload-pack not found";
|
||||
assertEquals(exp, err.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -201,16 +195,9 @@ public void testListRemote_Dumb_DetachedHEAD() throws Exception {
|
|||
|
||||
Repository dst = createBareRepository();
|
||||
Ref head;
|
||||
Transport t = Transport.open(dst, dumbAuthNoneURI);
|
||||
try {
|
||||
FetchConnection c = t.openFetch();
|
||||
try {
|
||||
head = c.getRef(Constants.HEAD);
|
||||
} finally {
|
||||
c.close();
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
try (Transport t = Transport.open(dst, dumbAuthNoneURI);
|
||||
FetchConnection c = t.openFetch()) {
|
||||
head = c.getRef(Constants.HEAD);
|
||||
}
|
||||
assertNotNull("has " + Constants.HEAD, head);
|
||||
assertEquals(Q, head.getObjectId());
|
||||
|
@ -225,16 +212,9 @@ public void testListRemote_Dumb_NoHEAD() throws Exception {
|
|||
|
||||
Repository dst = createBareRepository();
|
||||
Ref head;
|
||||
Transport t = Transport.open(dst, dumbAuthNoneURI);
|
||||
try {
|
||||
FetchConnection c = t.openFetch();
|
||||
try {
|
||||
head = c.getRef(Constants.HEAD);
|
||||
} finally {
|
||||
c.close();
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
try (Transport t = Transport.open(dst, dumbAuthNoneURI);
|
||||
FetchConnection c = t.openFetch()) {
|
||||
head = c.getRef(Constants.HEAD);
|
||||
}
|
||||
assertNull("has no " + Constants.HEAD, head);
|
||||
}
|
||||
|
@ -249,16 +229,9 @@ public void testListRemote_Smart_DetachedHEAD() throws Exception {
|
|||
|
||||
Repository dst = createBareRepository();
|
||||
Ref head;
|
||||
Transport t = Transport.open(dst, smartAuthNoneURI);
|
||||
try {
|
||||
FetchConnection c = t.openFetch();
|
||||
try {
|
||||
head = c.getRef(Constants.HEAD);
|
||||
} finally {
|
||||
c.close();
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
try (Transport t = Transport.open(dst, smartAuthNoneURI);
|
||||
FetchConnection c = t.openFetch()) {
|
||||
head = c.getRef(Constants.HEAD);
|
||||
}
|
||||
assertNotNull("has " + Constants.HEAD, head);
|
||||
assertEquals(Q, head.getObjectId());
|
||||
|
@ -268,16 +241,13 @@ public void testListRemote_Smart_DetachedHEAD() throws Exception {
|
|||
public void testListRemote_Smart_WithQueryParameters() throws Exception {
|
||||
URIish myURI = toURIish("/snone/do?r=1&p=test.git");
|
||||
Repository dst = createBareRepository();
|
||||
Transport t = Transport.open(dst, myURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, myURI)) {
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("test did not fail to find repository as expected");
|
||||
} catch (NoRemoteRepositoryException err) {
|
||||
// expected
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
List<AccessEvent> requests = getRequests();
|
||||
|
@ -296,8 +266,7 @@ public void testListRemote_Smart_WithQueryParameters() throws Exception {
|
|||
@Test
|
||||
public void testListRemote_Dumb_NeedsAuth() throws Exception {
|
||||
Repository dst = createBareRepository();
|
||||
Transport t = Transport.open(dst, dumbAuthBasicURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, dumbAuthBasicURI)) {
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("connection opened even info/refs needs auth basic");
|
||||
|
@ -306,42 +275,35 @@ public void testListRemote_Dumb_NeedsAuth() throws Exception {
|
|||
+ JGitText.get().noCredentialsProvider;
|
||||
assertEquals(exp, err.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListRemote_Dumb_Auth() throws Exception {
|
||||
Repository dst = createBareRepository();
|
||||
Transport t = Transport.open(dst, dumbAuthBasicURI);
|
||||
t.setCredentialsProvider(new UsernamePasswordCredentialsProvider(
|
||||
AppServer.username, AppServer.password));
|
||||
try {
|
||||
t.openFetch();
|
||||
} finally {
|
||||
t.close();
|
||||
try (Transport t = Transport.open(dst, dumbAuthBasicURI)) {
|
||||
t.setCredentialsProvider(new UsernamePasswordCredentialsProvider(
|
||||
AppServer.username, AppServer.password));
|
||||
t.openFetch().close();
|
||||
}
|
||||
t = Transport.open(dst, dumbAuthBasicURI);
|
||||
t.setCredentialsProvider(new UsernamePasswordCredentialsProvider(
|
||||
AppServer.username, ""));
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("connection opened even info/refs needs auth basic and we provide wrong password");
|
||||
} catch (TransportException err) {
|
||||
String exp = dumbAuthBasicURI + ": "
|
||||
+ JGitText.get().notAuthorized;
|
||||
assertEquals(exp, err.getMessage());
|
||||
} finally {
|
||||
t.close();
|
||||
try (Transport t = Transport.open(dst, dumbAuthBasicURI)) {
|
||||
t.setCredentialsProvider(new UsernamePasswordCredentialsProvider(
|
||||
AppServer.username, ""));
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("connection opened even info/refs needs auth basic and we provide wrong password");
|
||||
} catch (TransportException err) {
|
||||
String exp = dumbAuthBasicURI + ": "
|
||||
+ JGitText.get().notAuthorized;
|
||||
assertEquals(exp, err.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListRemote_Smart_UploadPackNeedsAuth() throws Exception {
|
||||
Repository dst = createBareRepository();
|
||||
Transport t = Transport.open(dst, smartAuthBasicURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, smartAuthBasicURI)) {
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("connection opened even though service disabled");
|
||||
|
@ -350,8 +312,6 @@ public void testListRemote_Smart_UploadPackNeedsAuth() throws Exception {
|
|||
+ JGitText.get().noCredentialsProvider;
|
||||
assertEquals(exp, err.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -363,8 +323,7 @@ public void testListRemote_Smart_UploadPackDisabled() throws Exception {
|
|||
cfg.save();
|
||||
|
||||
Repository dst = createBareRepository();
|
||||
Transport t = Transport.open(dst, smartAuthNoneURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, smartAuthNoneURI)) {
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("connection opened even though service disabled");
|
||||
|
@ -373,24 +332,15 @@ public void testListRemote_Smart_UploadPackDisabled() throws Exception {
|
|||
+ JGitText.get().serviceNotEnabledNoName;
|
||||
assertEquals(exp, err.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListRemoteWithoutLocalRepository() throws Exception {
|
||||
Transport t = Transport.open(smartAuthNoneURI);
|
||||
try {
|
||||
FetchConnection c = t.openFetch();
|
||||
try {
|
||||
Ref head = c.getRef(Constants.HEAD);
|
||||
assertNotNull(head);
|
||||
} finally {
|
||||
c.close();
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
try (Transport t = Transport.open(smartAuthNoneURI);
|
||||
FetchConnection c = t.openFetch()) {
|
||||
Ref head = c.getRef(Constants.HEAD);
|
||||
assertNotNull(head);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -211,8 +211,7 @@ public void testListRemote() throws IOException {
|
|||
assertEquals("http", remoteURI.getScheme());
|
||||
|
||||
Map<String, Ref> map;
|
||||
Transport t = Transport.open(dst, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, remoteURI)) {
|
||||
// I didn't make up these public interface names, I just
|
||||
// approved them for inclusion into the code base. Sorry.
|
||||
// --spearce
|
||||
|
@ -226,8 +225,6 @@ public void testListRemote() throws IOException {
|
|||
} finally {
|
||||
c.close();
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
assertNotNull("have map of refs", map);
|
||||
|
@ -257,8 +254,7 @@ public void testListRemote() throws IOException {
|
|||
public void testListRemote_BadName() throws IOException, URISyntaxException {
|
||||
Repository dst = createBareRepository();
|
||||
URIish uri = new URIish(this.remoteURI.toString() + ".invalid");
|
||||
Transport t = Transport.open(dst, uri);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, uri)) {
|
||||
try {
|
||||
t.openFetch();
|
||||
fail("fetch connection opened");
|
||||
|
@ -266,8 +262,6 @@ public void testListRemote_BadName() throws IOException, URISyntaxException {
|
|||
assertEquals(uri + ": Git repository not found",
|
||||
notFound.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
List<AccessEvent> requests = getRequests();
|
||||
|
@ -288,11 +282,8 @@ public void testInitialClone_Small() throws Exception {
|
|||
Repository dst = createBareRepository();
|
||||
assertFalse(dst.hasObject(A_txt));
|
||||
|
||||
Transport t = Transport.open(dst, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, remoteURI)) {
|
||||
t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
assertTrue(dst.hasObject(A_txt));
|
||||
|
@ -331,11 +322,8 @@ public void testFetch_FewLocalCommits() throws Exception {
|
|||
// Bootstrap by doing the clone.
|
||||
//
|
||||
TestRepository dst = createTestRepository();
|
||||
Transport t = Transport.open(dst.getRepository(), remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst.getRepository(), remoteURI)) {
|
||||
t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
assertEquals(B, dst.getRepository().exactRef(master).getObjectId());
|
||||
List<AccessEvent> cloneRequests = getRequests();
|
||||
|
@ -352,11 +340,8 @@ public void testFetch_FewLocalCommits() throws Exception {
|
|||
|
||||
// Now incrementally update.
|
||||
//
|
||||
t = Transport.open(dst.getRepository(), remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst.getRepository(), remoteURI)) {
|
||||
t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
assertEquals(Z, dst.getRepository().exactRef(master).getObjectId());
|
||||
|
||||
|
@ -394,11 +379,8 @@ public void testFetch_TooManyLocalCommits() throws Exception {
|
|||
// Bootstrap by doing the clone.
|
||||
//
|
||||
TestRepository dst = createTestRepository();
|
||||
Transport t = Transport.open(dst.getRepository(), remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst.getRepository(), remoteURI)) {
|
||||
t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
assertEquals(B, dst.getRepository().exactRef(master).getObjectId());
|
||||
List<AccessEvent> cloneRequests = getRequests();
|
||||
|
@ -418,11 +400,8 @@ public void testFetch_TooManyLocalCommits() throws Exception {
|
|||
|
||||
// Now incrementally update.
|
||||
//
|
||||
t = Transport.open(dst.getRepository(), remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst.getRepository(), remoteURI)) {
|
||||
t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
assertEquals(Z, dst.getRepository().exactRef(master).getObjectId());
|
||||
|
||||
|
@ -474,8 +453,7 @@ public void testInitialClone_BrokenServer() throws Exception {
|
|||
Repository dst = createBareRepository();
|
||||
assertFalse(dst.hasObject(A_txt));
|
||||
|
||||
Transport t = Transport.open(dst, brokenURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(dst, brokenURI)) {
|
||||
try {
|
||||
t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
|
||||
fail("fetch completed despite upload-pack being broken");
|
||||
|
@ -485,8 +463,6 @@ public void testInitialClone_BrokenServer() throws Exception {
|
|||
+ " received Content-Type text/plain; charset=UTF-8";
|
||||
assertEquals(exp, err.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
List<AccessEvent> requests = getRequests();
|
||||
|
@ -517,12 +493,10 @@ public void testPush_NotAuthorized() throws Exception {
|
|||
final RevCommit Q = src.commit().add("Q", Q_txt).create();
|
||||
final Repository db = src.getRepository();
|
||||
final String dstName = Constants.R_HEADS + "new.branch";
|
||||
Transport t;
|
||||
|
||||
// push anonymous shouldn't be allowed.
|
||||
//
|
||||
t = Transport.open(db, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(db, remoteURI)) {
|
||||
final String srcExpr = Q.name();
|
||||
final boolean forceUpdate = false;
|
||||
final String localName = null;
|
||||
|
@ -538,8 +512,6 @@ public void testPush_NotAuthorized() throws Exception {
|
|||
+ JGitText.get().authenticationNotSupported;
|
||||
assertEquals(exp, e.getMessage());
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
List<AccessEvent> requests = getRequests();
|
||||
|
@ -560,12 +532,10 @@ public void testPush_CreateBranch() throws Exception {
|
|||
final RevCommit Q = src.commit().add("Q", Q_txt).create();
|
||||
final Repository db = src.getRepository();
|
||||
final String dstName = Constants.R_HEADS + "new.branch";
|
||||
Transport t;
|
||||
|
||||
enableReceivePack();
|
||||
|
||||
t = Transport.open(db, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(db, remoteURI)) {
|
||||
final String srcExpr = Q.name();
|
||||
final boolean forceUpdate = false;
|
||||
final String localName = null;
|
||||
|
@ -574,8 +544,6 @@ public void testPush_CreateBranch() throws Exception {
|
|||
RemoteRefUpdate u = new RemoteRefUpdate(src.getRepository(),
|
||||
srcExpr, dstName, forceUpdate, localName, oldId);
|
||||
t.push(NullProgressMonitor.INSTANCE, Collections.singleton(u));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
assertTrue(remoteRepository.hasObject(Q_txt));
|
||||
|
@ -633,7 +601,6 @@ public void testPush_ChunkedEncoding() throws Exception {
|
|||
final RevCommit Q = src.commit().add("Q", Q_bin).create();
|
||||
final Repository db = src.getRepository();
|
||||
final String dstName = Constants.R_HEADS + "new.branch";
|
||||
Transport t;
|
||||
|
||||
enableReceivePack();
|
||||
|
||||
|
@ -642,8 +609,7 @@ public void testPush_ChunkedEncoding() throws Exception {
|
|||
cfg.setInt("http", null, "postbuffer", 8 * 1024);
|
||||
cfg.save();
|
||||
|
||||
t = Transport.open(db, remoteURI);
|
||||
try {
|
||||
try (Transport t = Transport.open(db, remoteURI)) {
|
||||
final String srcExpr = Q.name();
|
||||
final boolean forceUpdate = false;
|
||||
final String localName = null;
|
||||
|
@ -652,8 +618,6 @@ public void testPush_ChunkedEncoding() throws Exception {
|
|||
RemoteRefUpdate u = new RemoteRefUpdate(src.getRepository(),
|
||||
srcExpr, dstName, forceUpdate, localName, oldId);
|
||||
t.push(NullProgressMonitor.INSTANCE, Collections.singleton(u));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
assertTrue(remoteRepository.hasObject(Q_bin));
|
||||
|
|
|
@ -112,12 +112,9 @@ private static InMemoryRepository newRepo(String name) {
|
|||
public void pushNonAtomic() throws Exception {
|
||||
PushResult r;
|
||||
server.setPerformsAtomicTransactions(false);
|
||||
Transport tn = testProtocol.open(uri, client, "server");
|
||||
try {
|
||||
try (Transport tn = testProtocol.open(uri, client, "server")) {
|
||||
tn.setPushAtomic(false);
|
||||
r = tn.push(NullProgressMonitor.INSTANCE, commands());
|
||||
} finally {
|
||||
tn.close();
|
||||
}
|
||||
|
||||
RemoteRefUpdate one = r.getRemoteUpdate("refs/heads/one");
|
||||
|
@ -131,12 +128,9 @@ public void pushNonAtomic() throws Exception {
|
|||
@Test
|
||||
public void pushAtomicClientGivesUpEarly() throws Exception {
|
||||
PushResult r;
|
||||
Transport tn = testProtocol.open(uri, client, "server");
|
||||
try {
|
||||
try (Transport tn = testProtocol.open(uri, client, "server")) {
|
||||
tn.setPushAtomic(true);
|
||||
r = tn.push(NullProgressMonitor.INSTANCE, commands());
|
||||
} finally {
|
||||
tn.close();
|
||||
}
|
||||
|
||||
RemoteRefUpdate one = r.getRemoteUpdate("refs/heads/one");
|
||||
|
@ -167,8 +161,7 @@ public void pushAtomicDisabled() throws Exception {
|
|||
ObjectId.zeroId()));
|
||||
|
||||
server.setPerformsAtomicTransactions(false);
|
||||
Transport tn = testProtocol.open(uri, client, "server");
|
||||
try {
|
||||
try (Transport tn = testProtocol.open(uri, client, "server")) {
|
||||
tn.setPushAtomic(true);
|
||||
tn.push(NullProgressMonitor.INSTANCE, cmds);
|
||||
fail("did not throw TransportException");
|
||||
|
@ -176,8 +169,6 @@ public void pushAtomicDisabled() throws Exception {
|
|||
assertEquals(
|
||||
uri + ": " + JGitText.get().atomicPushNotSupported,
|
||||
e.getMessage());
|
||||
} finally {
|
||||
tn.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -166,8 +166,10 @@ private static FetchResult fetchFromBundle(final Repository newRepo,
|
|||
final ByteArrayInputStream in = new ByteArrayInputStream(bundle);
|
||||
final RefSpec rs = new RefSpec("refs/heads/*:refs/heads/*");
|
||||
final Set<RefSpec> refs = Collections.singleton(rs);
|
||||
return new TransportBundleStream(newRepo, uri, in).fetch(
|
||||
NullProgressMonitor.INSTANCE, refs);
|
||||
try (TransportBundleStream transport = new TransportBundleStream(
|
||||
newRepo, uri, in)) {
|
||||
return transport.fetch(NullProgressMonitor.INSTANCE, refs);
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] makeBundle(final String name,
|
||||
|
|
|
@ -116,12 +116,9 @@ public void setUp() throws Exception {
|
|||
|
||||
// Clone from dst into src
|
||||
//
|
||||
Transport t = Transport.open(src, uriOf(dst));
|
||||
try {
|
||||
try (Transport t = Transport.open(src, uriOf(dst))) {
|
||||
t.fetch(PM, Collections.singleton(new RefSpec("+refs/*:refs/*")));
|
||||
assertEquals(B, src.resolve(R_MASTER));
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
// Now put private stuff into dst.
|
||||
|
@ -144,7 +141,8 @@ public void tearDown() throws Exception {
|
|||
@Test
|
||||
public void testFilterHidesPrivate() throws Exception {
|
||||
Map<String, Ref> refs;
|
||||
TransportLocal t = new TransportLocal(src, uriOf(dst), dst.getDirectory()) {
|
||||
try (TransportLocal t = new TransportLocal(src, uriOf(dst),
|
||||
dst.getDirectory()) {
|
||||
@Override
|
||||
ReceivePack createReceivePack(final Repository db) {
|
||||
db.close();
|
||||
|
@ -154,16 +152,10 @@ ReceivePack createReceivePack(final Repository db) {
|
|||
rp.setAdvertiseRefsHook(new HidePrivateHook());
|
||||
return rp;
|
||||
}
|
||||
};
|
||||
try {
|
||||
PushConnection c = t.openPush();
|
||||
try {
|
||||
}) {
|
||||
try (PushConnection c = t.openPush()) {
|
||||
refs = c.getRefsMap();
|
||||
} finally {
|
||||
c.close();
|
||||
}
|
||||
} finally {
|
||||
t.close();
|
||||
}
|
||||
|
||||
assertNotNull(refs);
|
||||
|
|
|
@ -61,13 +61,10 @@
|
|||
import org.eclipse.jgit.lib.Ref;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TransportTest extends SampleDataRepositoryTestCase {
|
||||
private Transport transport;
|
||||
|
||||
private RemoteConfig remoteConfig;
|
||||
|
||||
@Override
|
||||
|
@ -77,17 +74,6 @@ public void setUp() throws Exception {
|
|||
final Config config = db.getConfig();
|
||||
remoteConfig = new RemoteConfig(config, "test");
|
||||
remoteConfig.addURI(new URIish("http://everyones.loves.git/u/2"));
|
||||
transport = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
if (transport != null) {
|
||||
transport.close();
|
||||
transport = null;
|
||||
}
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -99,10 +85,11 @@ public void tearDown() throws Exception {
|
|||
@Test
|
||||
public void testFindRemoteRefUpdatesNoWildcardNoTracking()
|
||||
throws IOException {
|
||||
transport = Transport.open(db, remoteConfig);
|
||||
final Collection<RemoteRefUpdate> result = transport
|
||||
.findRemoteRefUpdatesFor(Collections.nCopies(1, new RefSpec(
|
||||
"refs/heads/master:refs/heads/x")));
|
||||
Collection<RemoteRefUpdate> result;
|
||||
try (Transport transport = Transport.open(db, remoteConfig)) {
|
||||
result = transport.findRemoteRefUpdatesFor(Collections.nCopies(1,
|
||||
new RefSpec("refs/heads/master:refs/heads/x")));
|
||||
}
|
||||
|
||||
assertEquals(1, result.size());
|
||||
final RemoteRefUpdate rru = result.iterator().next();
|
||||
|
@ -122,10 +109,11 @@ public void testFindRemoteRefUpdatesNoWildcardNoTracking()
|
|||
@Test
|
||||
public void testFindRemoteRefUpdatesNoWildcardNoDestination()
|
||||
throws IOException {
|
||||
transport = Transport.open(db, remoteConfig);
|
||||
final Collection<RemoteRefUpdate> result = transport
|
||||
.findRemoteRefUpdatesFor(Collections.nCopies(1, new RefSpec(
|
||||
"+refs/heads/master")));
|
||||
Collection<RemoteRefUpdate> result;
|
||||
try (Transport transport = Transport.open(db, remoteConfig)) {
|
||||
result = transport.findRemoteRefUpdatesFor(
|
||||
Collections.nCopies(1, new RefSpec("+refs/heads/master")));
|
||||
}
|
||||
|
||||
assertEquals(1, result.size());
|
||||
final RemoteRefUpdate rru = result.iterator().next();
|
||||
|
@ -143,10 +131,11 @@ public void testFindRemoteRefUpdatesNoWildcardNoDestination()
|
|||
*/
|
||||
@Test
|
||||
public void testFindRemoteRefUpdatesWildcardNoTracking() throws IOException {
|
||||
transport = Transport.open(db, remoteConfig);
|
||||
final Collection<RemoteRefUpdate> result = transport
|
||||
.findRemoteRefUpdatesFor(Collections.nCopies(1, new RefSpec(
|
||||
"+refs/heads/*:refs/heads/test/*")));
|
||||
Collection<RemoteRefUpdate> result;
|
||||
try (Transport transport = Transport.open(db, remoteConfig)) {
|
||||
result = transport.findRemoteRefUpdatesFor(Collections.nCopies(1,
|
||||
new RefSpec("+refs/heads/*:refs/heads/test/*")));
|
||||
}
|
||||
|
||||
assertEquals(12, result.size());
|
||||
boolean foundA = false;
|
||||
|
@ -171,12 +160,14 @@ public void testFindRemoteRefUpdatesWildcardNoTracking() throws IOException {
|
|||
*/
|
||||
@Test
|
||||
public void testFindRemoteRefUpdatesTwoRefSpecs() throws IOException {
|
||||
transport = Transport.open(db, remoteConfig);
|
||||
final RefSpec specA = new RefSpec("+refs/heads/a:refs/heads/b");
|
||||
final RefSpec specC = new RefSpec("+refs/heads/c:refs/heads/d");
|
||||
final Collection<RefSpec> specs = Arrays.asList(specA, specC);
|
||||
final Collection<RemoteRefUpdate> result = transport
|
||||
.findRemoteRefUpdatesFor(specs);
|
||||
|
||||
Collection<RemoteRefUpdate> result;
|
||||
try (Transport transport = Transport.open(db, remoteConfig)) {
|
||||
result = transport.findRemoteRefUpdatesFor(specs);
|
||||
}
|
||||
|
||||
assertEquals(2, result.size());
|
||||
boolean foundA = false;
|
||||
|
@ -202,10 +193,12 @@ public void testFindRemoteRefUpdatesTwoRefSpecs() throws IOException {
|
|||
public void testFindRemoteRefUpdatesTrackingRef() throws IOException {
|
||||
remoteConfig.addFetchRefSpec(new RefSpec(
|
||||
"refs/heads/*:refs/remotes/test/*"));
|
||||
transport = Transport.open(db, remoteConfig);
|
||||
final Collection<RemoteRefUpdate> result = transport
|
||||
.findRemoteRefUpdatesFor(Collections.nCopies(1, new RefSpec(
|
||||
"+refs/heads/a:refs/heads/a")));
|
||||
|
||||
Collection<RemoteRefUpdate> result;
|
||||
try (Transport transport = Transport.open(db, remoteConfig)) {
|
||||
result = transport.findRemoteRefUpdatesFor(Collections.nCopies(1,
|
||||
new RefSpec("+refs/heads/a:refs/heads/a")));
|
||||
}
|
||||
|
||||
assertEquals(1, result.size());
|
||||
final TrackingRefUpdate tru = result.iterator().next()
|
||||
|
@ -225,20 +218,18 @@ public void testLocalTransportWithRelativePath() throws Exception {
|
|||
config.addURI(new URIish("../" + otherDir));
|
||||
|
||||
// Should not throw NoRemoteRepositoryException
|
||||
transport = Transport.open(db, config);
|
||||
Transport.open(db, config).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLocalTransportFetchWithoutLocalRepository()
|
||||
throws Exception {
|
||||
URIish uri = new URIish("file://" + db.getWorkTree().getAbsolutePath());
|
||||
transport = Transport.open(uri);
|
||||
FetchConnection fetchConnection = transport.openFetch();
|
||||
try {
|
||||
Ref head = fetchConnection.getRef(Constants.HEAD);
|
||||
assertNotNull(head);
|
||||
} finally {
|
||||
fetchConnection.close();
|
||||
try (Transport transport = Transport.open(uri)) {
|
||||
try (FetchConnection fetchConnection = transport.openFetch()) {
|
||||
Ref head = fetchConnection.getRef(Constants.HEAD);
|
||||
assertNotNull(head);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -116,22 +116,17 @@ public FetchResult call() throws GitAPIException, InvalidRemoteException,
|
|||
org.eclipse.jgit.api.errors.TransportException {
|
||||
checkCallable();
|
||||
|
||||
try {
|
||||
Transport transport = Transport.open(repo, remote);
|
||||
try {
|
||||
transport.setCheckFetchedObjects(checkFetchedObjects);
|
||||
transport.setRemoveDeletedRefs(isRemoveDeletedRefs());
|
||||
transport.setDryRun(dryRun);
|
||||
if (tagOption != null)
|
||||
transport.setTagOpt(tagOption);
|
||||
transport.setFetchThin(thin);
|
||||
configure(transport);
|
||||
try (Transport transport = Transport.open(repo, remote)) {
|
||||
transport.setCheckFetchedObjects(checkFetchedObjects);
|
||||
transport.setRemoveDeletedRefs(isRemoveDeletedRefs());
|
||||
transport.setDryRun(dryRun);
|
||||
if (tagOption != null)
|
||||
transport.setTagOpt(tagOption);
|
||||
transport.setFetchThin(thin);
|
||||
configure(transport);
|
||||
|
||||
FetchResult result = transport.fetch(monitor, refSpecs);
|
||||
return result;
|
||||
} finally {
|
||||
transport.close();
|
||||
}
|
||||
FetchResult result = transport.fetch(monitor, refSpecs);
|
||||
return result;
|
||||
} catch (NoRemoteRepositoryException e) {
|
||||
throw new InvalidRemoteException(MessageFormat.format(
|
||||
JGitText.get().invalidRemote, remote), e);
|
||||
|
|
|
@ -182,13 +182,9 @@ private Map<String, Ref> execute() throws GitAPIException,
|
|||
org.eclipse.jgit.api.errors.TransportException {
|
||||
checkCallable();
|
||||
|
||||
Transport transport = null;
|
||||
FetchConnection fc = null;
|
||||
try {
|
||||
if (repo != null)
|
||||
transport = Transport.open(repo, remote);
|
||||
else
|
||||
transport = Transport.open(new URIish(remote));
|
||||
try (Transport transport = repo != null
|
||||
? Transport.open(repo, remote)
|
||||
: Transport.open(new URIish(remote))) {
|
||||
transport.setOptionUploadPack(uploadPack);
|
||||
configure(transport);
|
||||
Collection<RefSpec> refSpecs = new ArrayList<RefSpec>(1);
|
||||
|
@ -199,19 +195,20 @@ private Map<String, Ref> execute() throws GitAPIException,
|
|||
refSpecs.add(new RefSpec("refs/heads/*:refs/remotes/origin/*")); //$NON-NLS-1$
|
||||
Collection<Ref> refs;
|
||||
Map<String, Ref> refmap = new HashMap<String, Ref>();
|
||||
fc = transport.openFetch();
|
||||
refs = fc.getRefs();
|
||||
if (refSpecs.isEmpty())
|
||||
for (Ref r : refs)
|
||||
refmap.put(r.getName(), r);
|
||||
else
|
||||
for (Ref r : refs)
|
||||
for (RefSpec rs : refSpecs)
|
||||
if (rs.matchSource(r)) {
|
||||
refmap.put(r.getName(), r);
|
||||
break;
|
||||
}
|
||||
return refmap;
|
||||
try (FetchConnection fc = transport.openFetch()) {
|
||||
refs = fc.getRefs();
|
||||
if (refSpecs.isEmpty())
|
||||
for (Ref r : refs)
|
||||
refmap.put(r.getName(), r);
|
||||
else
|
||||
for (Ref r : refs)
|
||||
for (RefSpec rs : refSpecs)
|
||||
if (rs.matchSource(r)) {
|
||||
refmap.put(r.getName(), r);
|
||||
break;
|
||||
}
|
||||
return refmap;
|
||||
}
|
||||
} catch (URISyntaxException e) {
|
||||
throw new InvalidRemoteException(MessageFormat.format(
|
||||
JGitText.get().invalidRemote, remote));
|
||||
|
@ -223,11 +220,6 @@ private Map<String, Ref> execute() throws GitAPIException,
|
|||
throw new org.eclipse.jgit.api.errors.TransportException(
|
||||
e.getMessage(),
|
||||
e);
|
||||
} finally {
|
||||
if (fc != null)
|
||||
fc.close();
|
||||
if (transport != null)
|
||||
transport.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -59,8 +59,7 @@
|
|||
*
|
||||
* @see Transport
|
||||
*/
|
||||
public interface Connection {
|
||||
|
||||
public interface Connection extends AutoCloseable {
|
||||
/**
|
||||
* Get the complete map of refs advertised as available for fetching or
|
||||
* pushing.
|
||||
|
@ -108,6 +107,10 @@ public interface Connection {
|
|||
* <p>
|
||||
* If additional messages were produced by the remote peer, these should
|
||||
* still be retained in the connection instance for {@link #getMessages()}.
|
||||
* <p>
|
||||
* {@code AutoClosable.close()} declares that it throws {@link Exception}.
|
||||
* Implementers shouldn't throw checked exceptions. This override narrows
|
||||
* the signature to prevent them from doing so.
|
||||
*/
|
||||
public void close();
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@
|
|||
* Transport instances and the connections they create are not thread-safe.
|
||||
* Callers must ensure a transport is accessed by only one thread at a time.
|
||||
*/
|
||||
public abstract class Transport {
|
||||
public abstract class Transport implements AutoCloseable {
|
||||
/** Type of operation a Transport is being opened for. */
|
||||
public enum Operation {
|
||||
/** Transport is to fetch objects locally. */
|
||||
|
@ -1353,6 +1353,10 @@ public abstract PushConnection openPush() throws NotSupportedException,
|
|||
* must close that network socket, disconnecting the two peers. If the
|
||||
* remote repository is actually local (same system) this method must close
|
||||
* any open file handles used to read the "remote" repository.
|
||||
* <p>
|
||||
* {@code AutoClosable.close()} declares that it throws {@link Exception}.
|
||||
* Implementers shouldn't throw checked exceptions. This override narrows
|
||||
* the signature to prevent them from doing so.
|
||||
*/
|
||||
public abstract void close();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue