]> source.dussan.org Git - jgit.git/commitdiff
archive: Release resources before returning 23/12223/2
authorJonathan Nieder <jrn@google.com>
Thu, 25 Apr 2013 21:20:54 +0000 (14:20 -0700)
committerJonathan Nieder <jrn@google.com>
Fri, 26 Apr 2013 19:58:34 +0000 (12:58 -0700)
The only caller exits immediately after calling execute() so this
shouldn't make a difference, but it's good practice and should make it
easier to expose the functionality in a public API later.

Change-Id: Ia6cd2ce8382f1a62e576409107fc5c9a6b321fb6

org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Archive.java

index 963528d1060c781fecfed2dc2e51374eece84140..9075cf068b18f9b90bd12173234c13800141e9ed 100644 (file)
@@ -78,32 +78,36 @@ class Archive extends TextBuiltin {
 
        @Override
        protected void run() throws Exception {
-               final TreeWalk walk = new TreeWalk(db);
-               final ObjectReader reader = walk.getObjectReader();
                final MutableObjectId idBuf = new MutableObjectId();
                final Archiver fmt = formats.get(format);
-               final ArchiveOutputStream outa = fmt.createArchiveOutputStream(outs);
 
                if (tree == null)
                        throw die(CLIText.get().treeIsRequired);
 
-               walk.reset();
-               walk.addTree(tree);
-               walk.setRecursive(true);
-               while (walk.next()) {
-                       final String name = walk.getPathString();
-                       final FileMode mode = walk.getFileMode(0);
-
-                       if (mode == FileMode.TREE)
-                               // ZIP entries for directories are optional.
-                               // Leave them out, mimicking "git archive".
-                               continue;
+               final ArchiveOutputStream outa = fmt.createArchiveOutputStream(outs);
+               final TreeWalk walk = new TreeWalk(db);
+               final ObjectReader reader = walk.getObjectReader();
 
-                       walk.getObjectId(idBuf, 0);
-                       fmt.putEntry(name, mode, reader.open(idBuf), outa);
+               try {
+                       walk.reset();
+                       walk.addTree(tree);
+                       walk.setRecursive(true);
+                       while (walk.next()) {
+                               final String name = walk.getPathString();
+                               final FileMode mode = walk.getFileMode(0);
+
+                               if (mode == FileMode.TREE)
+                                       // ZIP entries for directories are optional.
+                                       // Leave them out, mimicking "git archive".
+                                       continue;
+
+                               walk.getObjectId(idBuf, 0);
+                               fmt.putEntry(name, mode, reader.open(idBuf), outa);
+                       }
+               } finally {
+                       reader.release();
+                       outa.close();
                }
-
-               outa.close();
        }
 
        static private void warnArchiveEntryModeIgnored(String name) {