]> source.dussan.org Git - jgit.git/commitdiff
InitCommand: Don't leave Repository open after Git is closed 16/117316/3
authorDavid Pursehouse <david.pursehouse@gmail.com>
Wed, 14 Feb 2018 01:13:46 +0000 (10:13 +0900)
committerDavid Pursehouse <david.pursehouse@gmail.com>
Wed, 14 Feb 2018 05:09:40 +0000 (14:09 +0900)
The InitCommand returns a Git that is instantiated with the newly
created Repository, but the Repository is not closed with the Git
resulting in resource leaks.

Create the Git with `closeRepo` set to true, such that the Repository
is also closed when the Git is closed.

Adjust the tests to use try-with-resource on the Git instance.

Change-Id: Ib26e7428c7d8840956d1edb09e53b93e23e6fe5a
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/InitCommand.java

index e8502237627853d1a43d13595c738362dc120db6..9e3ee2c5664e4d0a6f49708fb9e290680cc77ab1 100644 (file)
@@ -69,14 +69,14 @@ public class InitCommandTest extends RepositoryTestCase {
        }
 
        @Test
-       public void testInitRepository() throws IOException, JGitInternalException,
-                       GitAPIException {
+       public void testInitRepository()
+                       throws IOException, JGitInternalException, GitAPIException {
                File directory = createTempDirectory("testInitRepository");
                InitCommand command = new InitCommand();
                command.setDirectory(directory);
-               Repository repository = command.call().getRepository();
-               addRepoToClose(repository);
-               assertNotNull(repository);
+               try (Git git = command.call()) {
+                       assertNotNull(git.getRepository());
+               }
        }
 
        @Test
@@ -89,9 +89,9 @@ public class InitCommandTest extends RepositoryTestCase {
                assertTrue(directory.listFiles().length > 0);
                InitCommand command = new InitCommand();
                command.setDirectory(directory);
-               Repository repository = command.call().getRepository();
-               addRepoToClose(repository);
-               assertNotNull(repository);
+               try (Git git = command.call()) {
+                       assertNotNull(git.getRepository());
+               }
        }
 
        @Test
@@ -101,10 +101,11 @@ public class InitCommandTest extends RepositoryTestCase {
                InitCommand command = new InitCommand();
                command.setDirectory(directory);
                command.setBare(true);
-               Repository repository = command.call().getRepository();
-               addRepoToClose(repository);
-               assertNotNull(repository);
-               assertTrue(repository.isBare());
+               try (Git git = command.call()) {
+                       Repository repository = git.getRepository();
+                       assertNotNull(repository);
+                       assertTrue(repository.isBare());
+               }
        }
 
        // non-bare repos where gitDir and directory is set. Same as
@@ -117,11 +118,12 @@ public class InitCommandTest extends RepositoryTestCase {
                InitCommand command = new InitCommand();
                command.setDirectory(wt);
                command.setGitDir(gitDir);
-               Repository repository = command.call().getRepository();
-               addRepoToClose(repository);
-               assertNotNull(repository);
-               assertEqualsFile(wt, repository.getWorkTree());
-               assertEqualsFile(gitDir, repository.getDirectory());
+               try (Git git = command.call()) {
+                       Repository repository = git.getRepository();
+                       assertNotNull(repository);
+                       assertEqualsFile(wt, repository.getWorkTree());
+                       assertEqualsFile(gitDir, repository.getDirectory());
+               }
        }
 
        // non-bare repos where only gitDir is set. Same as
@@ -135,12 +137,13 @@ public class InitCommandTest extends RepositoryTestCase {
                File gitDir = createTempDirectory("testInitRepository/.git");
                InitCommand command = new InitCommand();
                command.setGitDir(gitDir);
-               Repository repository = command.call().getRepository();
-               addRepoToClose(repository);
-               assertNotNull(repository);
-               assertEqualsFile(gitDir, repository.getDirectory());
-               assertEqualsFile(new File(reader.getProperty("user.dir")),
-                               repository.getWorkTree());
+               try (Git git = command.call()) {
+                       Repository repository = git.getRepository();
+                       assertNotNull(repository);
+                       assertEqualsFile(gitDir, repository.getDirectory());
+                       assertEqualsFile(new File(reader.getProperty("user.dir")),
+                                       repository.getWorkTree());
+               }
        }
 
        // Bare repos where gitDir and directory is set will only work if gitDir and
@@ -169,13 +172,14 @@ public class InitCommandTest extends RepositoryTestCase {
                                .getAbsolutePath());
                InitCommand command = new InitCommand();
                command.setBare(false);
-               Repository repository = command.call().getRepository();
-               addRepoToClose(repository);
-               assertNotNull(repository);
-               assertEqualsFile(new File(reader.getProperty("user.dir"), ".git"),
-                               repository.getDirectory());
-               assertEqualsFile(new File(reader.getProperty("user.dir")),
-                               repository.getWorkTree());
+               try (Git git = command.call()) {
+                       Repository repository = git.getRepository();
+                       assertNotNull(repository);
+                       assertEqualsFile(new File(reader.getProperty("user.dir"), ".git"),
+                                       repository.getDirectory());
+                       assertEqualsFile(new File(reader.getProperty("user.dir")),
+                                       repository.getWorkTree());
+               }
        }
 
        // If neither directory nor gitDir is set in a bare repo make sure
@@ -189,12 +193,13 @@ public class InitCommandTest extends RepositoryTestCase {
                                .getAbsolutePath());
                InitCommand command = new InitCommand();
                command.setBare(true);
-               Repository repository = command.call().getRepository();
-               addRepoToClose(repository);
-               assertNotNull(repository);
-               assertEqualsFile(new File(reader.getProperty("user.dir")),
-                               repository.getDirectory());
-               assertNull(repository.getWorkTree());
+               try (Git git = command.call()) {
+                       Repository repository = git.getRepository();
+                       assertNotNull(repository);
+                       assertEqualsFile(new File(reader.getProperty("user.dir")),
+                                       repository.getDirectory());
+                       assertNull(repository.getWorkTree());
+               }
        }
 
        // In a non-bare repo when directory and gitDir is set then they shouldn't
index f10bcdfcde5443fc72640d5d0929ccba73749e44..d48049f1ed8dab46276e5eda8cf29e9f0465e779 100644 (file)
@@ -75,6 +75,9 @@ public class InitCommand implements Callable<Git> {
         * {@inheritDoc}
         * <p>
         * Executes the {@code Init} command.
+        *
+        * @return a {@code Git} instance that owns the {@code Repository} that it
+        *         wraps.
         */
        @Override
        public Git call() throws GitAPIException {
@@ -120,7 +123,7 @@ public class InitCommand implements Callable<Git> {
                        Repository repository = builder.build();
                        if (!repository.getObjectDatabase().exists())
                                repository.create(bare);
-                       return new Git(repository);
+                       return new Git(repository, true);
                } catch (IOException e) {
                        throw new JGitInternalException(e.getMessage(), e);
                }