Implemented pack reading.
[egit/egit-new.git] / org.spearce.jgit / src / org / spearce / jgit / lib / CopyTreeToDirectory.java
blob865f9165b32ded89c03b958b8f9b0df341a94cdf
1 package org.spearce.jgit.lib;
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6 import java.io.InputStream;
8 public class CopyTreeToDirectory extends TreeVisitor {
9 private final byte[] copyBuffer = new byte[8192];
11 private File dest;
13 public CopyTreeToDirectory(final File x) {
14 dest = x;
17 protected void visitTree(final Tree t) throws IOException {
18 if (t.isRoot()) {
19 dest.mkdirs();
20 super.visitTree(t);
21 } else {
22 final File d = new File(dest, t.getName());
23 final File o = dest;
24 d.mkdir();
25 dest = d;
26 super.visitTree(t);
27 dest = o;
31 protected void visitFile(final FileTreeEntry f) throws IOException {
32 final File d = new File(dest, f.getName());
33 final ObjectReader or = f.openBlob();
34 final InputStream is;
35 if (or == null) {
36 throw new MissingObjectException(Constants.TYPE_BLOB, f.getId());
38 is = or.getInputStream();
39 try {
40 final FileOutputStream fos = new FileOutputStream(d);
41 try {
42 int r;
43 while ((r = is.read(copyBuffer)) > 0) {
44 fos.write(copyBuffer, 0, r);
46 } finally {
47 fos.close();
49 } finally {
50 or.close();
52 super.visitFile(f);