threads / patch / 19048

patchAdded support for creating bare repositories

Subject: [JGIT PATCH] Added support for creating bare repositories

## tl;dr

3 messages between Apr 24, 2009 and Apr 27, 2009. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Constantine Plotnikov· Apr 24, 2009, 15:36 UTC · lore

Now it is possible to create bare repositories. The difference from normal repository creation is that directory where repository is created might exists and that core.bare property is set to true.

Signed-off-by: Constantine Plotnikov <constantine.plotnikov@gmail.com>
---
 .../src/org/spearce/jgit/pgm/Init.java             |    8 ++++-
 .../src/org/spearce/jgit/lib/Repository.java       |   28 ++++++++++++++++---
 2 files changed, 29 insertions(+), 7 deletions(-)
Show changes to 2 files +29 −7

org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Init.java, org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java

diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Init.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Init.java
index 197864d..3ab1599 100644
--- a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Init.java
+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Init.java
@@ -39,10 +39,14 @@
 
 import java.io.File;
 
+import org.kohsuke.args4j.Option;
 import org.spearce.jgit.lib.Repository;
 
 @Command(common = true, usage = "Create an empty git repository")
 class Init extends TextBuiltin {
+	@Option(name = "--bare", usage = "Create a bare repository")
+	private boolean bare;
+
 	@Override
 	protected final boolean requiresRepository() {
 		return false;
@@ -51,9 +55,9 @@ protected final boolean requiresRepository() {
 	@Override
 	protected void run() throws Exception {
 		if (gitdir == null)
-			gitdir = new File(".git");
+			gitdir = new File(bare ? "." : ".git");
 		db = new Repository(gitdir);
-		db.create();
+		db.create(bare);
 		out.println("Initialized empty Git repository in "
 				+ gitdir.getAbsolutePath());
 	}
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 cfd92b8..f2b0b3f 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
@@ -161,16 +161,30 @@ public Repository(final File d) throws IOException {
 
 	/**
 	 * Create a new Git repository initializing the necessary files and
-	 * directories.
+	 * directories. Repository with working tree is created using this method.
 	 *
 	 * @throws IOException
+	 * @see #create(boolean)
 	 */
 	public synchronized void create() throws IOException {
-		if (gitDir.exists()) {
+		create(false);
+	}
+
+	/**
+	 * Create a new Git repository initializing the necessary files and
+	 * directories.
+	 * 
+	 * @param bare
+	 *            if true, a bare repository is created.
+	 * 
+	 * @throws IOException
+	 *             in case of IO problem
+	 */
+	public void create(boolean bare) throws IOException {
+		if ((bare ? new File(gitDir, "config") : gitDir).exists()) {
 			throw new IllegalStateException("Repository already exists: "
 					+ gitDir);
 		}
-
 		gitDir.mkdirs();
 		refs.create();
 
@@ -183,8 +197,12 @@ public synchronized void create() throws IOException {
 		final String master = Constants.R_HEADS + Constants.MASTER;
 		refs.link(Constants.HEAD, master);
 
-		getConfig().create();
-		getConfig().save();
+		RepositoryConfig cfg = getConfig();
+		cfg.create();
+		if (bare) {
+			cfg.setString("core", null, "bare", "true");
+		}
+		cfg.save();
 	}
 
 	private synchronized File[] objectsDirs(){
-- 
1.6.1.2
Robin Rosenberg· Apr 26, 2009, 22:29 UTC · re: Constantine Plotnikov · lore

Re: [JGIT PATCH] Added support for creating bare repositories

fredag 24 april 2009 17:36:57 skrev Constantine Plotnikov <constantine.plotnikov@gmail.com>:
> Now it is possible to create bare repositories.
> The difference from normal repository creation is
> that directory where repository is created might
> exists and that core.bare property is set to true.

I know C Git doesn't check if a directory is a non-bare repo, but I think that's wrong, so if I try to create a bare repo in a non-bare repo that should be an error. For now I'll accept it anyway since the C version allows it and it is useful.

-- robin
Constantine Plotnikov· Apr 27, 2009, 12:46 UTC · re: Robin Rosenberg · lore

Re: [JGIT PATCH] Added support for creating bare repositories

On Mon, Apr 27, 2009 at 2:29 AM, Robin Rosenberg <robin.rosenberg.lists@dewire.com> wrote:

Show 11 quoted lines
> fredag 24 april 2009 17:36:57 skrev Constantine Plotnikov <constantine.plotnikov@gmail.com>:
>> Now it is possible to create bare repositories.
>> The difference from normal repository creation is
>> that directory where repository is created might
>> exists and that core.bare property is set to true.
>
> I know C Git doesn't check if a directory is a non-bare repo, but I think
> that's wrong, so if I try to create a bare repo in a non-bare repo that
> should be an error. For now I'll accept it anyway since the C version allows
> it and it is useful.
>

I'm not sure that this should be an error. We have a bare git repository with a test data inside the non-bare repository. And such feature might be nice to have to other git related tools as well. %)

Constantine

← back to recent threads