]> source.dussan.org Git - jgit.git/commitdiff
Transport: Implement AutoCloseable 05/64605/4
authorShawn Pearce <spearce@spearce.org>
Tue, 19 Jan 2016 21:08:38 +0000 (13:08 -0800)
committerShawn Pearce <spearce@spearce.org>
Tue, 19 Jan 2016 22:27:11 +0000 (14:27 -0800)
After creating a Transport instance callers should always call
its close() method. Use AutoCloseable to document this idiom
and allow use of try-with-resources.

Change-Id: I0c6ff3e39ebecdd7a028dbcae1856a818937b186

org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/DumbClientDumbServerTest.java
org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java
org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java
org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/AtomicPushTest.java
org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java
org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java
org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransportTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java
org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/Connection.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java

index 362a09d64f4ee28be432e6c97fe0c4dd03f1a21d..677132d732ccf5118e3d4cb4b5e48723df817e78 100644 (file)
@@ -140,8 +140,7 @@ public class DumbClientDumbServerTest extends HttpTestCase {
                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 class DumbClientDumbServerTest extends HttpTestCase {
                        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 class DumbClientDumbServerTest extends HttpTestCase {
                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 class DumbClientDumbServerTest extends HttpTestCase {
                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 class DumbClientDumbServerTest extends HttpTestCase {
                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 class DumbClientDumbServerTest extends HttpTestCase {
                                String exp = "remote does not support smart HTTP push";
                                assertEquals(exp, nse.getMessage());
                        }
-               } finally {
-                       t.close();
                }
        }
 }
index cf20898b37c3f8b1bbb7d4135609d6e4de7ff135..ce78442785a940f0a7306b7eb99a33bec5d27459 100644 (file)
@@ -157,8 +157,7 @@ public class HttpClientTests extends HttpTestCase {
        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 class HttpClientTests extends HttpTestCase {
                                                + "/info/refs?service=git-upload-pack not found";
                                assertEquals(exp, err.getMessage());
                        }
-               } finally {
-                       t.close();
                }
        }
 
@@ -176,8 +173,7 @@ public class HttpClientTests extends HttpTestCase {
        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 class HttpClientTests extends HttpTestCase {
                                                + "/info/refs?service=git-upload-pack not found";
                                assertEquals(exp, err.getMessage());
                        }
-               } finally {
-                       t.close();
                }
        }
 
@@ -201,16 +195,9 @@ public class HttpClientTests extends HttpTestCase {
 
                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 class HttpClientTests extends HttpTestCase {
 
                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 class HttpClientTests extends HttpTestCase {
 
                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 class HttpClientTests extends HttpTestCase {
        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 class HttpClientTests extends HttpTestCase {
        @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 class HttpClientTests extends HttpTestCase {
                                                + 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 class HttpClientTests extends HttpTestCase {
                                                + JGitText.get().noCredentialsProvider;
                                assertEquals(exp, err.getMessage());
                        }
-               } finally {
-                       t.close();
                }
        }
 
@@ -363,8 +323,7 @@ public class HttpClientTests extends HttpTestCase {
                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 class HttpClientTests extends HttpTestCase {
                                                + 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);
                }
        }
 }
index 9ca0789e29ff2cff93958a99f64ea7f075f01b0d..82861ed9b7429616afda5bb144441a4d5521c49c 100644 (file)
@@ -211,8 +211,7 @@ public class SmartClientSmartServerTest extends HttpTestCase {
                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 class SmartClientSmartServerTest extends HttpTestCase {
                        } finally {
                                c.close();
                        }
-               } finally {
-                       t.close();
                }
 
                assertNotNull("have map of refs", map);
@@ -257,8 +254,7 @@ public class SmartClientSmartServerTest extends HttpTestCase {
        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 class SmartClientSmartServerTest extends HttpTestCase {
                                assertEquals(uri + ": Git repository not found",
                                                notFound.getMessage());
                        }
-               } finally {
-                       t.close();
                }
 
                List<AccessEvent> requests = getRequests();
@@ -288,11 +282,8 @@ public class SmartClientSmartServerTest extends HttpTestCase {
                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 class SmartClientSmartServerTest extends HttpTestCase {
                // 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 class SmartClientSmartServerTest extends HttpTestCase {
 
                // 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 class SmartClientSmartServerTest extends HttpTestCase {
                // 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 class SmartClientSmartServerTest extends HttpTestCase {
 
                // 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 class SmartClientSmartServerTest extends HttpTestCase {
                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 class SmartClientSmartServerTest extends HttpTestCase {
                                                + " received Content-Type text/plain; charset=UTF-8";
                                assertEquals(exp, err.getMessage());
                        }
-               } finally {
-                       t.close();
                }
 
                List<AccessEvent> requests = getRequests();
@@ -517,12 +493,10 @@ public class SmartClientSmartServerTest extends HttpTestCase {
                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 class SmartClientSmartServerTest extends HttpTestCase {
                                                + JGitText.get().authenticationNotSupported;
                                assertEquals(exp, e.getMessage());
                        }
-               } finally {
-                       t.close();
                }
 
                List<AccessEvent> requests = getRequests();
@@ -560,12 +532,10 @@ public class SmartClientSmartServerTest extends HttpTestCase {
                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 class SmartClientSmartServerTest extends HttpTestCase {
                        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 class SmartClientSmartServerTest extends HttpTestCase {
                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 class SmartClientSmartServerTest extends HttpTestCase {
                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 class SmartClientSmartServerTest extends HttpTestCase {
                        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));
index 782e414b621e3dff4e48651d56894a50413d3573..c1e078d10dce3a2bfcdb501cdfe9dc90f0a77c68 100644 (file)
@@ -112,12 +112,9 @@ public class AtomicPushTest {
        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 class AtomicPushTest {
        @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 class AtomicPushTest {
                                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 class AtomicPushTest {
                        assertEquals(
                                        uri + ": " + JGitText.get().atomicPushNotSupported,
                                        e.getMessage());
-               } finally {
-                       tn.close();
                }
        }
 
index ba89d2d616d6832f6987f068f70860c4993ca5c2..f94f707258cb205f27e6189a03c97d8d930b6095 100644 (file)
@@ -166,8 +166,10 @@ public class BundleWriterTest extends SampleDataRepositoryTestCase {
                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,
index aa5914fe032836ad1b6d5d8e8075ebf651ceeab6..94bc383db76898f690c702a4ea5879b6102f7d12 100644 (file)
@@ -116,12 +116,9 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
 
                // 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 class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
        @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 @@ public class ReceivePackAdvertiseRefsHookTest extends LocalDiskRepositoryTestCas
                                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);
index 55e1e442060e98e6945a0026ba40f5c0c017ce88..5519f61ac255e6b4953ef8494aafc0a9d1a7db07 100644 (file)
@@ -61,13 +61,10 @@ import org.eclipse.jgit.lib.ObjectId;
 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 class TransportTest extends SampleDataRepositoryTestCase {
                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 class TransportTest extends SampleDataRepositoryTestCase {
        @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 class TransportTest extends SampleDataRepositoryTestCase {
        @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 class TransportTest extends SampleDataRepositoryTestCase {
         */
        @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 class TransportTest extends SampleDataRepositoryTestCase {
         */
        @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 class TransportTest extends SampleDataRepositoryTestCase {
        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 class TransportTest extends SampleDataRepositoryTestCase {
                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);
+                       }
                }
        }
 
index 9620089b0848e0aeecc15d4d3cd547a1769471d9..de512761a4a478c64e54cdf046635e2c15be03b5 100644 (file)
@@ -116,22 +116,17 @@ public class FetchCommand extends TransportCommand<FetchCommand, FetchResult> {
                        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);
-
-                               FetchResult result = transport.fetch(monitor, refSpecs);
-                               return result;
-                       } finally {
-                               transport.close();
-                       }
+               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;
                } catch (NoRemoteRepositoryException e) {
                        throw new InvalidRemoteException(MessageFormat.format(
                                        JGitText.get().invalidRemote, remote), e);
index 3363a0fc8fb741deaeaea7869bc216022a56032f..f3527fd805e197a47d4043c9e0279dd7e2dc5eb1 100644 (file)
@@ -182,13 +182,9 @@ public class LsRemoteCommand extends
                        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 @@ public class LsRemoteCommand extends
                                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 @@ public class LsRemoteCommand extends
                        throw new org.eclipse.jgit.api.errors.TransportException(
                                        e.getMessage(),
                                        e);
-               } finally {
-                       if (fc != null)
-                               fc.close();
-                       if (transport != null)
-                               transport.close();
                }
        }
 
index 0ff9fcea7461ec486a6c171c7a3e66f3e1d32a72..da288ec31e52ae96be4f99f57ea0c47e9b6e3f45 100644 (file)
@@ -59,8 +59,7 @@ import org.eclipse.jgit.lib.Ref;
  *
  * @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();
 
index 6af153cbc9e8323d9c8004dc559d74fb7d0af76c..9e6d1f68f5e5fbc808a654a94c9492e1e52f7033 100644 (file)
@@ -98,7 +98,7 @@ import org.eclipse.jgit.storage.pack.PackConfig;
  * 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 class Transport {
         * 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();
 }