From 16856603ec575718857768e2d18e455c95fd6ea4 Mon Sep 17 00:00:00 2001 From: James Moger Date: Tue, 7 Jun 2011 19:08:24 -0400 Subject: [PATCH] Documentation. Moved clone and fetch into JGitUtils. Create bare only. --- docs/00_index.mkd | 2 + docs/00_setup.mkd | 8 +-- docs/01_faq.mkd | 23 +++++++- docs/architecture.odg | Bin 15758 -> 15754 bytes docs/architecture.png | Bin 28259 -> 71104 bytes src/com/gitblit/GitBlit.java | 4 +- src/com/gitblit/utils/JGitUtils.java | 58 ++++++++++++++++++- tests/com/gitblit/tests/GitBlitSuite.java | 64 ++++++--------------- tests/com/gitblit/tests/JGitUtilsTest.java | 22 +++---- 9 files changed, 110 insertions(+), 71 deletions(-) diff --git a/docs/00_index.mkd b/docs/00_index.mkd index 09027339..8c8f9322 100644 --- a/docs/00_index.mkd +++ b/docs/00_index.mkd @@ -31,6 +31,7 @@ sources @ [Github][gitbltsrc] - Repository Owners may edit repositories through the web UI - Automatically generates a self-signed certificate for https communications - Git-notes support +- Branch-selectable metrics - Dates can optionally be displayed using the browser's reported timezone - Author and Committer email address display can be controlled - Dynamic zip downloads feature @@ -57,6 +58,7 @@ sources @ [Github][gitbltsrc] - Unit testing - Branch selector on Metrics - Blame +- Clone remote repository ### Idea List - Ticgit activity/timeline diff --git a/docs/00_setup.mkd b/docs/00_setup.mkd index 48e02b7a..fc2fd852 100644 --- a/docs/00_setup.mkd +++ b/docs/00_setup.mkd @@ -9,7 +9,7 @@ Open `gitblit.properties` in your favorite text editor and make sure to review a - *server.httpBindInterface* and *server.httpsBindInterface*
**NOTE:** Consider using **https** exclusively because passwords for authentication are transmitted as clear text! - *server.storePassword*
-**NOTE:** The certificate password AND the keystore password must match! +**NOTE:** If you manually generate an ssl certificate, the certificate password AND the keystore password must match! 3. Execute `gitblit.cmd` or `java -jar gitblit.jar` from a command-line 4. Wait a minute or two while all dependencies are downloaded and your self-signed certificate is generated. 5. Open your browser to or depending on your chosen configuration. @@ -35,9 +35,9 @@ All repository settings are stored within the repository `.git/config` file unde Repository names must be unique and are CASE-SENSITIVE ON CASE-SENSITIVE FILESYSTEMS. The name must be composed of letters, digits, or `/ _ - .`
Whitespace is illegal. -Repositories can be grouped by folders. e.g. *libraries/mycoollib.git* and *libraries/myotherlib.git* +Repositories can be grouped within subfolders. e.g. *libraries/mycoollib.git* and *libraries/myotherlib.git* -Repository names will automatically have *.git* appended to the name at creation time, if not already specified. +All created repositories are *bare* and will automatically have *.git* appended to the name at creation time, if not already specified. #### Repository Owner The *Repository Owner* has the special permission of being able to edit a repository through the web UI. The Repository Owner is not permitted to rename the repository, delete the repository, or reassign ownership to another user. @@ -61,7 +61,7 @@ There is only one actual *role* in Gitblit and that is *#admin* which grants adm ### Creating your own Self-Signed Certificate Review the contents of the `makekeystore.cmd` or `makekeystore_jdk.cmd` script and execute it.
-**NOTE:** The certificate password AND the keystore password must match! +**NOTE:** If you manually generate an ssl certificate, the certificate password AND the keystore password must match! ### Running as a Service Review the contents of the `installService.cmd` or `installService64.cmd`, as appropriate for your installed Java Virtual Machine.
diff --git a/docs/01_faq.mkd b/docs/01_faq.mkd index 5068e79a..a80e4e29 100644 --- a/docs/01_faq.mkd +++ b/docs/01_faq.mkd @@ -27,10 +27,30 @@ It's a phonetic play on [bitblt][bitblt] which is an image processing operation ### Why use Gitblit? It's a small tool that allows you to easily manage shared repositories and doesn't require alot of setup or git kung-foo. +### Who is the target user for Gitblit? +Small workgroups that require centralized repositories. + +Gitblit is not meant to be a social coding resource like [Github](http://github.com) or [Bitbucket](http://bitbucket.com) with 100s or 1000s of users. Gitblit is designed to fulfill the same function as your centralized Subversion or CVS server. + +### Why does Gitblit exist? +As a Java developer I prefer that as much of my tooling as possible is Java.
+Originally, I was going to use [Mercurial](http://mercurial.selenic.com) but... + +- MercurialEclipse [shells to Python and captures System.in](http://mercurial.808500.n3.nabble.com/Hg4J-Mercurial-pure-Java-library-tp2693090p2694555.html)
+Parsing command-line output is fragile and suboptimal.
Unfortunately this is necessary because Mercurial is an application, not a library. +- Mercurial seems to [frown](http://mercurial.808500.n3.nabble.com/Hg4J-Mercurial-pure-Java-library-tp2693090p2695051.html) on the fledgling [Hg4j][hg4j] (pure Java Mercurial) project. +- Mercurial HTTP/HTTPS needs to run as CGI through Apache/IIS/etc, as mod_python through Apache, or served with a built-in http server.
+This requires setup and maintenance of multiple, mixed 3rd party components. + +Gitblit eliminates all that complication with its 100% Java stack and simple single configuration file. + ### Do I need real Git? No. Gitblit is based on [JGit][jgit] which is a pure Java implementation of the [Git version control system][git].
Everything you need for Gitblit is either in the zip distribution file or automatically downloaded on execution. +### Can I run Gitblit in conjunction with my existing Git tooling? +Yes. You can configure Gitblit to only be a repository viewer. + ### Do I need a JDK or can I use a JRE? Gitblit will run just fine with a JRE. Gitblit can optionally use `keytool` from the JDK to generate self-signed certificates, but normally Gitblit uses [BouncyCastle][bouncycastle] for that need. @@ -73,4 +93,5 @@ Currently blame is not implemented. Those links are placeholders to remind me w [jgit]: http://eclipse.org/jgit "Eclipse JGit Site" [git]: http://git-scm.com "Official Git Site" [mina]: http://mina.apache.org "Apache Mina" -[bouncycastle]: http://bouncycastle.org "The Legion of the Bouncy Castle" \ No newline at end of file +[bouncycastle]: http://bouncycastle.org "The Legion of the Bouncy Castle" +[hg4j]: http://code.google.com/p/hg4j/ "hg4j" \ No newline at end of file diff --git a/docs/architecture.odg b/docs/architecture.odg index c2fc25c0cf76b7ac05707e9365d2ab10856d9429..fd35f655ffda42121ca237ef5d2834744c6d6344 100644 GIT binary patch delta 7777 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 P2WBn9fx9O0hxz{iD?HKi delta 7751 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 G;r{`>cE%(C diff --git a/docs/architecture.png b/docs/architecture.png index 0dd7ddc21ec60c603ada8a2a97a420f428af2367..c61881c32d36e14e085e03ff40b73a5a742a4772 100644 GIT binary patch literal 71104 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%0Arobum?-8rGI5lQ8znu_2Ys*+Qe{{VfYfu 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 diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index 595a5ee1..dcf5a6b2 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -226,7 +226,7 @@ public class GitBlit implements ServletContextListener { Repository r = null; if (isCreate) { // ensure created repository name ends with .git - if (!repository.name.endsWith(org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) { + if (!repository.name.toLowerCase().endsWith(org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) { repository.name += org.eclipse.jgit.lib.Constants.DOT_GIT_EXT; } if (new File(repositoriesFolder, repository.name).exists()) { @@ -236,7 +236,7 @@ public class GitBlit implements ServletContextListener { } // create repository logger.info("create repository " + repository.name); - r = JGitUtils.createRepository(repositoriesFolder, repository.name, true); + r = JGitUtils.createRepository(repositoriesFolder, repository.name); } else { // rename repository if (!repositoryName.equalsIgnoreCase(repository.name)) { diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index 6e02b9c4..f6d7108b 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -22,6 +22,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -32,6 +33,8 @@ import java.util.Map.Entry; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import org.eclipse.jgit.api.CloneCommand; +import org.eclipse.jgit.api.FetchCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffEntry.ChangeType; @@ -57,6 +60,9 @@ import org.eclipse.jgit.revwalk.RevSort; import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.filter.RevFilter; +import org.eclipse.jgit.storage.file.FileRepository; +import org.eclipse.jgit.transport.FetchResult; +import org.eclipse.jgit.transport.RefSpec; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.filter.AndTreeFilter; import org.eclipse.jgit.treewalk.filter.OrTreeFilter; @@ -90,8 +96,54 @@ public class JGitUtils { return r.toString().trim(); } - public static Repository createRepository(File repositoriesFolder, String name, boolean bare) { - Git git = Git.init().setDirectory(new File(repositoriesFolder, name)).setBare(bare).call(); + public static FetchResult cloneRepository(File repositoriesFolder, String name, String fromUrl) throws Exception { + FetchResult result = null; + if (!name.toLowerCase().endsWith(Constants.DOT_GIT_EXT)) { + name += Constants.DOT_GIT_EXT; + } + File folder = new File(repositoriesFolder, name); + if (folder.exists()) { + File gitDir = FileKey.resolve(new File(repositoriesFolder, name), FS.DETECTED); + FileRepository repository = new FileRepository(gitDir); + result = fetchRepository(repository); + repository.close(); + } else { + CloneCommand clone = new CloneCommand(); + clone.setBare(true); + clone.setCloneAllBranches(true); + clone.setURI(fromUrl); + clone.setDirectory(folder); + clone.call(); + // Now we have to fetch because CloneCommand doesn't fetch + // refs/notes nor does it allow manual RefSpec. + File gitDir = FileKey.resolve(new File(repositoriesFolder, name), FS.DETECTED); + FileRepository repository = new FileRepository(gitDir); + result = fetchRepository(repository); + repository.close(); + } + return result; + } + + public static FetchResult fetchRepository(Repository repository, RefSpec... refSpecs) + throws Exception { + Git git = new Git(repository); + FetchCommand fetch = git.fetch(); + List specs = new ArrayList(); + if (refSpecs == null || refSpecs.length == 0) { + specs.add(new RefSpec("+refs/heads/*:refs/remotes/origin/*")); + specs.add(new RefSpec("+refs/tags/*:refs/tags/*")); + specs.add(new RefSpec("+refs/notes/*:refs/notes/*")); + } else { + specs.addAll(Arrays.asList(refSpecs)); + } + fetch.setRefSpecs(specs); + FetchResult result = fetch.call(); + repository.close(); + return result; + } + + public static Repository createRepository(File repositoriesFolder, String name) { + Git git = Git.init().setDirectory(new File(repositoriesFolder, name)).setBare(true).call(); return git.getRepository(); } @@ -219,7 +271,7 @@ public class JGitUtils { refs.put(objectid, new ArrayList()); } refs.get(objectid).add(ref); - } + } return refs; } diff --git a/tests/com/gitblit/tests/GitBlitSuite.java b/tests/com/gitblit/tests/GitBlitSuite.java index fe201b8b..e13e1bbf 100644 --- a/tests/com/gitblit/tests/GitBlitSuite.java +++ b/tests/com/gitblit/tests/GitBlitSuite.java @@ -16,25 +16,20 @@ package com.gitblit.tests; import java.io.File; -import java.util.ArrayList; -import java.util.List; import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestSuite; -import org.eclipse.jgit.api.CloneCommand; -import org.eclipse.jgit.api.FetchCommand; -import org.eclipse.jgit.api.Git; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.storage.file.FileRepository; -import org.eclipse.jgit.transport.RefSpec; import com.gitblit.FileSettings; import com.gitblit.GitBlit; import com.gitblit.GitBlitException; import com.gitblit.JettyLoginService; import com.gitblit.models.RepositoryModel; +import com.gitblit.utils.JGitUtils; public class GitBlitSuite extends TestSetup { public static final File REPOSITORIES = new File("git"); @@ -66,11 +61,11 @@ public class GitBlitSuite extends TestSetup { } public static Repository getJGitRepository() throws Exception { - return new FileRepository(new File(REPOSITORIES, "nested/jgit.git")); + return new FileRepository(new File(REPOSITORIES, "test/jgit.git")); } public static Repository getBluezGnomeRepository() throws Exception { - return new FileRepository(new File(REPOSITORIES, "nested/bluez-gnome.git")); + return new FileRepository(new File(REPOSITORIES, "test/bluez-gnome.git")); } @Override @@ -82,51 +77,24 @@ public class GitBlitSuite extends TestSetup { GitBlit.self().setLoginService(loginService); if (REPOSITORIES.exists() || REPOSITORIES.mkdirs()) { - cloneOrFetch("helloworld.git", "https://github.com/git/hello-world.git", true); - cloneOrFetch("ticgit.git", "https://github.com/jeffWelling/ticgit.git", true); - cloneOrFetch("nested/bluez-gnome.git", "https://git.kernel.org/pub/scm/bluetooth/bluez-gnome.git", true); - cloneOrFetch("nested/jgit.git", "https://github.com/eclipse/jgit.git", true); - cloneOrFetch("nested/helloworld.git", "https://github.com/git/hello-world.git", true); + cloneOrFetch("helloworld.git", "https://github.com/git/hello-world.git"); + cloneOrFetch("ticgit.git", "https://github.com/jeffWelling/ticgit.git"); + cloneOrFetch("test/bluez-gnome.git", + "https://git.kernel.org/pub/scm/bluetooth/bluez-gnome.git"); + cloneOrFetch("test/jgit.git", "https://github.com/eclipse/jgit.git"); + cloneOrFetch("test/helloworld.git", "https://github.com/git/hello-world.git"); enableTickets("ticgit.git"); enableDocs("ticgit.git"); showRemoteBranches("ticgit.git"); - showRemoteBranches("nested/jgit.git"); + showRemoteBranches("test/jgit.git"); } } - private void cloneOrFetch(String toFolder, String fromUrl, boolean bare) throws Exception { - File folder = new File(REPOSITORIES, toFolder + (bare ? "" : "/.git")); - if (folder.exists()) { - System.out.print("Updating " + (bare ? "bare " : " ") + toFolder + "... "); - fetch(toFolder); - System.out.println("done."); - } else { - System.out.println("Cloning " + (bare ? "bare " : " ") + toFolder + "... "); - CloneCommand clone = new CloneCommand(); - clone.setBare(bare); - clone.setCloneAllBranches(true); - clone.setURI(fromUrl); - clone.setDirectory(folder); - clone.call(); - // Now we have to fetch because CloneCommand doesn't fetch - // Notes nor does it allow manual RefSpec. - fetch(toFolder); - System.out.println("done."); - } - } - - private void fetch(String toFolder) throws Exception { - FileRepository repository = new FileRepository(new File(REPOSITORIES, toFolder)); - Git git = new Git(repository); - FetchCommand fetch = git.fetch(); - List specs = new ArrayList(); - specs.add(new RefSpec("+refs/heads/*:refs/remotes/origin/*")); - specs.add(new RefSpec("+refs/tags/*:refs/tags/*")); - specs.add(new RefSpec("+refs/notes/*:refs/notes/*")); - fetch.setRefSpecs(specs); - fetch.call(); - repository.close(); + private void cloneOrFetch(String name, String fromUrl) throws Exception { + System.out.print("Fetching " + name + "... "); + JGitUtils.cloneRepository(REPOSITORIES, name, fromUrl); + System.out.println("done."); } private void enableTickets(String repositoryName) { @@ -138,7 +106,7 @@ public class GitBlitSuite extends TestSetup { g.printStackTrace(); } } - + private void enableDocs(String repositoryName) { try { RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName); @@ -148,7 +116,7 @@ public class GitBlitSuite extends TestSetup { g.printStackTrace(); } } - + private void showRemoteBranches(String repositoryName) { try { RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName); diff --git a/tests/com/gitblit/tests/JGitUtilsTest.java b/tests/com/gitblit/tests/JGitUtilsTest.java index 6646bf80..277166cf 100644 --- a/tests/com/gitblit/tests/JGitUtilsTest.java +++ b/tests/com/gitblit/tests/JGitUtilsTest.java @@ -30,7 +30,9 @@ import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.lib.RepositoryCache.FileKey; import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.util.FS; import com.gitblit.GitBlit; import com.gitblit.Keys; @@ -94,16 +96,10 @@ public class JGitUtilsTest extends TestCase { public void testCreateRepository() throws Exception { String[] repositories = { "NewTestRepository.git", "NewTestRepository" }; - for (String repositoryName : repositories) { - boolean isBare = repositoryName.endsWith(".git"); + for (String repositoryName : repositories) { Repository repository = JGitUtils.createRepository(GitBlitSuite.REPOSITORIES, - repositoryName, isBare); - File folder; - if (isBare) { - folder = new File(GitBlitSuite.REPOSITORIES, repositoryName); - } else { - folder = new File(GitBlitSuite.REPOSITORIES, repositoryName + "/.git"); - } + repositoryName); + File folder = FileKey.resolve(new File(GitBlitSuite.REPOSITORIES, repositoryName), FS.DETECTED); assertTrue(repository != null); assertFalse(JGitUtils.hasCommits(repository)); assertTrue(JGitUtils.getFirstCommit(repository, null) == null); @@ -138,7 +134,7 @@ public class JGitUtilsTest extends TestCase { } public void testBranches() throws Exception { - Repository repository = GitBlitSuite.getTicgitRepository(); + Repository repository = GitBlitSuite.getJGitRepository(); for (RefModel model : JGitUtils.getLocalBranches(repository, true, -1)) { assertTrue(model.getName().startsWith(Constants.R_HEADS)); assertTrue(model.equals(model)); @@ -155,14 +151,14 @@ public class JGitUtilsTest extends TestCase { + model.getName().hashCode()); assertTrue(model.getShortMessage().equals(model.getShortMessage())); } - assertTrue(JGitUtils.getRemoteBranches(repository, true, 10).size() == 10); + assertTrue(JGitUtils.getRemoteBranches(repository, true, 8).size() == 8); repository.close(); } public void testTags() throws Exception { - Repository repository = GitBlitSuite.getTicgitRepository(); + Repository repository = GitBlitSuite.getJGitRepository(); for (RefModel model : JGitUtils.getTags(repository, true, -1)) { - if (model.getObjectId().getName().equals("283035e4848054ff1803cb0e690270787dc92399")) { + if (model.getObjectId().getName().equals("d28091fb2977077471138fe97da1440e0e8ae0da")) { assertTrue("Not an annotated tag!", model.isAnnotatedTag()); } assertTrue(model.getName().startsWith(Constants.R_TAGS)); -- 2.39.5