[JGIT PATCH v2 05/24] Added WorkTree class which can be constructed over Repository.
---
.../src/org/spearce/jgit/lib/Repository.java | 30 +++++++++
.../src/org/spearce/jgit/lib/WorkTree.java | 67 ++++++++++++++++++++
2 files changed, 97 insertions(+), 0 deletions(-)
create mode 100644 org.spearce.jgit/src/org/spearce/jgit/lib/WorkTree.java
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
index 44fd81b..3186fe2 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
@@ -1212,4 +1212,34 @@ public class Repository {
return mapCommit;
}
+ /**
+ * Creates a new {@link WorkTree} and initialize a repository for it.
+ *
+ * @param workTreeDirectory
+ * the directory with the project files.
+ * @return a new {@link WorkTree} with a new and open {@link Repository}.
+ * @throws IOException
+ * thrown by {@link Repository#create()}
+ */
+ public static WorkTree createWorkTree(File workTreeDirectory)
+ throws IOException {
+ final File gitDirectory = new File(workTreeDirectory,
+ Constants.REPOSITORY_DIRECTORY_NAME);
+ if (gitDirectory.exists()) {
+ throw new IllegalArgumentException(
+ "Repository exists in given project directory.");
+ }
+ final Repository repository = new Repository(gitDirectory);
+ try {
+ repository.create();
+ return new WorkTree(workTreeDirectory, repository);
+ } catch (RuntimeException e) {
+ repository.close();
+ throw e;
+ } catch (IOException e) {
+ repository.close();
+ throw e;
+ }
+ }
+
}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/WorkTree.java b/org.spearce.jgit/src/org/spearce/jgit/lib/WorkTree.java
new file mode 100644
index 0000000..14bdda0
--- /dev/null
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/WorkTree.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2008 Florian Köberle
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ */
+package org.spearce.jgit.lib;
+
+import java.io.File;
+
+/**
+ * Represents a work tree controlled by git. Use {@link Repository} in order to
+ * create an object of this class.
+ *
+ */
+public class WorkTree {
+ private final File directory;
+
+ private final Repository repository;
+
+ /**
+ * This constructor should be only used by the class {@link Repository}.
+ *
+ * @param directory
+ * defines the value of the directory field.
+ * @param repository
+ * defines the value of the repository field.
+ */
+ WorkTree(File directory, Repository repository) {
+ this.directory = directory;
+ this.repository = repository;
+ }
+
+ /**
+ *
+ * @return the directory which contains the files of the project. Usually
+ * this directory contain a .git directory with the repository.
+ */
+ public File getDirectory() {
+ return directory;
+ }
+
+ /**
+ * @return the {@link Repository} object of the project.
+ */
+ public Repository getRepository() {
+ return repository;
+ }
+
+ /**
+ * Closes the git repository of this project.
+ */
+ public void closeRepository() {
+ repository.close();
+ }
+
+}
--
1.5.4.3