1 /*
2 * Copyright (C) 2010, Google Inc. and others
3 *
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Distribution License v. 1.0 which is available at
6 * https://www.eclipse.org/org/documents/edl-v10.php.
7 *
8 * SPDX-License-Identifier: BSD-3-Clause
9 */
10
11 package org.eclipse.jgit.storage.file;
12
13 import java.io.File;
14 import java.io.IOException;
15
16 import org.eclipse.jgit.errors.RepositoryNotFoundException;
17 import org.eclipse.jgit.internal.storage.file.FileRepository;
18 import org.eclipse.jgit.lib.BaseRepositoryBuilder;
19 import org.eclipse.jgit.lib.Repository;
20
21 /**
22 * Constructs a {@link org.eclipse.jgit.internal.storage.file.FileRepository}.
23 * <p>
24 * Applications must set one of {@link #setGitDir(File)} or
25 * {@link #setWorkTree(File)}, or use {@link #readEnvironment()} or
26 * {@link #findGitDir()} in order to configure the minimum property set
27 * necessary to open a repository.
28 * <p>
29 * Single repository applications trying to be compatible with other Git
30 * implementations are encouraged to use a model such as:
31 *
32 * <pre>
33 * new FileRepositoryBuilder() //
34 * .setGitDir(gitDirArgument) // --git-dir if supplied, no-op if null
35 * .readEnviroment() // scan environment GIT_* variables
36 * .findGitDir() // scan up the file system tree
37 * .build()
38 * </pre>
39 */
40 public class FileRepositoryBuilder extends
41 BaseRepositoryBuilder<FileRepositoryBuilder, Repository> {
42 /**
43 * {@inheritDoc}
44 * <p>
45 * Create a repository matching the configuration in this builder.
46 * <p>
47 * If an option was not set, the build method will try to default the option
48 * based on other options. If insufficient information is available, an
49 * exception is thrown to the caller.
50 *
51 * @since 3.0
52 */
53 @Override
54 public Repository build() throws IOException {
55 FileRepository repo = new FileRepository(setup());
56 if (isMustExist() && !repo.getObjectDatabase().exists())
57 throw new RepositoryNotFoundException(getGitDir());
58 return repo;
59 }
60
61 /**
62 * Convenience factory method to construct a
63 * {@link org.eclipse.jgit.internal.storage.file.FileRepository}.
64 *
65 * @param gitDir
66 * {@code GIT_DIR}, the repository meta directory.
67 * @return a repository matching this configuration.
68 * @throws java.io.IOException
69 * the repository could not be accessed to configure the rest of
70 * the builder's parameters.
71 * @since 3.0
72 */
73 public static Repository create(File gitDir) throws IOException {
74 return new FileRepositoryBuilder().setGitDir(gitDir).readEnvironment()
75 .build();
76 }
77 }