mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-10 15:35:49 +01:00
merge with branch issue-59
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
/**
|
||||
* 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 sonia.scm.io.INIConfiguration;
|
||||
import sonia.scm.io.INIConfigurationReader;
|
||||
import sonia.scm.io.INIConfigurationWriter;
|
||||
import sonia.scm.io.INISection;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
public class HgImportHandler extends AbstactImportHandler
|
||||
{
|
||||
|
||||
/** Field description */
|
||||
public static final String HG_DIR = ".hg";
|
||||
|
||||
//~--- constructors ---------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
*
|
||||
* @param handler
|
||||
*/
|
||||
public HgImportHandler(HgRepositoryHandler handler)
|
||||
{
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param repositoryDirectory
|
||||
* @param repositoryName
|
||||
*
|
||||
* @return
|
||||
*
|
||||
* @throws IOException
|
||||
* @throws RepositoryException
|
||||
*/
|
||||
@Override
|
||||
protected Repository createRepository(File repositoryDirectory,
|
||||
String repositoryName)
|
||||
throws IOException, RepositoryException
|
||||
{
|
||||
Repository repository = super.createRepository(repositoryDirectory,
|
||||
repositoryName);
|
||||
File hgrc = new File(repositoryDirectory, HgRepositoryHandler.PATH_HGRC);
|
||||
|
||||
if (hgrc.exists())
|
||||
{
|
||||
INIConfigurationReader reader = new INIConfigurationReader();
|
||||
INIConfiguration c = reader.read(hgrc);
|
||||
INISection web = c.getSection("web");
|
||||
|
||||
if (web == null)
|
||||
{
|
||||
handler.appendWebSection(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
repository.setDescription(web.getParameter("description"));
|
||||
repository.setContact(web.getParameter("contact"));
|
||||
handler.setWebParameter(web);
|
||||
}
|
||||
|
||||
INIConfigurationWriter writer = new INIConfigurationWriter();
|
||||
|
||||
writer.write(c, hgrc);
|
||||
}
|
||||
else
|
||||
{
|
||||
handler.postCreate(repository, repositoryDirectory);
|
||||
}
|
||||
|
||||
return repository;
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
protected String[] getDirectoryNames()
|
||||
{
|
||||
return new String[] { HG_DIR };
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
protected AbstractRepositoryHandler<?> getRepositoryHandler()
|
||||
{
|
||||
return handler;
|
||||
}
|
||||
|
||||
//~--- fields ---------------------------------------------------------------
|
||||
|
||||
/** Field description */
|
||||
private HgRepositoryHandler handler;
|
||||
}
|
||||
@@ -293,6 +293,18 @@ public class HgRepositoryHandler
|
||||
return diffViewer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ImportHandler getImportHandler()
|
||||
{
|
||||
return new HgImportHandler(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
@@ -320,6 +332,72 @@ public class HgRepositoryHandler
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param hgrc
|
||||
*/
|
||||
void appendHookSection(INIConfiguration hgrc)
|
||||
{
|
||||
INISection hooksSection = new INISection("hooks");
|
||||
|
||||
setHookParameter(hooksSection);
|
||||
hgrc.addSection(hooksSection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param hgrc
|
||||
*/
|
||||
void appendWebSection(INIConfiguration hgrc)
|
||||
{
|
||||
INISection webSection = new INISection("web");
|
||||
|
||||
setWebParameter(webSection);
|
||||
hgrc.addSection(webSection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param c
|
||||
* @param repositoryName
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
boolean registerMissingHook(INIConfiguration c, String repositoryName)
|
||||
{
|
||||
INISection hooks = c.getSection("hooks");
|
||||
|
||||
if (hooks == null)
|
||||
{
|
||||
hooks = new INISection("hooks");
|
||||
c.addSection(hooks);
|
||||
}
|
||||
|
||||
boolean write = false;
|
||||
|
||||
if (appendHook(repositoryName, hooks, "changegroup.scm"))
|
||||
{
|
||||
write = true;
|
||||
}
|
||||
|
||||
if (appendHook(repositoryName, hooks, "pretxnchangegroup.scm"))
|
||||
{
|
||||
write = true;
|
||||
}
|
||||
|
||||
return write;
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
@@ -341,6 +419,34 @@ public class HgRepositoryHandler
|
||||
hgContextProvider.get(), repositoryDirectory);
|
||||
}
|
||||
|
||||
//~--- set methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param hooksSection
|
||||
*/
|
||||
void setHookParameter(INISection hooksSection)
|
||||
{
|
||||
hooksSection.setParameter("changegroup.scm", "python:scmhooks.callback");
|
||||
hooksSection.setParameter("pretxnchangegroup.scm",
|
||||
"python:scmhooks.callback");
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param webSection
|
||||
*/
|
||||
void setWebParameter(INISection webSection)
|
||||
{
|
||||
webSection.setParameter("push_ssl", "false");
|
||||
webSection.setParameter("allow_read", "*");
|
||||
webSection.setParameter("allow_push", "*");
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
/**
|
||||
@@ -376,20 +482,11 @@ public class HgRepositoryHandler
|
||||
{
|
||||
File hgrcFile = new File(directory, PATH_HGRC);
|
||||
INIConfiguration hgrc = new INIConfiguration();
|
||||
INISection webSection = new INISection("web");
|
||||
|
||||
webSection.setParameter("push_ssl", "false");
|
||||
webSection.setParameter("allow_read", "*");
|
||||
webSection.setParameter("allow_push", "*");
|
||||
hgrc.addSection(webSection);
|
||||
appendWebSection(hgrc);
|
||||
|
||||
// register hooks
|
||||
INISection hooksSection = new INISection("hooks");
|
||||
|
||||
hooksSection.setParameter("changegroup.scm", "python:scmhooks.callback");
|
||||
hooksSection.setParameter("pretxnchangegroup.scm",
|
||||
"python:scmhooks.callback");
|
||||
hgrc.addSection(hooksSection);
|
||||
appendHookSection(hgrc);
|
||||
|
||||
INIConfigurationWriter writer = new INIConfigurationWriter();
|
||||
|
||||
@@ -483,28 +580,9 @@ public class HgRepositoryHandler
|
||||
{
|
||||
INIConfigurationReader reader = new INIConfigurationReader();
|
||||
INIConfiguration c = reader.read(hgrc);
|
||||
INISection hooks = c.getSection("hooks");
|
||||
|
||||
if (hooks == null)
|
||||
{
|
||||
hooks = new INISection("hooks");
|
||||
c.addSection(hooks);
|
||||
}
|
||||
|
||||
String repositoryName = repositoryDir.getName();
|
||||
boolean write = false;
|
||||
|
||||
if (appendHook(repositoryName, hooks, "changegroup.scm"))
|
||||
{
|
||||
write = true;
|
||||
}
|
||||
|
||||
if (appendHook(repositoryName, hooks, "pretxnchangegroup.scm"))
|
||||
{
|
||||
write = true;
|
||||
}
|
||||
|
||||
if (write)
|
||||
if (registerMissingHook(c, repositoryName))
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user