2 * Copyright (C) 2007, Robin Rosenberg <robin.rosenberg@dewire.com>
3 * Copyright (C) 2007, Shawn O. Pearce <spearce@spearce.org>
7 * Redistribution and use in source and binary forms, with or
8 * without modification, are permitted provided that the following
11 * - Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
14 * - Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
19 * - Neither the name of the Git Development Community nor the
20 * names of its contributors may be used to endorse or promote
21 * products derived from this software without specific prior
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
25 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
26 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
29 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
31 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
36 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 package org
.spearce
.jgit
.lib
;
42 import java
.io
.IOException
;
44 import org
.spearce
.jgit
.errors
.SymlinksNotSupportedException
;
47 * A tree visitor for writing a directory tree to the git object database. Blob
48 * data is fetched from the files, not the cached blobs.
50 public class WriteTree
extends TreeVisitorWithCurrentDirectory
{
51 private final ObjectWriter ow
;
54 * Construct a WriteTree for a given directory
56 * @param sourceDirectory
59 public WriteTree(final File sourceDirectory
, final Repository db
) {
60 super(sourceDirectory
);
61 ow
= new ObjectWriter(db
);
64 public void visitFile(final FileTreeEntry f
) throws IOException
{
65 f
.setId(ow
.writeBlob(new File(getCurrentDirectory(), f
.getName())));
68 public void visitSymlink(final SymlinkTreeEntry s
) throws IOException
{
70 throw new SymlinksNotSupportedException("Symlink \""
72 + "\" cannot be written as the link target"
73 + " cannot be read from within Java.");
77 public void endVisitTree(final Tree t
) throws IOException
{
78 super.endVisitTree(t
);
79 t
.setId(ow
.writeTree(t
));