Commits

Sebastian Sdorra  committed 1a0f9b8

added basic git import

  • Participants
  • Parent commits 2bdfa00
  • Branches issue-59

Comments (0)

Files changed (3)

File scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/rest/resources/GitImportResource.java

+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.api.rest.resources;
+
+//~--- non-JDK imports --------------------------------------------------------
+
+import com.google.inject.Inject;
+
+import sonia.scm.repository.GitRepositoryHandler;
+import sonia.scm.repository.RepositoryException;
+import sonia.scm.repository.RepositoryManager;
+
+//~--- JDK imports ------------------------------------------------------------
+
+import java.io.IOException;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ */
+@Path("import/repositories/git")
+public class GitImportResource
+{
+
+  /**
+   * Constructs ...
+   *
+   *
+   * @param repositoryManager
+   * @param handler
+   */
+  @Inject
+  public GitImportResource(RepositoryManager repositoryManager,
+                           GitRepositoryHandler handler)
+  {
+    this.repositoryManager = repositoryManager;
+    this.handler = handler;
+  }
+
+  //~--- methods --------------------------------------------------------------
+
+  /**
+   * Method description
+   *
+   *
+   * @throws IOException
+   * @throws RepositoryException
+   */
+  @GET
+  @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+  public void importRepositories() throws IOException, RepositoryException
+  {
+    handler.getImportHandler().importRepositories(repositoryManager);
+  }
+
+  //~--- fields ---------------------------------------------------------------
+
+  /** Field description */
+  private GitRepositoryHandler handler;
+
+  /** Field description */
+  private RepositoryManager repositoryManager;
+}

File scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitImportHandler.java

+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.repository;
+
+//~--- non-JDK imports --------------------------------------------------------
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+//~--- JDK imports ------------------------------------------------------------
+
+import java.io.IOException;
+
+import java.util.List;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ */
+public class GitImportHandler implements ImportHandler
+{
+
+  /** Field description */
+  public static final String GIT_DIR = ".git";
+
+  /** Field description */
+  public static final String GIT_DIR_REFS = "refs";
+
+  /**
+   * the logger for GitImportHandler
+   */
+  private static final Logger logger =
+    LoggerFactory.getLogger(GitImportHandler.class);
+
+  //~--- constructors ---------------------------------------------------------
+
+  /**
+   * Constructs ...
+   *
+   *
+   * @param handler
+   */
+  public GitImportHandler(GitRepositoryHandler handler)
+  {
+    this.handler = handler;
+  }
+
+  //~--- methods --------------------------------------------------------------
+
+  /**
+   * Method description
+   *
+   *
+   * @param manager
+   *
+   * @throws IOException
+   * @throws RepositoryException
+   */
+  @Override
+  public void importRepositories(RepositoryManager manager)
+          throws IOException, RepositoryException
+  {
+    if (logger.isTraceEnabled())
+    {
+      logger.trace("search for git repositories for import");
+    }
+
+    List<String> repositoryNames = RepositoryUtil.getRepositoryNames(handler,
+                                     GIT_DIR, GIT_DIR_REFS);
+
+    for (String repositoryName : repositoryNames)
+    {
+      if (logger.isTraceEnabled())
+      {
+        logger.trace("check git repository {} for import", repositoryName);
+      }
+
+      Repository repository = manager.get(GitRepositoryHandler.TYPE_NAME,
+                                repositoryName);
+
+      if (repository == null)
+      {
+        importRepository(manager, repositoryName);
+      }
+      else if (logger.isDebugEnabled())
+      {
+        logger.debug("repository {} is allready managed", repositoryName);
+      }
+    }
+  }
+
+  /**
+   * Method description
+   *
+   *
+   * @param manager
+   * @param repositoryName
+   *
+   * @throws IOException
+   * @throws RepositoryException
+   */
+  private void importRepository(RepositoryManager manager,
+                                String repositoryName)
+          throws RepositoryException, IOException
+  {
+    if (logger.isInfoEnabled())
+    {
+      logger.info("try to import git repository {}", repositoryName);
+    }
+
+    Repository repository = new Repository();
+
+    repository.setName(repositoryName);
+    repository.setType(GitRepositoryHandler.TYPE_NAME);
+    repository.setPublicReadable(false);
+    manager.importRepository(repository);
+  }
+
+  //~--- fields ---------------------------------------------------------------
+
+  /** Field description */
+  private GitRepositoryHandler handler;
+}

File scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java

 import org.eclipse.jgit.storage.file.FileRepository;
 import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
 
+import sonia.scm.NotSupportedFeatuerException;
 import sonia.scm.Type;
 import sonia.scm.io.FileSystem;
 import sonia.scm.plugin.ext.Extension;
    * Method description
    *
    *
+   * @return
+   */
+  @Override
+  public ImportHandler getImportHandler()
+  {
+    return new GitImportHandler(this);
+  }
+
+  /**
+   * Method description
+   *
+   *
    * @param repository
    *
    * @return