From 63b3340126e88c00a7c83f8d629c8c3c3747e99e Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Thu, 15 Mar 2018 14:27:01 +0900 Subject: [PATCH] SubmoduleUpdateCommand: Refactor to open Repository in try-with-resource Change-Id: I1a303fdfdb6823043fa6751c43eaeaf678f2e64f Signed-off-by: David Pursehouse --- .../jgit/api/SubmoduleUpdateCommand.java | 64 ++++++++++--------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleUpdateCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleUpdateCommand.java index 3362d46f1..289ef4a8f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleUpdateCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleUpdateCommand.java @@ -149,6 +149,38 @@ public class SubmoduleUpdateCommand extends return this; } + private Repository getOrCloneSubmodule(SubmoduleWalk generator, String url) + throws IOException, GitAPIException { + Repository repository = generator.getRepository(); + if (repository == null) { + if (callback != null) { + callback.cloningSubmodule(generator.getPath()); + } + CloneCommand clone = Git.cloneRepository(); + configure(clone); + clone.setURI(url); + clone.setDirectory(generator.getDirectory()); + clone.setGitDir( + new File(new File(repo.getDirectory(), Constants.MODULES), + generator.getPath())); + if (monitor != null) { + clone.setProgressMonitor(monitor); + } + repository = clone.call().getRepository(); + } else if (this.fetch) { + if (fetchCallback != null) { + fetchCallback.fetchingSubmodule(generator.getPath()); + } + FetchCommand fetchCommand = Git.wrap(repository).fetch(); + if (monitor != null) { + fetchCommand.setProgressMonitor(monitor); + } + configure(fetchCommand); + fetchCommand.call(); + } + return repository; + } + /** * {@inheritDoc} * @@ -175,34 +207,8 @@ public class SubmoduleUpdateCommand extends if (url == null) continue; - Repository submoduleRepo = generator.getRepository(); - // Clone repository if not present - if (submoduleRepo == null) { - if (callback != null) { - callback.cloningSubmodule(generator.getPath()); - } - CloneCommand clone = Git.cloneRepository(); - configure(clone); - clone.setURI(url); - clone.setDirectory(generator.getDirectory()); - clone.setGitDir(new File(new File(repo.getDirectory(), - Constants.MODULES), generator.getPath())); - if (monitor != null) - clone.setProgressMonitor(monitor); - submoduleRepo = clone.call().getRepository(); - } else if (this.fetch) { - if (fetchCallback != null) { - fetchCallback.fetchingSubmodule(generator.getPath()); - } - FetchCommand fetchCommand = Git.wrap(submoduleRepo).fetch(); - if (monitor != null) { - fetchCommand.setProgressMonitor(monitor); - } - configure(fetchCommand); - fetchCommand.call(); - } - - try (RevWalk walk = new RevWalk(submoduleRepo)) { + try (Repository submoduleRepo = getOrCloneSubmodule(generator, + url); RevWalk walk = new RevWalk(submoduleRepo)) { RevCommit commit = walk .parseCommit(generator.getObjectId()); @@ -237,8 +243,6 @@ public class SubmoduleUpdateCommand extends generator.getPath()); } } - } finally { - submoduleRepo.close(); } updated.add(generator.getPath()); }