You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by im...@apache.org on 2013/11/24 14:12:01 UTC

[2/8] git commit: always close the jGit repo after command execution

always close the jGit repo after command execution


Project: http://git-wip-us.apache.org/repos/asf/maven-scm/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-scm/commit/598a90ea
Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/598a90ea
Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/598a90ea

Branch: refs/heads/master
Commit: 598a90ea26cda92b6bbae4c8bf198d7176197d60
Parents: d1f102e
Author: imod <do...@fortysix.ch>
Authored: Mon Nov 18 18:43:22 2013 +0100
Committer: imod <do...@fortysix.ch>
Committed: Mon Nov 18 18:43:22 2013 +0100

----------------------------------------------------------------------
 .../provider/git/jgit/command/JGitUtils.java    | 12 ++++++++++
 .../git/jgit/command/add/JGitAddCommand.java    |  7 +++++-
 .../jgit/command/blame/JGitBlameCommand.java    | 11 ++++++---
 .../jgit/command/branch/JGitBranchCommand.java  | 17 +++++++++----
 .../command/changelog/JGitChangeLogCommand.java |  8 +++++--
 .../command/checkin/JGitCheckInCommand.java     |  7 +++++-
 .../command/checkout/JGitCheckOutCommand.java   | 25 +++++++++++---------
 .../git/jgit/command/diff/JGitDiffCommand.java  | 15 +++++++++---
 .../git/jgit/command/list/JGitListCommand.java  |  7 +++++-
 .../remoteinfo/JGitRemoteInfoCommand.java       |  7 +++++-
 .../jgit/command/status/JGitStatusCommand.java  |  8 ++++++-
 .../git/jgit/command/tag/JGitTagCommand.java    | 14 +++++++----
 12 files changed, 105 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
index b253be2..08c3376 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
@@ -87,6 +87,18 @@ public class JGitUtils
     }
 
     /**
+     * Closes the repository wrapped by the passed git object
+     * @param git 
+     */
+    public static void closeRepo( Git git )
+    {
+        if ( git != null && git.getRepository() != null )
+        {
+            git.getRepository().close();
+        }
+    }
+
+    /**
      * Construct a logging ProgressMonitor for all JGit operations.
      *
      * @param logger

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/add/JGitAddCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/add/JGitAddCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/add/JGitAddCommand.java
index 68e8fa8..b448b62 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/add/JGitAddCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/add/JGitAddCommand.java
@@ -53,9 +53,10 @@ public class JGitAddCommand
         {
             throw new ScmException( "You must provide at least one file/directory to add (e.g. -Dincludes=...)" );
         }
+        Git git = null;
         try
         {
-            Git git = Git.open( fileSet.getBasedir() );
+            git = Git.open( fileSet.getBasedir() );
 
             List<ScmFile> addedFiles = JGitUtils.addAllFiles( git, fileSet );
 
@@ -74,6 +75,10 @@ public class JGitAddCommand
         {
             throw new ScmException( "JGit add failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
 
     }
 

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/blame/JGitBlameCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/blame/JGitBlameCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/blame/JGitBlameCommand.java
index 1a50ede..043af04 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/blame/JGitBlameCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/blame/JGitBlameCommand.java
@@ -26,6 +26,7 @@ import org.apache.maven.scm.command.blame.BlameLine;
 import org.apache.maven.scm.command.blame.BlameScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.jgit.command.JGitUtils;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.blame.BlameResult;
 
@@ -43,15 +44,15 @@ public class JGitBlameCommand
 {
 
     @Override
-    public BlameScmResult executeBlameCommand( ScmProviderRepository repo, ScmFileSet workingDirectory,
-                                               String filename )
+    public BlameScmResult executeBlameCommand( ScmProviderRepository repo, ScmFileSet workingDirectory, String filename )
         throws ScmException
     {
 
+        Git git = null;
         File basedir = workingDirectory.getBasedir();
         try
         {
-            Git git = Git.open( basedir );
+            git = Git.open( basedir );
             BlameResult blameResult = git.blame().setFilePath( filename ).call();
 
             List<BlameLine> lines = new ArrayList<BlameLine>();
@@ -71,6 +72,10 @@ public class JGitBlameCommand
         {
             throw new ScmException( "JGit blame failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/branch/JGitBranchCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/branch/JGitBranchCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/branch/JGitBranchCommand.java
index 0de81a6..b42afe6 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/branch/JGitBranchCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/branch/JGitBranchCommand.java
@@ -74,9 +74,10 @@ public class JGitBranchCommand
             throw new ScmException( "This provider doesn't support branching subsets of a directory" );
         }
 
+        Git git = null;
         try
         {
-            Git git = Git.open( fileSet.getBasedir() );
+            git = Git.open( fileSet.getBasedir() );
             Ref branchResult = git.branchCreate().setName( branch ).call();
             getLogger().info( "created [" + branchResult.getName() + "]" );
 
@@ -91,13 +92,14 @@ public class JGitBranchCommand
             if ( repo.isPushChanges() )
             {
                 getLogger().info( "push branch [" + branch + "] to remote..." );
-                JGitUtils.push( getLogger(), git, (GitScmProviderRepository) repo,
-                                new RefSpec( Constants.R_HEADS + branch ) );
+                JGitUtils.push( getLogger(), git, (GitScmProviderRepository) repo, new RefSpec( Constants.R_HEADS
+                    + branch ) );
             }
 
             // search for the tagged files
-            RevWalk revWalk = new RevWalk( git.getRepository() );
+            final RevWalk revWalk = new RevWalk( git.getRepository() );
             RevCommit commit = revWalk.parseCommit( branchResult.getObjectId() );
+            revWalk.release();
 
             final TreeWalk walk = new TreeWalk( git.getRepository() );
             walk.reset(); // drop the first empty tree, which we do not need here
@@ -109,6 +111,7 @@ public class JGitBranchCommand
             {
                 files.add( new ScmFile( walk.getPathString(), ScmFileStatus.CHECKED_OUT ) );
             }
+            walk.release();
 
             return new BranchScmResult( "JGit branch", files );
 
@@ -117,11 +120,15 @@ public class JGitBranchCommand
         {
             throw new ScmException( "JGit branch failed!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 
     /**
      * gets a set of names of the available branches in the given repo
-     *
+     * 
      * @param git the repo to list the branches for
      * @return set of short branch names
      * @throws GitAPIException

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java
index 8c3cdce..933255f 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java
@@ -81,10 +81,10 @@ public class JGitChangeLogCommand
                                                           ScmVersion endVersion )
         throws ScmException
     {
+        Git git = null;
         try
         {
-            Git git = Git.open( fileSet.getBasedir() );
-
+            git = Git.open( fileSet.getBasedir() );
 
             String startRev = startVersion != null ? startVersion.getName() : null;
             String endRev = endVersion != null ? endVersion.getName() : null;
@@ -117,6 +117,10 @@ public class JGitChangeLogCommand
         {
             throw new ScmException( "JGit changelog failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 
     public List<ChangeEntry> whatchanged( Repository repo, RevSort[] sortings, String fromRev, String toRev,

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
index 0e2d5fb..98c0f98 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
@@ -58,10 +58,11 @@ public class JGitCheckInCommand
         throws ScmException
     {
 
+        Git git = null;
         try
         {
             File basedir = fileSet.getBasedir();
-            Git git = Git.open( basedir );
+            git = Git.open( basedir );
 
             boolean doCommit = false;
 
@@ -125,6 +126,10 @@ public class JGitCheckInCommand
         {
             throw new ScmException( "JGit checkin failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
index 55697a4..8e29d90 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
@@ -36,7 +36,6 @@ import org.apache.maven.scm.provider.git.jgit.command.remoteinfo.JGitRemoteInfoC
 import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
 import org.codehaus.plexus.util.StringUtils;
 import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.internal.storage.file.WindowCache;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ProgressMonitor;
 import org.eclipse.jgit.revwalk.RevCommit;
@@ -60,9 +59,8 @@ public class JGitCheckOutCommand
     implements GitCommand
 {
     /**
-     * For git, the given repository is a remote one. We have to clone it first
-     * if the working directory does not contain a git repo yet, otherwise we
-     * have to git-pull it.
+     * For git, the given repository is a remote one. We have to clone it first if the working directory does not
+     * contain a git repo yet, otherwise we have to git-pull it.
      * <p/>
      * {@inheritDoc}
      */
@@ -78,6 +76,7 @@ public class JGitCheckOutCommand
             throw new ScmException( "remote repository must not be the working directory" );
         }
 
+        Git git = null;
         try
         {
 
@@ -102,22 +101,20 @@ public class JGitCheckOutCommand
 
                 // FIXME only if windauze
                 WindowCacheConfig cfg = new WindowCacheConfig();
-                cfg.setPackedGitMMAP(false);
+                cfg.setPackedGitMMAP( false );
                 cfg.install();
 
                 // no git repo seems to exist, let's clone the original repo
                 CredentialsProvider credentials = JGitUtils.getCredentials( (GitScmProviderRepository) repo );
                 getLogger().info( "cloning [" + branch + "] to " + fileSet.getBasedir() );
-                Git.cloneRepository().setURI( repository.getFetchUrl() ).setCredentialsProvider(
-                    credentials ).setBranch( branch ).setDirectory( fileSet.getBasedir() ).setProgressMonitor(
-                    monitor ).call();
+                Git.cloneRepository().setURI( repository.getFetchUrl() ).setCredentialsProvider( credentials ).setBranch( branch ).setDirectory( fileSet.getBasedir() ).setProgressMonitor( monitor ).call();
             }
 
             JGitRemoteInfoCommand remoteInfoCommand = new JGitRemoteInfoCommand();
             remoteInfoCommand.setLogger( getLogger() );
             RemoteInfoScmResult result = remoteInfoCommand.executeRemoteInfoCommand( repository, fileSet, null );
 
-            Git git = Git.open( fileSet.getBasedir() );
+            git = Git.open( fileSet.getBasedir() );
             if ( fileSet.getBasedir().exists() && new File( fileSet.getBasedir(), ".git" ).exists()
                 && result.getBranches().size() > 0 )
             {
@@ -156,12 +153,13 @@ public class JGitCheckOutCommand
             else
             {
                 getLogger().info( "checkout remote branch [" + branch + "] at " + fileSet.getBasedir() );
-                git.checkout().setName( branch ).setCreateBranch( true ).setStartPoint(
-                    Constants.DEFAULT_REMOTE_NAME + "/" + branch ).call();
+                git.checkout().setName( branch ).setCreateBranch( true ).setStartPoint( Constants.DEFAULT_REMOTE_NAME
+                                                                                            + "/" + branch ).call();
             }
 
             RevWalk revWalk = new RevWalk( git.getRepository() );
             RevCommit commit = revWalk.parseCommit( git.getRepository().resolve( Constants.HEAD ) );
+            revWalk.release();
 
             final TreeWalk walk = new TreeWalk( git.getRepository() );
             walk.reset(); // drop the first empty tree, which we do not need here
@@ -173,6 +171,7 @@ public class JGitCheckOutCommand
             {
                 listedFiles.add( new ScmFile( walk.getPathString(), ScmFileStatus.CHECKED_OUT ) );
             }
+            walk.release();
 
             getLogger().debug( "current branch: " + git.getRepository().getBranch() );
 
@@ -182,6 +181,10 @@ public class JGitCheckOutCommand
         {
             throw new ScmException( "JGit checkout failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
index 74e13cc..11a3bdd 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
@@ -27,6 +27,7 @@ import org.apache.maven.scm.command.diff.DiffScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.git.command.GitCommand;
 import org.apache.maven.scm.provider.git.command.diff.GitDiffConsumer;
+import org.apache.maven.scm.provider.git.jgit.command.JGitUtils;
 import org.codehaus.plexus.util.StringUtils;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.errors.GitAPIException;
@@ -56,16 +57,22 @@ public class JGitDiffCommand
         throws ScmException
     {
 
+        Git git = null;
         try
         {
-            Git git = Git.open( fileSet.getBasedir() );
-
-            return callDiff( git, startRevision, endRevision );
+            git = Git.open( fileSet.getBasedir() );
+            DiffScmResult diff = callDiff( git, startRevision, endRevision );
+            git.getRepository().close();
+            return diff;
         }
         catch ( Exception e )
         {
             throw new ScmException( "JGit diff failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 
     public DiffScmResult callDiff( Git git, ScmVersion startRevision, ScmVersion endRevision )
@@ -95,6 +102,8 @@ public class JGitDiffCommand
 
         GitDiffConsumer consumer = new GitDiffConsumer( getLogger(), null );
         String fullDiff = out.toString();
+        out.close();
+
         String[] lines = fullDiff.split( System.getProperty( "line.separator" ) );
         for ( String aLine : lines )
         {

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java
index 4999535..054f9bc 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java
@@ -53,9 +53,10 @@ public class JGitListCommand
         throws ScmException
     {
 
+        Git git = null;
         try
         {
-            Git git = Git.open( fileSet.getBasedir() );
+            git = Git.open( fileSet.getBasedir() );
             CredentialsProvider credentials =
                 JGitUtils.prepareSession( getLogger(), git, (GitScmProviderRepository) repo );
 
@@ -73,5 +74,9 @@ public class JGitListCommand
         {
             throw new ScmException( "JGit ls-remote failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/remoteinfo/JGitRemoteInfoCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/remoteinfo/JGitRemoteInfoCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/remoteinfo/JGitRemoteInfoCommand.java
index 3c5fd5b..36c90a5 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/remoteinfo/JGitRemoteInfoCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/remoteinfo/JGitRemoteInfoCommand.java
@@ -54,9 +54,10 @@ public class JGitRemoteInfoCommand
     {
 
         GitScmProviderRepository repo = (GitScmProviderRepository) repository;
+        Git git = null;
         try
         {
-            Git git = Git.open( fileSet.getBasedir() );
+            git = Git.open( fileSet.getBasedir() );
             CredentialsProvider credentials = JGitUtils.getCredentials( repo );
 
             LsRemoteCommand lsCommand =
@@ -82,5 +83,9 @@ public class JGitRemoteInfoCommand
         {
             throw new ScmException( "JGit remoteinfo failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/status/JGitStatusCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/status/JGitStatusCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/status/JGitStatusCommand.java
index 377ae09..056843e 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/status/JGitStatusCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/status/JGitStatusCommand.java
@@ -27,6 +27,7 @@ import org.apache.maven.scm.command.status.AbstractStatusCommand;
 import org.apache.maven.scm.command.status.StatusScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.jgit.command.JGitUtils;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.Status;
 
@@ -49,9 +50,10 @@ public class JGitStatusCommand
     protected StatusScmResult executeStatusCommand( ScmProviderRepository repo, ScmFileSet fileSet )
         throws ScmException
     {
+        Git git = null;
         try
         {
-            Git git = Git.open( fileSet.getBasedir() );
+            git = Git.open( fileSet.getBasedir() );
             Status status = git.status().call();
             List<ScmFile> changedFiles = getFileStati( status );
 
@@ -61,6 +63,10 @@ public class JGitStatusCommand
         {
             throw new ScmException( "JGit status failure!", e );
         }
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 
     private List<ScmFile> getFileStati( Status status )

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/598a90ea/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java
index 15b76f7..a66992a 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java
@@ -78,9 +78,10 @@ public class JGitTagCommand
 
         String escapedTagName = tag.trim().replace( ' ', '_' );
 
+        Git git = null;
         try
         {
-            Git git = Git.open( fileSet.getBasedir() );
+            git = Git.open( fileSet.getBasedir() );
 
             // tag the revision
             String tagMessage = scmTagParameters.getMessage();
@@ -89,13 +90,14 @@ public class JGitTagCommand
             if ( repo.isPushChanges() )
             {
                 getLogger().info( "push tag [" + escapedTagName + "] to remote..." );
-                JGitUtils.push( getLogger(), git, (GitScmProviderRepository) repo,
-                                new RefSpec( Constants.R_TAGS + escapedTagName ) );
+                JGitUtils.push( getLogger(), git, (GitScmProviderRepository) repo, new RefSpec( Constants.R_TAGS
+                    + escapedTagName ) );
             }
 
             // search for the tagged files
             RevWalk revWalk = new RevWalk( git.getRepository() );
             RevCommit commit = revWalk.parseCommit( tagRef.getObjectId() );
+            revWalk.release();
 
             final TreeWalk walk = new TreeWalk( git.getRepository() );
             walk.reset(); // drop the first empty tree, which we do not need here
@@ -107,6 +109,7 @@ public class JGitTagCommand
             {
                 taggedFiles.add( new ScmFile( walk.getPathString(), ScmFileStatus.CHECKED_OUT ) );
             }
+            walk.release();
 
             return new TagScmResult( "JGit tag", taggedFiles );
         }
@@ -114,7 +117,10 @@ public class JGitTagCommand
         {
             throw new ScmException( "JGit tag failure!", e );
         }
-
+        finally
+        {
+            JGitUtils.closeRepo( git );
+        }
     }
 
 }