@ -72,12 +72,12 @@ import org.eclipse.jgit.treewalk.TreeWalk;
*
*
* < pre >
* < pre >
* ArchiveCommand . registerFormat ( "tar" , new TarFormat ( ) ) ;
* ArchiveCommand . registerFormat ( "tar" , new TarFormat ( ) ) ;
* cmd = git . archive ( ) ;
* try {
* try {
* cmd . setTree ( db . resolve ( & quot ; HEAD & quot ; ) )
* git . archive ( )
* . setOutputStream ( out ) . call ( ) ;
* . setTree ( db . resolve ( & quot ; HEAD & quot ; ) )
* . setOutputStream ( out )
* . call ( ) ;
* } finally {
* } finally {
* cmd . release ( ) ;
* ArchiveCommand . unregisterFormat ( "tar" ) ;
* ArchiveCommand . unregisterFormat ( "tar" ) ;
* }
* }
* < / pre >
* < / pre >
@ -87,11 +87,12 @@ import org.eclipse.jgit.treewalk.TreeWalk;
* < pre >
* < pre >
* ArchiveCommand . registerFormat ( "zip" , new ZipFormat ( ) ) ;
* ArchiveCommand . registerFormat ( "zip" , new ZipFormat ( ) ) ;
* try {
* try {
* cmd . setTree ( db . resolve ( & quot ; master & quot ; ) )
* git . archive ( ) .
* . setTree ( db . resolve ( & quot ; master & quot ; ) )
* . setFormat ( "zip" )
* . setFormat ( "zip" )
* . setOutputStream ( out ) . call ( ) ;
* . setOutputStream ( out )
* . call ( ) ;
* } finally {
* } finally {
* cmd . release ( ) ;
* ArchiveCommand . unregisterFormat ( "zip" ) ;
* ArchiveCommand . unregisterFormat ( "zip" ) ;
* }
* }
* < / pre >
* < / pre >
@ -197,7 +198,7 @@ public class ArchiveCommand extends GitCommand<OutputStream> {
}
}
private OutputStream out ;
private OutputStream out ;
private TreeWalk walk ;
private ObjectId tree ;
private String format = "tar" ;
private String format = "tar" ;
/ * *
/ * *
@ -205,27 +206,20 @@ public class ArchiveCommand extends GitCommand<OutputStream> {
* /
* /
public ArchiveCommand ( Repository repo ) {
public ArchiveCommand ( Repository repo ) {
super ( repo ) ;
super ( repo ) ;
walk = new TreeWalk ( repo ) ;
setCallable ( false ) ;
}
/ * *
* Release any resources used by the internal ObjectReader .
* < p >
* This does not close the output stream set with setOutputStream , which
* belongs to the caller .
* /
public void release ( ) {
walk . release ( ) ;
}
}
private < T extends Closeable >
private < T extends Closeable >
OutputStream writeArchive ( Format < T > fmt ) throws GitAPIException {
OutputStream writeArchive ( Format < T > fmt ) throws GitAPIException {
final MutableObjectId idBuf = new MutableObjectId ( ) ;
final TreeWalk walk = new TreeWalk ( repo ) ;
try {
final T outa = fmt . createArchiveOutputStream ( out ) ;
final T outa = fmt . createArchiveOutputStream ( out ) ;
try {
final MutableObjectId idBuf = new MutableObjectId ( ) ;
final ObjectReader reader = walk . getObjectReader ( ) ;
final ObjectReader reader = walk . getObjectReader ( ) ;
final RevWalk rw = new RevWalk ( walk . getObjectReader ( ) ) ;
try {
walk . reset ( rw . parseTree ( tree ) ) ;
try {
walk . setRecursive ( true ) ;
walk . setRecursive ( true ) ;
while ( walk . next ( ) ) {
while ( walk . next ( ) ) {
final String name = walk . getPathString ( ) ;
final String name = walk . getPathString ( ) ;
@ -242,13 +236,14 @@ public class ArchiveCommand extends GitCommand<OutputStream> {
} finally {
} finally {
outa . close ( ) ;
outa . close ( ) ;
}
}
return out ;
} catch ( IOException e ) {
} catch ( IOException e ) {
// TODO(jrn): Throw finer-grained errors.
// TODO(jrn): Throw finer-grained errors.
throw new JGitInternalException (
throw new JGitInternalException (
JGitText . get ( ) . exceptionCaughtDuringExecutionOfArchiveCommand , e ) ;
JGitText . get ( ) . exceptionCaughtDuringExecutionOfArchiveCommand , e ) ;
} finally {
walk . release ( ) ;
}
}
return out ;
}
}
/ * *
/ * *
@ -256,6 +251,8 @@ public class ArchiveCommand extends GitCommand<OutputStream> {
* /
* /
@Override
@Override
public OutputStream call ( ) throws GitAPIException {
public OutputStream call ( ) throws GitAPIException {
checkCallable ( ) ;
final Format < ? > fmt = lookupFormat ( format ) ;
final Format < ? > fmt = lookupFormat ( format ) ;
return writeArchive ( fmt ) ;
return writeArchive ( fmt ) ;
}
}
@ -264,11 +261,13 @@ public class ArchiveCommand extends GitCommand<OutputStream> {
* @param tree
* @param tree
* the tag , commit , or tree object to produce an archive for
* the tag , commit , or tree object to produce an archive for
* @return this
* @return this
* @throws IOException
* /
* /
public ArchiveCommand setTree ( ObjectId tree ) throws IOException {
public ArchiveCommand setTree ( ObjectId tree ) {
final RevWalk rw = new RevWalk ( walk . getObjectReader ( ) ) ;
if ( tree = = null )
walk . reset ( rw . parseTree ( tree ) ) ;
throw new IllegalArgumentException ( ) ;
this . tree = tree ;
setCallable ( true ) ;
return this ;
return this ;
}
}