From 3f1ef022509c7f1133a4cb8037eb02c18346adee Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 20 Jan 2011 18:55:14 +0100 Subject: [PATCH 01/25] remove scm-core dependency from scm-server-api and improve jetty configuration --- pom.xml | 6 - scm-core/pom.xml | 6 + scm-server-api/pom.xml | 10 - .../main/java/sonia/scm/server/Server.java | 6 +- .../sonia/scm/server/ServerApplication.java | 154 +++++---------- .../java/sonia/scm/server/ServerConfig.java | 176 ------------------ .../sonia/scm/server/jetty/JettyServer.java | 55 +++--- scm-server/pom.xml | 6 - .../src/main/assembly/scm-server-jsw.xml | 5 + 9 files changed, 93 insertions(+), 331 deletions(-) delete mode 100644 scm-server-api/src/main/java/sonia/scm/server/ServerConfig.java diff --git a/pom.xml b/pom.xml index a610b1a090..38d110f281 100644 --- a/pom.xml +++ b/pom.xml @@ -66,12 +66,6 @@ - - slf4j-api - org.slf4j - ${slf4j.version} - - junit junit diff --git a/scm-core/pom.xml b/scm-core/pom.xml index d87329b5ef..402fe938e5 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -24,6 +24,12 @@ provided + + slf4j-api + org.slf4j + ${slf4j.version} + + com.google.inject guice diff --git a/scm-server-api/pom.xml b/scm-server-api/pom.xml index 17b6b7a5c0..11a997ae89 100644 --- a/scm-server-api/pom.xml +++ b/scm-server-api/pom.xml @@ -15,14 +15,4 @@ 1.0-M7-SNAPSHOT scm-server-api - - - - sonia.scm - scm-core - 1.0-M7-SNAPSHOT - - - - diff --git a/scm-server-api/src/main/java/sonia/scm/server/Server.java b/scm-server-api/src/main/java/sonia/scm/server/Server.java index e2bc900368..eae0a657b9 100644 --- a/scm-server-api/src/main/java/sonia/scm/server/Server.java +++ b/scm-server-api/src/main/java/sonia/scm/server/Server.java @@ -29,6 +29,8 @@ * */ + + package sonia.scm.server; //~--- JDK imports ------------------------------------------------------------ @@ -63,14 +65,12 @@ public interface Server * Method description * * - * @param config * @param webapp * * @throws IOException * @throws ServerException */ - public void start(ServerConfig config, File webapp) - throws ServerException, IOException; + public void start(File webapp) throws ServerException, IOException; /** * Method description diff --git a/scm-server-api/src/main/java/sonia/scm/server/ServerApplication.java b/scm-server-api/src/main/java/sonia/scm/server/ServerApplication.java index fb7a5e3ebd..0ef85f19f1 100644 --- a/scm-server-api/src/main/java/sonia/scm/server/ServerApplication.java +++ b/scm-server-api/src/main/java/sonia/scm/server/ServerApplication.java @@ -33,23 +33,15 @@ package sonia.scm.server; -//~--- non-JDK imports -------------------------------------------------------- - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import sonia.scm.cli.CliException; -import sonia.scm.cli.CliParser; -import sonia.scm.cli.DefaultCliHelpBuilder; -import sonia.scm.util.IOUtil; -import sonia.scm.util.ServiceUtil; - //~--- JDK imports ------------------------------------------------------------ import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.NoSuchElementException; +import java.util.ServiceLoader; + import javax.xml.bind.JAXB; /** @@ -74,48 +66,6 @@ public class ServerApplication /** Field description */ public static final String SERVERCONFIG = "/config.xml"; - /** Field description */ - private static final Logger logger = - LoggerFactory.getLogger(ServerApplication.class.getName()); - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - private static ServerConfig getServerConfig() - { - ServerConfig config = null; - InputStream input = - ServerApplication.class.getResourceAsStream(SERVERCONFIG); - - if (input != null) - { - try - { - config = JAXB.unmarshal(input, ServerConfig.class); - } - catch (Exception ex) - { - logger.error(ex.getMessage(), ex); - } - finally - { - IOUtil.close(input); - } - } - - if (config == null) - { - config = new ServerConfig(); - } - - return config; - } - //~--- methods -------------------------------------------------------------- /** @@ -124,12 +74,10 @@ public class ServerApplication * * @param args * - * @throws CliException * @throws IOException * @throws ServerException */ - public static void main(String[] args) - throws CliException, ServerException, IOException + public static void main(String[] args) throws ServerException, IOException { InputStream input = ServerApplication.class.getResourceAsStream(APPINFO); @@ -141,76 +89,68 @@ public class ServerApplication ApplicationInformation appInfo = JAXB.unmarshal(input, ApplicationInformation.class); - ServerConfig config = getServerConfig(); - CliParser parser = new CliParser(); + final Server server = getServer(); - parser.parse(config, args); - - if (config.getShowHelp()) + if (server == null) { - printHelp(appInfo, parser, config); + System.err.println("could not find an server implementation"); + System.exit(RETURNCODE_MISSING_SERVER_IMPLEMENTATION); } - else + + File webapp = new File("webapp", appInfo.getAppName()); + + server.start(webapp); + Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { - final Server server = ServiceUtil.getService(Server.class); - - if (server == null) + @Override + public void run() { - System.err.println("could not find an server implementation"); - System.exit(RETURNCODE_MISSING_SERVER_IMPLEMENTATION); - } - - File webapp = new File("webapp", appInfo.getAppName()); - - server.start(config, webapp); - Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() - { - @Override - public void run() + if (server.isRunning()) { - if (server.isRunning()) + try { - try - { - server.stop(); - } - catch (ServerException ex) - { - logger.error(ex.getMessage(), ex); - } - catch (IOException ex) - { - logger.error(ex.getMessage(), ex); - } + server.stop(); + } + catch (ServerException ex) + { + ex.printStackTrace(System.err); + } + catch (IOException ex) + { + ex.printStackTrace(System.err); } } - })); - } + } + })); } + //~--- get methods ---------------------------------------------------------- + /** * Method description * * - * - * @param appInfo - * @param parser - * @param config + * @return */ - private static void printHelp(ApplicationInformation appInfo, - CliParser parser, ServerConfig config) + private static Server getServer() { - String s = System.getProperty("line.separator"); - StringBuilder prefix = new StringBuilder(appInfo.getName()); + Server server = null; - prefix.append(" ").append(appInfo.getVersion()); - prefix.append(s).append("usage: "); - prefix.append(s); + try + { + ServiceLoader loader = ServiceLoader.load(Server.class); - DefaultCliHelpBuilder helpBuilder = - new DefaultCliHelpBuilder(prefix.toString(), null); + if (loader != null) + { + server = loader.iterator().next(); + } + } + catch (NoSuchElementException ex) + { - System.err.println(parser.createHelp(helpBuilder, config)); - System.exit(RETURNCODE_CLI_ERROR); + // no server available + } + + return server; } } diff --git a/scm-server-api/src/main/java/sonia/scm/server/ServerConfig.java b/scm-server-api/src/main/java/sonia/scm/server/ServerConfig.java deleted file mode 100644 index 027bdcea0c..0000000000 --- a/scm-server-api/src/main/java/sonia/scm/server/ServerConfig.java +++ /dev/null @@ -1,176 +0,0 @@ -/** - * 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.server; - -//~--- non-JDK imports -------------------------------------------------------- - -import sonia.scm.cli.Argument; - -/** - * - * @author Sebastian Sdorra - */ -public class ServerConfig -{ - - /** - * Constructs ... - * - */ - public ServerConfig() {} - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - public String getContextPath() - { - return contextPath; - } - - /** - * Method description - * - * - * @return - */ - public Integer getPort() - { - return port; - } - - /** - * Method description - * - * - * @return - */ - public String getResourcePath() - { - return resourcePath; - } - - /** - * Method description - * - * - * @return - */ - public Boolean getShowHelp() - { - return showHelp; - } - - //~--- set methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param contextPath - */ - public void setContextPath(String contextPath) - { - this.contextPath = contextPath; - } - - /** - * Method description - * - * - * @param port - */ - public void setPort(Integer port) - { - this.port = port; - } - - /** - * Method description - * - * - * @param resourcePath - */ - public void setResourcePath(String resourcePath) - { - this.resourcePath = resourcePath; - } - - /** - * Method description - * - * - * @param showHelp - */ - public void setShowHelp(Boolean showHelp) - { - this.showHelp = showHelp; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - @Argument( - value = "c", - longName = "context-path", - description = "The Context-Path of the Jab-WebApp" - ) - private String contextPath = "/"; - - /** Field description */ - @Argument( - value = "p", - longName = "port", - description = "The port for the listener" - ) - private Integer port = Integer.valueOf(8080); - - /** Field description */ - @Argument( - value = "r", - longName = "resource-path", - description = "Path to the server resource directory" - ) - private String resourcePath; - - /** Field description */ - @Argument( - value = "h", - longName = "help", - description = "Shows this help" - ) - private Boolean showHelp = Boolean.FALSE; -} diff --git a/scm-server-jetty/src/main/java/sonia/scm/server/jetty/JettyServer.java b/scm-server-jetty/src/main/java/sonia/scm/server/jetty/JettyServer.java index 0a3b0783c0..d339118604 100644 --- a/scm-server-jetty/src/main/java/sonia/scm/server/jetty/JettyServer.java +++ b/scm-server-jetty/src/main/java/sonia/scm/server/jetty/JettyServer.java @@ -29,17 +29,17 @@ * */ + + package sonia.scm.server.jetty; //~--- non-JDK imports -------------------------------------------------------- -import org.eclipse.jetty.server.Connector; -import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.webapp.WebAppContext; +import org.eclipse.jetty.xml.XmlConfiguration; import sonia.scm.server.Server; import sonia.scm.server.ServerAllreadyRunningException; -import sonia.scm.server.ServerConfig; import sonia.scm.server.ServerException; import sonia.scm.server.ServerListener; @@ -48,6 +48,8 @@ import sonia.scm.server.ServerListener; import java.io.File; import java.io.IOException; +import java.net.URL; + import java.util.HashSet; import java.util.Set; @@ -58,6 +60,11 @@ import java.util.Set; public class JettyServer implements Server { + /** Field description */ + public static final String CONFIGURATION = "/server-config.xml"; + + //~--- methods -------------------------------------------------------------- + /** * Method description * @@ -86,44 +93,46 @@ public class JettyServer implements Server * Method description * * - * @param config * @param webapp * * @throws IOException * @throws ServerException */ @Override - public void start(ServerConfig config, File webapp) - throws ServerException, IOException + public void start(File webapp) throws ServerException, IOException { if (isRunning()) { throw new ServerAllreadyRunningException(); } - server = new org.eclipse.jetty.server.Server(); + URL configURL = JettyServer.class.getResource(CONFIGURATION); - Connector connector = new SelectChannelConnector(); - - for (ServerListener listener : listeners) + if (configURL == null) { - connector.addLifeCycleListener(new JettyServerListenerAdapter(listener)); + throw new ServerException("could not find server-config.xml"); } - connector.setPort(config.getPort()); - server.addConnector(connector); - - WebAppContext wac = new WebAppContext(); - - wac.setContextPath(config.getContextPath()); - wac.setWar(webapp.getAbsolutePath()); - wac.setExtractWAR(true); - server.setHandler(wac); - - // server.setStopAtShutdown(true); - try { + server = new org.eclipse.jetty.server.Server(); + + XmlConfiguration config = new XmlConfiguration(configURL); + + config.configure(server); + + for (ServerListener listener : listeners) + { + server.addLifeCycleListener(new JettyServerListenerAdapter(listener)); + } + + WebAppContext wac = new WebAppContext(); + + wac.setWar(webapp.getAbsolutePath()); + wac.setExtractWAR(true); + server.setHandler(wac); + + // server.setStopAtShutdown(true); server.start(); server.join(); } diff --git a/scm-server/pom.xml b/scm-server/pom.xml index 0a685971e0..fecd24fe0e 100644 --- a/scm-server/pom.xml +++ b/scm-server/pom.xml @@ -18,12 +18,6 @@ - - sonia.scm - scm-core - 1.0-M7-SNAPSHOT - - sonia.scm scm-server-api diff --git a/scm-server/src/main/assembly/scm-server-jsw.xml b/scm-server/src/main/assembly/scm-server-jsw.xml index 1f4699452b..97c0cf9deb 100644 --- a/scm-server/src/main/assembly/scm-server-jsw.xml +++ b/scm-server/src/main/assembly/scm-server-jsw.xml @@ -92,6 +92,11 @@ true conf + + src/main/conf/server-config.xml + true + conf + \ No newline at end of file From 6763b4bcda8301f31f68ea823b0da6a610c389dc Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 20 Jan 2011 19:58:31 +0100 Subject: [PATCH 02/25] added missing jetty server-config --- scm-server/src/main/conf/server-config.xml | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 scm-server/src/main/conf/server-config.xml diff --git a/scm-server/src/main/conf/server-config.xml b/scm-server/src/main/conf/server-config.xml new file mode 100644 index 0000000000..3d49d04963 --- /dev/null +++ b/scm-server/src/main/conf/server-config.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ab32aa22bc9a4523982e24d80f322823592c5595 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 21 Jan 2011 17:53:54 +0100 Subject: [PATCH 03/25] added license and description --- pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pom.xml b/pom.xml index 38d110f281..43aa695f6e 100644 --- a/pom.xml +++ b/pom.xml @@ -7,10 +7,22 @@ scm pom 1.0-M7-SNAPSHOT + + The easiest way to share your Git, Mercurial + and Subversion repositories over http. + scm http://bitbucket.org/sdorra/scm-manager + + + + BSD + http://www.opensource.org/licenses/bsd-license.php + + + sdorra From fc387cee2167e0e88765d66213a5ad438d796a46 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 22 Jan 2011 13:20:54 +0100 Subject: [PATCH 04/25] added public bzr url --- .../scm/repository/BzrRepositoryHandler.java | 51 +++++-- .../java/sonia/scm/web/BzrPublicFilter.java | 131 ++++++++++++++++++ .../java/sonia/scm/web/BzrServletModule.java | 9 +- .../java/sonia/scm/util/SecurityUtil.java | 28 ++++ 4 files changed, 209 insertions(+), 10 deletions(-) create mode 100644 plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrPublicFilter.java diff --git a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/repository/BzrRepositoryHandler.java b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/repository/BzrRepositoryHandler.java index efdba8e56f..2a3bca6ce3 100644 --- a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/repository/BzrRepositoryHandler.java +++ b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/repository/BzrRepositoryHandler.java @@ -36,15 +36,15 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; +import com.google.inject.Provider; import com.google.inject.Singleton; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import sonia.scm.Type; import sonia.scm.io.ExtendedCommand; import sonia.scm.plugin.ext.Extension; import sonia.scm.store.StoreFactory; +import sonia.scm.util.SecurityUtil; +import sonia.scm.web.security.WebSecurityContext; //~--- JDK imports ------------------------------------------------------------ @@ -60,6 +60,9 @@ public class BzrRepositoryHandler extends AbstractSimpleRepositoryHandler { + /** Field description */ + public static final String PUBLIC_RESOURCEPATH_BASE = "/public/bzr/"; + /** Field description */ public static final String TYPE_DISPLAYNAME = "Bazaar"; @@ -69,10 +72,6 @@ public class BzrRepositoryHandler /** Field description */ public static final Type TYPE = new Type(TYPE_NAME, TYPE_DISPLAYNAME); - /** the logger for BzrRepositoryHandler */ - private static final Logger logger = - LoggerFactory.getLogger(BzrRepositoryHandler.class); - //~--- constructors --------------------------------------------------------- /** @@ -80,11 +79,42 @@ public class BzrRepositoryHandler * * * @param storeFactory + * @param securityContextProvider */ @Inject - public BzrRepositoryHandler(StoreFactory storeFactory) + public BzrRepositoryHandler( + StoreFactory storeFactory, + Provider securityContextProvider) { super(storeFactory); + this.securityContextProvider = securityContextProvider; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param repository + * + * @return + */ + @Override + public String createResourcePath(Repository repository) + { + String resourcePath = null; + + if (SecurityUtil.isAnonymous(securityContextProvider)) + { + resourcePath = PUBLIC_RESOURCEPATH_BASE.concat(repository.getName()); + } + else + { + resourcePath = super.createResourcePath(repository); + } + + return resourcePath; } //~--- get methods ---------------------------------------------------------- @@ -145,4 +175,9 @@ public class BzrRepositoryHandler { return BzrConfig.class; } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private Provider securityContextProvider; } diff --git a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrPublicFilter.java b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrPublicFilter.java new file mode 100644 index 0000000000..0abc13c21b --- /dev/null +++ b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrPublicFilter.java @@ -0,0 +1,131 @@ +/** + * 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.web; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import sonia.scm.repository.BzrRepositoryHandler; +import sonia.scm.repository.Repository; +import sonia.scm.repository.RepositoryManager; +import sonia.scm.util.HttpUtil; +import sonia.scm.web.filter.HttpFilter; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.IOException; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * + * @author Sebastian Sdorra + */ +@Singleton +public class BzrPublicFilter extends HttpFilter +{ + + /** Field description */ + private static final Pattern REGEX_REPOSITORYNAME = + Pattern.compile("/public/bzr/([^/]+)"); + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + * + * @param repositoryManager + */ + @Inject + public BzrPublicFilter(RepositoryManager repositoryManager) + { + this.repositoryManager = repositoryManager; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param request + * @param response + * @param chain + * + * @throws IOException + * @throws ServletException + */ + @Override + protected void doFilter(HttpServletRequest request, + HttpServletResponse response, FilterChain chain) + throws IOException, ServletException + { + String requestURI = HttpUtil.getStrippedURI(request); + Matcher m = REGEX_REPOSITORYNAME.matcher(requestURI); + + if (m.find()) + { + String name = m.group(1); + Repository repository = + repositoryManager.get(BzrRepositoryHandler.TYPE_NAME, name); + + if ((repository != null) && repository.isPublicReadable()) + { + chain.doFilter(request, response); + } + else + { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + } + } + else + { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + } + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private RepositoryManager repositoryManager; +} diff --git a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrServletModule.java b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrServletModule.java index 086a81cafc..e9491f19b8 100644 --- a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrServletModule.java +++ b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/web/BzrServletModule.java @@ -51,6 +51,9 @@ public class BzrServletModule extends ServletModule /** Field description */ public static final String MAPPING_BZR = "/bzr/*"; + /** Field description */ + public static final String MAPPING_PUBLICBZR = "/public/bzr/*"; + //~--- methods -------------------------------------------------------------- /** @@ -60,8 +63,10 @@ public class BzrServletModule extends ServletModule @Override protected void configureServlets() { - filter(MAPPING_BZR).through(BasicAuthenticationFilter.class); + filter(MAPPING_BZR, + MAPPING_PUBLICBZR).through(BasicAuthenticationFilter.class); filter(MAPPING_BZR).through(BzrPermissionFilter.class); - serve(MAPPING_BZR).with(BzrCGIServlet.class); + filter(MAPPING_PUBLICBZR).through(BzrPublicFilter.class); + serve(MAPPING_BZR, MAPPING_PUBLICBZR).with(BzrCGIServlet.class); } } diff --git a/scm-core/src/main/java/sonia/scm/util/SecurityUtil.java b/scm-core/src/main/java/sonia/scm/util/SecurityUtil.java index 30c03bc951..c753f57fd4 100644 --- a/scm-core/src/main/java/sonia/scm/util/SecurityUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/SecurityUtil.java @@ -37,6 +37,7 @@ package sonia.scm.util; import com.google.inject.Provider; +import sonia.scm.SCMContext; import sonia.scm.security.ScmSecurityException; import sonia.scm.security.SecurityContext; import sonia.scm.user.User; @@ -111,4 +112,31 @@ public class SecurityUtil return user; } + + /** + * Method description + * + * + * @param contextProvider + * + * @return + */ + public static boolean isAnonymous( + Provider contextProvider) + { + return isAnonymous(contextProvider.get()); + } + + /** + * Method description + * + * + * @param context + * + * @return + */ + public static boolean isAnonymous(SecurityContext context) + { + return SCMContext.USER_ANONYMOUS.equals(context.getUser().getName()); + } } From 0b0155aa9b2f4c0c41162cf1f621d876636227d4 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 25 Jan 2011 19:33:53 +0100 Subject: [PATCH 05/25] added PluginVersion --- .../java/sonia/scm/plugin/PluginVersion.java | 454 ++++++++++++++++++ .../sonia/scm/plugin/PluginVersionTest.java | 111 +++++ 2 files changed, 565 insertions(+) create mode 100644 scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java create mode 100644 scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java b/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java new file mode 100644 index 0000000000..41e871d357 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java @@ -0,0 +1,454 @@ +/** + * 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.plugin; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +/** + * + * @author Sebastian Sdorra + */ +public class PluginVersion +{ + + /** + * Constructs ... + * + * + * @param versionString + */ + public PluginVersion(String versionString) + { + this.unparsedVersion = versionString; + + int index = versionString.indexOf("-"); + String versionPart = null; + String qualifierPart = null; + + if (index > 0) + { + versionPart = versionString.substring(0, index); + qualifierPart = versionString.substring(index); + } + else + { + versionPart = versionString; + } + + parseVersionPart(versionPart); + type = PluginVersionType.RELEASE; + + if (qualifierPart != null) + { + parseQualifierPart(qualifierPart); + } + + parsedVersion = createParsedVersion(); + } + + //~--- enums ---------------------------------------------------------------- + + /** + * Enum description + * + */ + public static enum PluginVersionType + { + EARLY_ACESS("ea", 0, "early", "earlyaccess"), + MILESTONE("M", 1, "milestone"), + ALPHA("alpha", 2), BETA("beta", 3), + RELEASE_CANDIDAT("rc", 4, "releasecandidate"), RELEASE(10); + + /** + * Constructs ... + * + * + * @param value + */ + private PluginVersionType(int value) + { + this(null, value); + } + + /** + * Constructs ... + * + * + * + * @param id + * @param value + * @param aliases + */ + private PluginVersionType(String id, int value, String... aliases) + { + this.id = id; + this.value = value; + this.aliases = aliases; + } + + //~--- get methods -------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public String[] getAliases() + { + return aliases; + } + + /** + * Method description + * + * + * @return + */ + public String getId() + { + return id; + } + + /** + * Method description + * + * + * @return + */ + public Collection getNames() + { + List names = new ArrayList(); + + if (id != null) + { + names.add(id); + } + + if (aliases != null) + { + names.addAll(Arrays.asList(aliases)); + } + + return names; + } + + /** + * Method description + * + * + * @return + */ + public int getValue() + { + return value; + } + + //~--- fields ------------------------------------------------------------- + + /** Field description */ + public String[] aliases; + + /** Field description */ + private String id; + + /** Field description */ + private int value; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public String toString() + { + return parsedVersion; + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public int getMaintenance() + { + return maintenance; + } + + /** + * Method description + * + * + * @return + */ + public int getMajor() + { + return major; + } + + /** + * Method description + * + * + * @return + */ + public int getMinor() + { + return minor; + } + + /** + * Method description + * + * + * @return + */ + public String getParsedVersion() + { + return parsedVersion; + } + + /** + * Method description + * + * + * @return + */ + public PluginVersionType getType() + { + return type; + } + + /** + * Method description + * + * + * @return + */ + public int getTypeVersion() + { + return typeVersion; + } + + /** + * Method description + * + * + * @return + */ + public String getUnparsedVersion() + { + return unparsedVersion; + } + + /** + * Method description + * + * + * @return + */ + public boolean isSnapshot() + { + return snapshot; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + private String createParsedVersion() + { + StringBuilder v = new StringBuilder(); + + v.append(major).append(".").append(minor).append(".").append(maintenance); + + String typeId = type.getId(); + + if (typeId != null) + { + v.append("-").append(typeId).append(typeVersion); + } + + if (snapshot) + { + v.append("-").append("SNAPSHOT"); + } + + return v.toString(); + } + + /** + * Method description + * + * + * @param qualifierPart + */ + private void parseQualifierPart(String qualifierPart) + { + String qualifier = qualifierPart.trim().toLowerCase(); + + if (qualifier.contains("snapshot")) + { + snapshot = true; + qualifier = qualifier.replace("snapshot", ""); + } + + if (qualifier.length() > 0) + { + for (PluginVersionType versionType : PluginVersionType.values()) + { + for (String name : versionType.getNames()) + { + int index = qualifier.indexOf(name); + + if (index > 0) + { + type = versionType; + qualifier = qualifier.substring(index + name.length()); + parseTypeVersion(qualifier); + + break; + } + } + } + } + } + + /** + * Method description + * + * + * @param qualifier + */ + private void parseTypeVersion(String qualifier) + { + String version = null; + StringBuilder vb = new StringBuilder(); + + for (char c : qualifier.toCharArray()) + { + if (version != null) + { + break; + } + else if (Character.isDigit(c)) + { + vb.append(c); + } + else if (vb.length() > 0) + { + version = vb.toString(); + } + } + + if (vb.length() > 0) + { + version = vb.toString(); + } + + if (version != null) + { + typeVersion = Integer.parseInt(version); + } + } + + /** + * Method description + * + * + * @param versionPart + */ + private void parseVersionPart(String versionPart) + { + String[] parts = versionPart.split("\\."); + + if (parts.length > 0) + { + major = Integer.parseInt(parts[0]); + + if (parts.length > 1) + { + minor = Integer.parseInt(parts[1]); + + if (parts.length > 2) + { + maintenance = Integer.parseInt(parts[2]); + } + } + } + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private int maintenance = 0; + + /** Field description */ + private int major = 0; + + /** Field description */ + private int minor = 0; + + /** Field description */ + private String parsedVersion; + + /** Field description */ + private boolean snapshot; + + /** Field description */ + private PluginVersionType type; + + /** Field description */ + private int typeVersion = 1; + + /** Field description */ + private String unparsedVersion; +} diff --git a/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java b/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java new file mode 100644 index 0000000000..298dd73ff9 --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java @@ -0,0 +1,111 @@ +/** + * 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.plugin; + +//~--- non-JDK imports -------------------------------------------------------- + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * + * @author Sebastian Sdorra + */ +public class PluginVersionTest +{ + + /** + * Method description + * + */ + @Test + public void parseSimpleVersion() + { + PluginVersion v = new PluginVersion("1.0"); + + assertTrue(v.getMajor() == 1); + assertTrue(v.getMinor() == 0); + assertTrue(v.getMaintenance() == 0); + assertFalse(v.isSnapshot()); + assertTrue(v.getType() == PluginVersion.PluginVersionType.RELEASE); + assertEquals(v.getParsedVersion(), "1.0.0"); + + // test with snapshot + v = new PluginVersion("1.1-SNAPSHOT"); + assertTrue(v.getMajor() == 1); + assertTrue(v.getMinor() == 1); + assertTrue(v.getMaintenance() == 0); + assertTrue(v.isSnapshot()); + assertTrue(v.getType() == PluginVersion.PluginVersionType.RELEASE); + assertEquals(v.getParsedVersion(), "1.1.0-SNAPSHOT"); + + // test with maintenance + v = new PluginVersion("2.3.14"); + assertTrue(v.getMajor() == 2); + assertTrue(v.getMinor() == 3); + assertTrue(v.getMaintenance() == 14); + assertFalse(v.isSnapshot()); + assertTrue(v.getType() == PluginVersion.PluginVersionType.RELEASE); + assertEquals(v.getParsedVersion(), "2.3.14"); + } + + /** + * Method description + * + */ + @Test + public void parseTypeVersions() + { + PluginVersion v = new PluginVersion("1.0-alpha"); + + assertTrue(v.getMajor() == 1); + assertTrue(v.getMinor() == 0); + assertTrue(v.getMaintenance() == 0); + assertFalse(v.isSnapshot()); + assertTrue(v.getType() == PluginVersion.PluginVersionType.ALPHA); + assertTrue(v.getTypeVersion() == 1); + assertEquals(v.getParsedVersion(), "1.0.0-alpha1"); + + // Test release candidate + v = new PluginVersion("2.1.2-RC3"); + assertTrue(v.getMajor() == 2); + assertTrue(v.getMinor() == 1); + assertTrue(v.getMaintenance() == 2); + assertFalse(v.isSnapshot()); + assertTrue(v.getType() == PluginVersion.PluginVersionType.RELEASE_CANDIDAT); + assertTrue(v.getTypeVersion() == 3); + assertEquals(v.getParsedVersion(), "2.1.2-rc3"); + } +} From 0d2c393821536b7fd2886cde8e90def6a24d1e62 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 26 Jan 2011 19:09:48 +0100 Subject: [PATCH 06/25] improve PluginVersion api --- .../java/sonia/scm/plugin/PluginVersion.java | 242 ++++++++++-------- .../sonia/scm/plugin/PluginVersionType.java | 148 +++++++++++ .../sonia/scm/plugin/PluginVersionTest.java | 58 ++++- 3 files changed, 341 insertions(+), 107 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/plugin/PluginVersionType.java diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java b/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java index 41e871d357..4100aa5f90 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java @@ -33,20 +33,26 @@ package sonia.scm.plugin; -//~--- JDK imports ------------------------------------------------------------ +//~--- non-JDK imports -------------------------------------------------------- -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import sonia.scm.util.AssertUtil; /** * * @author Sebastian Sdorra */ -public class PluginVersion +public class PluginVersion implements Comparable { + /** the logger for PluginVersion */ + private static final Logger logger = + LoggerFactory.getLogger(PluginVersion.class); + + //~--- constructors --------------------------------------------------------- + /** * Constructs ... * @@ -82,117 +88,93 @@ public class PluginVersion parsedVersion = createParsedVersion(); } - //~--- enums ---------------------------------------------------------------- + //~--- methods -------------------------------------------------------------- /** * Enum description * + * + * @param versionString + * + * @return */ - public static enum PluginVersionType + + /** + * Method description + * + * + * @param versionString + * + * @return + */ + public static PluginVersion createVersion(String versionString) { - EARLY_ACESS("ea", 0, "early", "earlyaccess"), - MILESTONE("M", 1, "milestone"), - ALPHA("alpha", 2), BETA("beta", 3), - RELEASE_CANDIDAT("rc", 4, "releasecandidate"), RELEASE(10); + PluginVersion version = null; - /** - * Constructs ... - * - * - * @param value - */ - private PluginVersionType(int value) + try { - this(null, value); + version = new PluginVersion(versionString); } - - /** - * Constructs ... - * - * - * - * @param id - * @param value - * @param aliases - */ - private PluginVersionType(String id, int value, String... aliases) + catch (NumberFormatException ex) { - this.id = id; - this.value = value; - this.aliases = aliases; - } - - //~--- get methods -------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - public String[] getAliases() - { - return aliases; - } - - /** - * Method description - * - * - * @return - */ - public String getId() - { - return id; - } - - /** - * Method description - * - * - * @return - */ - public Collection getNames() - { - List names = new ArrayList(); - - if (id != null) + if (logger.isWarnEnabled()) { - names.add(id); + logger.warn("could not parse version ".concat(versionString), ex); } - - if (aliases != null) - { - names.addAll(Arrays.asList(aliases)); - } - - return names; } - /** - * Method description - * - * - * @return - */ - public int getValue() - { - return value; - } - - //~--- fields ------------------------------------------------------------- - - /** Field description */ - public String[] aliases; - - /** Field description */ - private String id; - - /** Field description */ - private int value; + return version; } - //~--- methods -------------------------------------------------------------- + /** + * Method description + * + * + * @param o + * + * @return + */ + @Override + public int compareTo(PluginVersion o) + { + AssertUtil.assertIsNotNull(o); + + int result = o.major - major; + + if (result == 0) + { + result = o.minor - minor; + + if (result == 0) + { + result = o.maintenance - maintenance; + + if (result == 0) + { + result = o.type.getValue() - type.getValue(); + + if (result == 0) + { + result = o.typeVersion - typeVersion; + + if (result == 0) + { + if (o.snapshot &&!snapshot) + { + result = 0; + } + else if (!o.snapshot && snapshot) + { + result = 1; + } + } + } + } + } + } + + return result; + } /** * Method description @@ -285,6 +267,62 @@ public class PluginVersion return unparsedVersion; } + /** + * Method description + * + * + * @param o + * + * @return + */ + public boolean isNewer(PluginVersion o) + { + return compareTo(o) < 0; + } + + /** + * Method description + * + * + * @param versionString + * + * @return + */ + public boolean isNewer(String versionString) + { + PluginVersion o = PluginVersion.createVersion(versionString); + + return (o != null) && isNewer(o); + } + + /** + * Method description + * + * + * @param o + * + * @return + */ + public boolean isOlder(PluginVersion o) + { + return compareTo(o) > 0; + } + + /** + * Method description + * + * + * @param versionString + * + * @return + */ + public boolean isOlder(String versionString) + { + PluginVersion o = PluginVersion.createVersion(versionString); + + return (o != null) && isOlder(o); + } + /** * Method description * @@ -347,6 +385,8 @@ public class PluginVersion { for (String name : versionType.getNames()) { + name = name.toLowerCase(); + int index = qualifier.indexOf(name); if (index > 0) diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginVersionType.java b/scm-core/src/main/java/sonia/scm/plugin/PluginVersionType.java new file mode 100644 index 0000000000..bddf88f5b3 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginVersionType.java @@ -0,0 +1,148 @@ +/** + * 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.plugin; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +/** + * + * @author Sebastian Sdorra + */ +public enum PluginVersionType +{ + EARLY_ACESS("ea", 0, "early", "earlyaccess"), MILESTONE("M", 1, "milestone"), + ALPHA("alpha", 2), BETA("beta", 3), + RELEASE_CANDIDAT("RC", 4, "releasecandidate"), RELEASE(10); + + /** + * Constructs ... + * + * + * @param value + */ + private PluginVersionType(int value) + { + this(null, value); + } + + /** + * Constructs ... + * + * + * + * @param id + * @param value + * @param aliases + */ + private PluginVersionType(String id, int value, String... aliases) + { + this.id = id; + this.value = value; + this.aliases = aliases; + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public String[] getAliases() + { + return aliases; + } + + /** + * Method description + * + * + * @return + */ + public String getId() + { + return id; + } + + /** + * Method description + * + * + * @return + */ + public Collection getNames() + { + List names = new ArrayList(); + + if (id != null) + { + names.add(id); + } + + if (aliases != null) + { + names.addAll(Arrays.asList(aliases)); + } + + return names; + } + + /** + * Method description + * + * + * @return + */ + public int getValue() + { + return value; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + public String[] aliases; + + /** Field description */ + private String id; + + /** Field description */ + private int value; +} diff --git a/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java b/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java index 298dd73ff9..e7295825fb 100644 --- a/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java +++ b/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java @@ -39,6 +39,10 @@ import org.junit.Test; import static org.junit.Assert.*; +//~--- JDK imports ------------------------------------------------------------ + +import java.util.Arrays; + /** * * @author Sebastian Sdorra @@ -59,7 +63,7 @@ public class PluginVersionTest assertTrue(v.getMinor() == 0); assertTrue(v.getMaintenance() == 0); assertFalse(v.isSnapshot()); - assertTrue(v.getType() == PluginVersion.PluginVersionType.RELEASE); + assertTrue(v.getType() == PluginVersionType.RELEASE); assertEquals(v.getParsedVersion(), "1.0.0"); // test with snapshot @@ -68,7 +72,7 @@ public class PluginVersionTest assertTrue(v.getMinor() == 1); assertTrue(v.getMaintenance() == 0); assertTrue(v.isSnapshot()); - assertTrue(v.getType() == PluginVersion.PluginVersionType.RELEASE); + assertTrue(v.getType() == PluginVersionType.RELEASE); assertEquals(v.getParsedVersion(), "1.1.0-SNAPSHOT"); // test with maintenance @@ -77,7 +81,7 @@ public class PluginVersionTest assertTrue(v.getMinor() == 3); assertTrue(v.getMaintenance() == 14); assertFalse(v.isSnapshot()); - assertTrue(v.getType() == PluginVersion.PluginVersionType.RELEASE); + assertTrue(v.getType() == PluginVersionType.RELEASE); assertEquals(v.getParsedVersion(), "2.3.14"); } @@ -94,7 +98,7 @@ public class PluginVersionTest assertTrue(v.getMinor() == 0); assertTrue(v.getMaintenance() == 0); assertFalse(v.isSnapshot()); - assertTrue(v.getType() == PluginVersion.PluginVersionType.ALPHA); + assertTrue(v.getType() == PluginVersionType.ALPHA); assertTrue(v.getTypeVersion() == 1); assertEquals(v.getParsedVersion(), "1.0.0-alpha1"); @@ -104,8 +108,50 @@ public class PluginVersionTest assertTrue(v.getMinor() == 1); assertTrue(v.getMaintenance() == 2); assertFalse(v.isSnapshot()); - assertTrue(v.getType() == PluginVersion.PluginVersionType.RELEASE_CANDIDAT); + assertTrue(v.getType() == PluginVersionType.RELEASE_CANDIDAT); assertTrue(v.getTypeVersion() == 3); - assertEquals(v.getParsedVersion(), "2.1.2-rc3"); + assertEquals(v.getParsedVersion(), "2.1.2-RC3"); + } + + /** + * Method description + * + */ + @Test + public void testCompareTo() + { + PluginVersion[] versions = new PluginVersion[9]; + + versions[0] = PluginVersion.createVersion("2.3.1-SNAPSHOT"); + versions[1] = PluginVersion.createVersion("2.3.1-beta1"); + versions[2] = PluginVersion.createVersion("2.3.1-beta2"); + versions[3] = PluginVersion.createVersion("2.3.1-M1"); + versions[4] = PluginVersion.createVersion("2.3.1-alpha2"); + versions[5] = PluginVersion.createVersion("2.3.1-RC1"); + versions[6] = PluginVersion.createVersion("2.3.1"); + versions[7] = PluginVersion.createVersion("2.3"); + versions[8] = PluginVersion.createVersion("2.4.6"); + Arrays.sort(versions); + assertEquals(versions[0].getParsedVersion(), "2.4.6"); + assertEquals(versions[1].getParsedVersion(), "2.3.1"); + assertEquals(versions[2].getParsedVersion(), "2.3.1-SNAPSHOT"); + assertEquals(versions[3].getParsedVersion(), "2.3.1-RC1"); + assertEquals(versions[4].getParsedVersion(), "2.3.1-beta2"); + assertEquals(versions[5].getParsedVersion(), "2.3.1-beta1"); + assertEquals(versions[6].getParsedVersion(), "2.3.1-alpha2"); + assertEquals(versions[7].getParsedVersion(), "2.3.1-M1"); + assertEquals(versions[8].getParsedVersion(), "2.3.0"); + } + + /** + * Method description + * + */ + @Test + public void testIsNewer() + { + assertFalse(PluginVersion.createVersion("1.0").isNewer("1.0.1")); + assertTrue(PluginVersion.createVersion("1.1").isNewer("1.1-alpha1")); + assertTrue(PluginVersion.createVersion("1.1").isNewer("1.1-RC5")); } } From 985c9ba03d4379b012e7f67f81e1e8d75d49274d Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 28 Jan 2011 17:41:11 +0100 Subject: [PATCH 07/25] show only newer plugins as updates --- .../java/sonia/scm/plugin/PluginState.java | 2 +- .../sonia/scm/plugin/PluginVersionTest.java | 12 ++++ .../api/rest/resources/PluginResource.java | 39 +++++------- .../scm/plugin/DefaultPluginManager.java | 29 ++++++++- .../scm/plugin/OverviewPluginFilter.java | 61 +++++++++++++++++++ .../main/webapp/resources/js/sonia.plugin.js | 2 +- 6 files changed, 118 insertions(+), 27 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/plugin/OverviewPluginFilter.java diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginState.java b/scm-core/src/main/java/sonia/scm/plugin/PluginState.java index f451c34a75..566537e275 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginState.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginState.java @@ -39,5 +39,5 @@ package sonia.scm.plugin; */ public enum PluginState { - CORE, AVAILABLE, INSTALLED, UPDATE_AVAILABLE; + CORE, AVAILABLE, INSTALLED, NEWER_VERSION_INSTALLED, UPDATE_AVAILABLE; } diff --git a/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java b/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java index e7295825fb..9f59b5fa72 100644 --- a/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java +++ b/scm-core/src/test/java/sonia/scm/plugin/PluginVersionTest.java @@ -154,4 +154,16 @@ public class PluginVersionTest assertTrue(PluginVersion.createVersion("1.1").isNewer("1.1-alpha1")); assertTrue(PluginVersion.createVersion("1.1").isNewer("1.1-RC5")); } + + /** + * Method description + * + */ + @Test + public void testIsOlder() + { + assertFalse(PluginVersion.createVersion("1.0.1").isOlder("1.0")); + assertTrue(PluginVersion.createVersion("1.1-alpha1").isOlder("1.1")); + assertTrue(PluginVersion.createVersion("1.1-RC5").isOlder("1.1")); + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java index 6eb71cbd33..9e9badb373 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java @@ -39,7 +39,9 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import sonia.scm.plugin.DefaultPluginManager; +import sonia.scm.plugin.OverviewPluginFilter; import sonia.scm.plugin.PluginInformation; +import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -137,9 +139,9 @@ public class PluginResource */ @GET @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - public PluginInformation[] getAll() + public Collection getAll() { - return getArray(pluginManager.getAll()); + return pluginManager.getAll(); } /** @@ -151,9 +153,9 @@ public class PluginResource @GET @Path("available") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - public PluginInformation[] getAvailable() + public Collection getAvailable() { - return getArray(pluginManager.getAvailable()); + return pluginManager.getAvailable(); } /** @@ -165,9 +167,9 @@ public class PluginResource @GET @Path("updates") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - public PluginInformation[] getAvailableUpdates() + public Collection getAvailableUpdates() { - return getArray(pluginManager.getAvailableUpdates()); + return pluginManager.getAvailableUpdates(); } /** @@ -179,34 +181,23 @@ public class PluginResource @GET @Path("installed") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - public PluginInformation[] getInstalled() + public Collection getInstalled() { - return getArray(pluginManager.getInstalled()); + return pluginManager.getInstalled(); } /** * Method description * * - * @param pluginCollection - * * @return */ - private PluginInformation[] getArray( - Collection pluginCollection) + @GET + @Path("overview") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public Collection getOverview() { - PluginInformation[] plugins = null; - - if (pluginCollection != null) - { - plugins = pluginCollection.toArray(new PluginInformation[0]); - } - else - { - plugins = new PluginInformation[0]; - } - - return plugins; + return pluginManager.get(OverviewPluginFilter.INSTANCE); } //~--- fields --------------------------------------------------------------- diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java index 10bff0a95d..d69c75fde3 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java @@ -418,10 +418,14 @@ public class DefaultPluginManager implements PluginManager { state = PluginState.INSTALLED; } - else + else if (isNewer(available, installed)) { state = PluginState.UPDATE_AVAILABLE; } + else + { + state = PluginState.NEWER_VERSION_INSTALLED; + } break; } @@ -513,6 +517,29 @@ public class DefaultPluginManager implements PluginManager return center; } + /** + * Method description + * + * + * @param available + * @param installed + * + * @return + */ + private boolean isNewer(PluginInformation available, + PluginInformation installed) + { + boolean result = false; + PluginVersion version = PluginVersion.createVersion(installed.getVersion()); + + if (version != null) + { + result = version.isNewer(available.getVersion()); + } + + return result; + } + /** * Method description * diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/OverviewPluginFilter.java b/scm-webapp/src/main/java/sonia/scm/plugin/OverviewPluginFilter.java new file mode 100644 index 0000000000..7b3aded4c3 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/plugin/OverviewPluginFilter.java @@ -0,0 +1,61 @@ +/** + * 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.plugin; + +/** + * + * @author Sebastian Sdorra + */ +public class OverviewPluginFilter implements PluginFilter +{ + + /** Field description */ + public static OverviewPluginFilter INSTANCE = new OverviewPluginFilter(); + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param plugin + * + * @return + */ + @Override + public boolean accept(PluginInformation plugin) + { + return plugin.getState() != PluginState.NEWER_VERSION_INSTALLED; + } +} diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js b/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js index 65c614925d..a69e6c59d6 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js @@ -198,7 +198,7 @@ Sonia.plugin.Grid = Ext.extend(Sonia.rest.Grid, { initComponent: function(){ Sonia.plugin.StoreInstance = new Sonia.plugin.Store({ - url: restUrl + 'plugins.json' + url: restUrl + 'plugins/overview.json' }); From 1aee9ed756816ee997dbd01774b04c2bb5a5a7bf Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 28 Jan 2011 17:43:37 +0100 Subject: [PATCH 08/25] move ScmConfiguration to scm-core --- .../src/main/java/sonia/scm/config/ScmConfiguration.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {scm-webapp => scm-core}/src/main/java/sonia/scm/config/ScmConfiguration.java (100%) diff --git a/scm-webapp/src/main/java/sonia/scm/config/ScmConfiguration.java b/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java similarity index 100% rename from scm-webapp/src/main/java/sonia/scm/config/ScmConfiguration.java rename to scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java From c08990a9e01ac81d827c855c36ee5939095ff306 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 28 Jan 2011 17:55:54 +0100 Subject: [PATCH 09/25] hide permissions to improve security --- .../repository/xml/XmlRepositoryManager.java | 44 +++++++++++++- .../webapp/resources/js/sonia.repository.js | 59 +------------------ 2 files changed, 44 insertions(+), 59 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java index 565d8d7c00..dc44df19a0 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java @@ -48,6 +48,7 @@ import sonia.scm.SCMContext; import sonia.scm.SCMContextProvider; import sonia.scm.Type; import sonia.scm.repository.AbstractRepositoryManager; +import sonia.scm.repository.Permission; import sonia.scm.repository.PermissionType; import sonia.scm.repository.PermissionUtil; import sonia.scm.repository.Repository; @@ -68,6 +69,7 @@ import sonia.scm.web.security.WebSecurityContext; import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -330,6 +332,7 @@ public class XmlRepositoryManager extends AbstractRepositoryManager { assertIsReader(repository); repository = repository.clone(); + prepareRepository(repository); } return repository; @@ -357,6 +360,7 @@ public class XmlRepositoryManager extends AbstractRepositoryManager if (isReader(repository)) { repository = repository.clone(); + prepareRepository(repository); } else { @@ -382,7 +386,10 @@ public class XmlRepositoryManager extends AbstractRepositoryManager { if (handlerMap.containsKey(repository.getType()) && isReader(repository)) { - repositories.add(repository.clone()); + Repository r = repository.clone(); + + prepareRepository(r); + repositories.add(r); } } @@ -486,6 +493,27 @@ public class XmlRepositoryManager extends AbstractRepositoryManager PermissionType.READ); } + /** + * Method description + * + * + * @param repository + */ + private void prepareRepository(Repository repository) + { + if (isOwner(repository)) + { + if (repository.getPermissions() == null) + { + repository.setPermissions(new ArrayList()); + } + } + else + { + repository.setPermissions(null); + } + } + /** * Method description * @@ -546,6 +574,20 @@ public class XmlRepositoryManager extends AbstractRepositoryManager return handler; } + /** + * Method description + * + * + * @param repository + * + * @return + */ + private boolean isOwner(Repository repository) + { + return PermissionUtil.hasPermission(repository, securityContextProvider, + PermissionType.OWNER); + } + /** * Method description * diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.repository.js b/scm-webapp/src/main/webapp/resources/js/sonia.repository.js index ea7e46e9b9..ae976e81fa 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.repository.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.repository.js @@ -46,65 +46,8 @@ Ext.ns('Sonia.repository'); // functions -Sonia.repository.getPermissionValue = function(type){ - var value = 0; - switch (type){ - case "READ": - value = 0; - break; - case "WRITE": - value = 10; - break; - case "OWNER": - value = 100; - break; - } - return value; -} - -Sonia.repository.isMember = function(group){ - var result = false; - if ( Ext.isDefined(state.groups) ){ - for ( var i=0; i= value ){ - if ( p.groupPermission ){ - if ( Sonia.repository.isMember( p.name ) ){ - result = true; - break; - } - } else if ( p.name == state.user.name ) { - result = true; - break; - } - } - } - } - } - return result; -} - Sonia.repository.isOwner = function(repository){ - return Sonia.repository.hasPermission(repository, 'OWNER'); + return repository.permissions != null; } Sonia.repository.setEditPanel = function(panel){ From 2e0d11d7023f6f82c25d15072ef6d8bfa1854ac1 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 29 Jan 2011 14:33:30 +0100 Subject: [PATCH 10/25] fix issue '#4 x86_64 wrapper not included' --- scm-server/pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scm-server/pom.xml b/scm-server/pom.xml index fecd24fe0e..45fa99d4ca 100644 --- a/scm-server/pom.xml +++ b/scm-server/pom.xml @@ -70,6 +70,15 @@ jsw + + linux-x86-32 + linux-x86-64 + macosx-x86-universal-32 + solaris-sparc-32 + solaris-sparc-64 + solaris-x86-32 + windows-x86-32 + configuration.directory.in.classpath.first From 43b5b7ec158e6c2a1a9b5a07ba6612f385db6655 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 11:31:59 +0100 Subject: [PATCH 11/25] update logback to version 0.9.28 --- scm-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 7532bcff81..b0327068f8 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -86,7 +86,7 @@ ch.qos.logback logback-classic - 0.9.27 + 0.9.28 From 03183cd86e22625b0376ceb677f77d134916afbc Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 12:30:14 +0100 Subject: [PATCH 12/25] fix potential java.lang.NullPointerException --- .../src/main/java/sonia/scm/filter/GZipResponseWrapper.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/filter/GZipResponseWrapper.java b/scm-webapp/src/main/java/sonia/scm/filter/GZipResponseWrapper.java index f42d25ff17..8c1878a8c3 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/GZipResponseWrapper.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/GZipResponseWrapper.java @@ -91,7 +91,10 @@ public class GZipResponseWrapper extends HttpServletResponseWrapper @Override public void flushBuffer() throws IOException { - stream.flush(); + if (stream != null) + { + stream.flush(); + } } //~--- get methods ---------------------------------------------------------- From 6fa341fb0a17f72d2ae6cd51323f076e31e676b4 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 12:44:32 +0100 Subject: [PATCH 13/25] fix permission bug --- .../rest/resources/RepositoryResource.java | 55 ++++++++++++++++++- .../repository/xml/XmlRepositoryManager.java | 40 -------------- 2 files changed, 53 insertions(+), 42 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java index 10f2356df8..14d212766f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java @@ -36,18 +36,24 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; +import com.google.inject.Provider; import com.google.inject.Singleton; import sonia.scm.config.ScmConfiguration; +import sonia.scm.repository.Permission; +import sonia.scm.repository.PermissionType; +import sonia.scm.repository.PermissionUtil; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryHandler; import sonia.scm.repository.RepositoryManager; +import sonia.scm.web.security.WebSecurityContext; //~--- JDK imports ------------------------------------------------------------ import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; import javax.servlet.http.HttpServletRequest; @@ -75,13 +81,16 @@ public class RepositoryResource extends AbstractResource * * @param configuration * @param repositoryManager + * @param securityContextProvider */ @Inject - public RepositoryResource(ScmConfiguration configuration, - RepositoryManager repositoryManager) + public RepositoryResource( + ScmConfiguration configuration, RepositoryManager repositoryManager, + Provider securityContextProvider) { this.configuration = configuration; this.repositoryManager = repositoryManager; + this.securityContextProvider = securityContextProvider; } //~--- methods -------------------------------------------------------------- @@ -151,6 +160,7 @@ public class RepositoryResource extends AbstractResource for (Repository repository : repositories) { appendUrl(repository); + prepareRepository(repository); } return repositories; @@ -185,6 +195,7 @@ public class RepositoryResource extends AbstractResource Repository repository = repositoryManager.get(id); appendUrl(repository); + prepareRepository(repository); return repository; } @@ -234,6 +245,43 @@ public class RepositoryResource extends AbstractResource } } + /** + * Method description + * + * + * @param repository + */ + private void prepareRepository(Repository repository) + { + if (isOwner(repository)) + { + if (repository.getPermissions() == null) + { + repository.setPermissions(new ArrayList()); + } + } + else + { + repository.setPermissions(null); + } + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param repository + * + * @return + */ + private boolean isOwner(Repository repository) + { + return PermissionUtil.hasPermission(repository, securityContextProvider, + PermissionType.OWNER); + } + //~--- fields --------------------------------------------------------------- /** Field description */ @@ -245,4 +293,7 @@ public class RepositoryResource extends AbstractResource /** TODO path request direct to method */ @Context private HttpServletRequest request; + + /** Field description */ + private Provider securityContextProvider; } diff --git a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java index dc44df19a0..fa58ab4285 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java @@ -48,7 +48,6 @@ import sonia.scm.SCMContext; import sonia.scm.SCMContextProvider; import sonia.scm.Type; import sonia.scm.repository.AbstractRepositoryManager; -import sonia.scm.repository.Permission; import sonia.scm.repository.PermissionType; import sonia.scm.repository.PermissionUtil; import sonia.scm.repository.Repository; @@ -69,7 +68,6 @@ import sonia.scm.web.security.WebSecurityContext; import java.io.IOException; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -332,7 +330,6 @@ public class XmlRepositoryManager extends AbstractRepositoryManager { assertIsReader(repository); repository = repository.clone(); - prepareRepository(repository); } return repository; @@ -360,7 +357,6 @@ public class XmlRepositoryManager extends AbstractRepositoryManager if (isReader(repository)) { repository = repository.clone(); - prepareRepository(repository); } else { @@ -388,7 +384,6 @@ public class XmlRepositoryManager extends AbstractRepositoryManager { Repository r = repository.clone(); - prepareRepository(r); repositories.add(r); } } @@ -493,27 +488,6 @@ public class XmlRepositoryManager extends AbstractRepositoryManager PermissionType.READ); } - /** - * Method description - * - * - * @param repository - */ - private void prepareRepository(Repository repository) - { - if (isOwner(repository)) - { - if (repository.getPermissions() == null) - { - repository.setPermissions(new ArrayList()); - } - } - else - { - repository.setPermissions(null); - } - } - /** * Method description * @@ -574,20 +548,6 @@ public class XmlRepositoryManager extends AbstractRepositoryManager return handler; } - /** - * Method description - * - * - * @param repository - * - * @return - */ - private boolean isOwner(Repository repository) - { - return PermissionUtil.hasPermission(repository, securityContextProvider, - PermissionType.OWNER); - } - /** * Method description * From 5626cf6a7722bc0ac3a4a770f7410a778f16a4a9 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 13:48:07 +0100 Subject: [PATCH 14/25] added FileSystem api --- .../java/sonia/scm/io/DefaultFileSystem.java | 79 +++++++++++++++++++ .../main/java/sonia/scm/io/FileSystem.java | 74 +++++++++++++++++ .../sonia/scm/BindingExtensionProcessor.java | 24 ++++++ .../main/java/sonia/scm/ScmServletModule.java | 12 +++ 4 files changed, 189 insertions(+) create mode 100644 scm-core/src/main/java/sonia/scm/io/DefaultFileSystem.java create mode 100644 scm-core/src/main/java/sonia/scm/io/FileSystem.java diff --git a/scm-core/src/main/java/sonia/scm/io/DefaultFileSystem.java b/scm-core/src/main/java/sonia/scm/io/DefaultFileSystem.java new file mode 100644 index 0000000000..5904e92624 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/io/DefaultFileSystem.java @@ -0,0 +1,79 @@ +/** + * 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.io; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.util.IOUtil; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; +import java.io.IOException; + +/** + * + * @author Sebastian Sdorra + */ +public class DefaultFileSystem implements FileSystem +{ + + /** + * Method description + * + * + * @param directory + * + * @throws IOException + */ + @Override + public void create(File directory) throws IOException + { + IOUtil.mkdirs(directory); + } + + /** + * Method description + * + * + * @param directory + * + * @throws IOException + */ + @Override + public void destroy(File directory) throws IOException + { + IOUtil.delete(directory); + } +} diff --git a/scm-core/src/main/java/sonia/scm/io/FileSystem.java b/scm-core/src/main/java/sonia/scm/io/FileSystem.java new file mode 100644 index 0000000000..39c366a512 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/io/FileSystem.java @@ -0,0 +1,74 @@ +/** + * 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.io; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.plugin.ExtensionPoint; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; +import java.io.IOException; + +/** + * + * @author Sebastian Sdorra + */ +@ExtensionPoint +public interface FileSystem +{ + + /** + * Method description + * + * + * + * @param directory + * + * @throws IOException + */ + public void create(File directory) throws IOException; + + /** + * Method description + * + * + * + * @param directory + * + * @throws IOException + */ + public void destroy(File directory) throws IOException; +} diff --git a/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java b/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java index fe9fcc8988..570cdb74d5 100644 --- a/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java @@ -43,6 +43,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.group.GroupListener; +import sonia.scm.io.FileSystem; import sonia.scm.plugin.ext.Extension; import sonia.scm.plugin.ext.ExtensionProcessor; import sonia.scm.repository.RepositoryHandler; @@ -188,6 +189,15 @@ public class BindingExtensionProcessor implements ExtensionProcessor resourceHandler.addBinding().to(extensionClass); } + else if (FileSystem.class.isAssignableFrom(extensionClass)) + { + if (logger.isInfoEnabled()) + { + logger.info("bind FileSystem {}", extensionClass.getName()); + } + + fileSystemClass = extensionClass; + } else { if (logger.isInfoEnabled()) @@ -243,6 +253,17 @@ public class BindingExtensionProcessor implements ExtensionProcessor return authenticationListeners; } + /** + * Method description + * + * + * @return + */ + public Class getFileSystemClass() + { + return fileSystemClass; + } + /** * Method description * @@ -337,6 +358,9 @@ public class BindingExtensionProcessor implements ExtensionProcessor /** Field description */ private Set> extensions; + /** Field description */ + private Class fileSystemClass; + /** Field description */ private Set moduleSet; diff --git a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java index 8b8845ae77..0be05e5821 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java +++ b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java @@ -49,6 +49,8 @@ import sonia.scm.filter.SSLFilter; import sonia.scm.filter.SecurityFilter; import sonia.scm.group.GroupManager; import sonia.scm.group.xml.XmlGroupManager; +import sonia.scm.io.DefaultFileSystem; +import sonia.scm.io.FileSystem; import sonia.scm.plugin.DefaultPluginManager; import sonia.scm.plugin.Plugin; import sonia.scm.plugin.PluginLoader; @@ -175,6 +177,16 @@ public class ScmServletModule extends ServletModule bind(EncryptionHandler.class).to(MessageDigestEncryptionHandler.class); bindExtProcessor.bindExtensions(binder()); + Class fileSystem = + bindExtProcessor.getFileSystemClass(); + + if (fileSystem == null) + { + fileSystem = DefaultFileSystem.class; + } + + bind(FileSystem.class).to(fileSystem); + // bind security stuff bind(AuthenticationManager.class).to(ChainAuthenticatonManager.class); bind(SecurityContext.class).to(BasicSecurityContext.class); From 9a7481726a5e779eea464e321491588d0e7d2622 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 14:36:43 +0100 Subject: [PATCH 15/25] use FileSystem api --- .../scm/repository/BzrRepositoryHandler.java | 6 ++++-- .../scm/repository/GitRepositoryHandler.java | 6 ++++-- .../repository/GitRepositoryHandlerTest.java | 4 +++- .../scm/repository/HgRepositoryHandler.java | 5 +++-- .../repository/HgRepositoryHandlerTest.java | 4 +++- .../scm/repository/SvnRepositoryHandler.java | 6 ++++-- .../repository/SvnRepositoryHandlerTest.java | 4 +++- .../java/sonia/scm/io/DefaultFileSystem.java | 19 +++++++++++++++++++ .../AbstractSimpleRepositoryHandler.java | 14 ++++++++++++-- .../repository/DummyRepositoryHandler.java | 3 ++- .../repository/xml/XmlRepositoryManager.java | 13 +++++++++---- .../repository/XmlRepositoryManagerTest.java | 5 +++-- 12 files changed, 69 insertions(+), 20 deletions(-) diff --git a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/repository/BzrRepositoryHandler.java b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/repository/BzrRepositoryHandler.java index 2a3bca6ce3..23c53a745c 100644 --- a/plugins/scm-bzr-plugin/src/main/java/sonia/scm/repository/BzrRepositoryHandler.java +++ b/plugins/scm-bzr-plugin/src/main/java/sonia/scm/repository/BzrRepositoryHandler.java @@ -41,6 +41,7 @@ import com.google.inject.Singleton; import sonia.scm.Type; import sonia.scm.io.ExtendedCommand; +import sonia.scm.io.FileSystem; import sonia.scm.plugin.ext.Extension; import sonia.scm.store.StoreFactory; import sonia.scm.util.SecurityUtil; @@ -79,14 +80,15 @@ public class BzrRepositoryHandler * * * @param storeFactory + * @param fileSystem * @param securityContextProvider */ @Inject public BzrRepositoryHandler( - StoreFactory storeFactory, + StoreFactory storeFactory, FileSystem fileSystem, Provider securityContextProvider) { - super(storeFactory); + super(storeFactory, fileSystem); this.securityContextProvider = securityContextProvider; } diff --git a/plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java b/plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java index 8a91f50b24..2a21f3b7de 100644 --- a/plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java +++ b/plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java @@ -41,6 +41,7 @@ import com.google.inject.Singleton; import org.eclipse.jgit.storage.file.FileRepositoryBuilder; import sonia.scm.Type; +import sonia.scm.io.FileSystem; import sonia.scm.plugin.ext.Extension; import sonia.scm.store.StoreFactory; @@ -75,11 +76,12 @@ public class GitRepositoryHandler * * * @param storeFactory + * @param fileSystem */ @Inject - public GitRepositoryHandler(StoreFactory storeFactory) + public GitRepositoryHandler(StoreFactory storeFactory, FileSystem fileSystem) { - super(storeFactory); + super(storeFactory, fileSystem); } //~--- get methods ---------------------------------------------------------- diff --git a/plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java b/plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java index 534ed94f07..eb9646ffe8 100644 --- a/plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java +++ b/plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java @@ -35,6 +35,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.io.DefaultFileSystem; import sonia.scm.store.StoreFactory; import static org.junit.Assert.*; @@ -88,7 +89,8 @@ public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase protected RepositoryHandler createRepositoryHandler(StoreFactory factory, File directory) { - GitRepositoryHandler repositoryHandler = new GitRepositoryHandler(factory); + GitRepositoryHandler repositoryHandler = new GitRepositoryHandler(factory, + new DefaultFileSystem()); repositoryHandler.init(contextProvider); diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java index aebaabdaf7..a71278c9fc 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java @@ -57,6 +57,7 @@ import sonia.scm.web.HgWebConfigWriter; import java.io.File; import java.io.IOException; +import sonia.scm.io.FileSystem; /** * @@ -90,9 +91,9 @@ public class HgRepositoryHandler * @param storeFactory */ @Inject - public HgRepositoryHandler(StoreFactory storeFactory) + public HgRepositoryHandler(StoreFactory storeFactory, FileSystem fileSystem) { - super(storeFactory); + super(storeFactory, fileSystem); } //~--- methods -------------------------------------------------------------- diff --git a/plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java b/plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java index a233b30353..cb3ed09d74 100644 --- a/plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java +++ b/plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java @@ -35,6 +35,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.io.DefaultFileSystem; import sonia.scm.store.StoreFactory; import sonia.scm.util.Util; @@ -86,7 +87,8 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase protected RepositoryHandler createRepositoryHandler(StoreFactory factory, File directory) { - HgRepositoryHandler handler = new HgRepositoryHandler(factory); + HgRepositoryHandler handler = new HgRepositoryHandler(factory, + new DefaultFileSystem()); handler.init(contextProvider); handler.getConfig().setRepositoryDirectory(directory); diff --git a/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java b/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java index 4afbce9bac..4198310eec 100644 --- a/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java +++ b/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java @@ -42,6 +42,7 @@ import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.io.SVNRepositoryFactory; import sonia.scm.Type; +import sonia.scm.io.FileSystem; import sonia.scm.plugin.ext.Extension; import sonia.scm.store.StoreFactory; @@ -76,11 +77,12 @@ public class SvnRepositoryHandler * * * @param storeFactory + * @param fileSystem */ @Inject - public SvnRepositoryHandler(StoreFactory storeFactory) + public SvnRepositoryHandler(StoreFactory storeFactory, FileSystem fileSystem) { - super(storeFactory); + super(storeFactory, fileSystem); } //~--- get methods ---------------------------------------------------------- diff --git a/plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java b/plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java index 41dcbe403a..ab26da171f 100644 --- a/plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java +++ b/plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java @@ -35,6 +35,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.io.DefaultFileSystem; import sonia.scm.store.StoreFactory; import static org.junit.Assert.*; @@ -83,7 +84,8 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase protected RepositoryHandler createRepositoryHandler(StoreFactory factory, File directory) { - SvnRepositoryHandler handler = new SvnRepositoryHandler(factory); + SvnRepositoryHandler handler = new SvnRepositoryHandler(factory, + new DefaultFileSystem()); handler.init(contextProvider); diff --git a/scm-core/src/main/java/sonia/scm/io/DefaultFileSystem.java b/scm-core/src/main/java/sonia/scm/io/DefaultFileSystem.java index 5904e92624..24f702b7d6 100644 --- a/scm-core/src/main/java/sonia/scm/io/DefaultFileSystem.java +++ b/scm-core/src/main/java/sonia/scm/io/DefaultFileSystem.java @@ -35,6 +35,9 @@ package sonia.scm.io; //~--- non-JDK imports -------------------------------------------------------- +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import sonia.scm.util.IOUtil; //~--- JDK imports ------------------------------------------------------------ @@ -49,6 +52,12 @@ import java.io.IOException; public class DefaultFileSystem implements FileSystem { + /** the logger for DefaultFileSystem */ + private static final Logger logger = + LoggerFactory.getLogger(DefaultFileSystem.class); + + //~--- methods -------------------------------------------------------------- + /** * Method description * @@ -60,6 +69,11 @@ public class DefaultFileSystem implements FileSystem @Override public void create(File directory) throws IOException { + if (logger.isInfoEnabled()) + { + logger.info("create directory {}", directory.getPath()); + } + IOUtil.mkdirs(directory); } @@ -74,6 +88,11 @@ public class DefaultFileSystem implements FileSystem @Override public void destroy(File directory) throws IOException { + if (logger.isInfoEnabled()) + { + logger.info("destroy directory {}", directory.getPath()); + } + IOUtil.delete(directory); } } diff --git a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java index 410d16ac33..80b2bdf4af 100644 --- a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java @@ -42,6 +42,7 @@ import sonia.scm.ConfigurationException; import sonia.scm.SCMContextProvider; import sonia.scm.io.CommandResult; import sonia.scm.io.ExtendedCommand; +import sonia.scm.io.FileSystem; import sonia.scm.store.StoreFactory; import sonia.scm.util.IOUtil; @@ -75,10 +76,13 @@ public abstract class AbstractSimpleRepositoryHandler securityContextProvider, StoreFactory storeFactory, Set handlerSet) { @@ -114,7 +116,7 @@ public class XmlRepositoryManager extends AbstractRepositoryManager for (RepositoryHandler handler : handlerSet) { - addHandler(handler); + addHandler(contextProvider, handler); } } @@ -423,9 +425,12 @@ public class XmlRepositoryManager extends AbstractRepositoryManager * Method description * * + * + * @param contextProvider * @param handler */ - private void addHandler(RepositoryHandler handler) + private void addHandler(SCMContextProvider contextProvider, + RepositoryHandler handler) { AssertUtil.assertIsNotNull(handler); @@ -446,7 +451,7 @@ public class XmlRepositoryManager extends AbstractRepositoryManager } handlerMap.put(type.getName(), handler); - handler.init(SCMContext.getContext()); + handler.init(contextProvider); types.add(type); } diff --git a/scm-webapp/src/test/java/sonia/scm/repository/XmlRepositoryManagerTest.java b/scm-webapp/src/test/java/sonia/scm/repository/XmlRepositoryManagerTest.java index 98046267fe..16ad325518 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/XmlRepositoryManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/XmlRepositoryManagerTest.java @@ -36,10 +36,10 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import sonia.scm.Manager; -import sonia.scm.util.MockUtil; import sonia.scm.repository.xml.XmlRepositoryManager; import sonia.scm.store.JAXBStoreFactory; import sonia.scm.store.StoreFactory; +import sonia.scm.util.MockUtil; //~--- JDK imports ------------------------------------------------------------ @@ -68,7 +68,8 @@ public class XmlRepositoryManagerTest extends RepositoryManagerTestBase factory.init(contextProvider); handlerSet.add(new DummyRepositoryHandler(factory)); - return new XmlRepositoryManager(MockUtil.getAdminSecurityContextProvider(), + return new XmlRepositoryManager(contextProvider, + MockUtil.getAdminSecurityContextProvider(), factory, handlerSet); } } From 4392e309d16dd1f358cd9715476b5ca6920af96f Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 14:44:47 +0100 Subject: [PATCH 16/25] user guice provider instead of jax-rs context --- .../api/rest/resources/AuthenticationResource.java | 1 - .../scm/api/rest/resources/RepositoryResource.java | 12 +++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java index 3fc33f20c7..fe1eb95dc7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java @@ -43,7 +43,6 @@ import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; import sonia.scm.ScmState; -import sonia.scm.Type; import sonia.scm.repository.RepositoryManager; import sonia.scm.user.User; import sonia.scm.web.security.WebSecurityContext; diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java index 14d212766f..923102bd44 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java @@ -59,7 +59,6 @@ import java.util.Collection; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Path; -import javax.ws.rs.core.Context; /** * @@ -82,15 +81,18 @@ public class RepositoryResource extends AbstractResource * @param configuration * @param repositoryManager * @param securityContextProvider + * @param requestProvider */ @Inject public RepositoryResource( ScmConfiguration configuration, RepositoryManager repositoryManager, - Provider securityContextProvider) + Provider securityContextProvider, + Provider requestProvider) { this.configuration = configuration; this.repositoryManager = repositoryManager; this.securityContextProvider = securityContextProvider; + this.requestProvider = requestProvider; } //~--- methods -------------------------------------------------------------- @@ -227,6 +229,7 @@ public class RepositoryResource extends AbstractResource if (handler != null) { + HttpServletRequest request = requestProvider.get(); StringBuilder url = new StringBuilder(request.getScheme()); url.append("://").append(configuration.getServername()); @@ -290,9 +293,8 @@ public class RepositoryResource extends AbstractResource /** Field description */ private RepositoryManager repositoryManager; - /** TODO path request direct to method */ - @Context - private HttpServletRequest request; + /** Field description */ + private Provider requestProvider; /** Field description */ private Provider securityContextProvider; From 578d6bc97df94b2dbadd400a4c28c0a5be1e146e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 15:06:58 +0100 Subject: [PATCH 17/25] fix some potential bugs --- .../java/sonia/scm/plugin/PluginVersion.java | 91 +++++++++++++++++++ .../AbstractSimpleRepositoryHandler.java | 13 --- .../sonia/scm/repository/PermissionUtil.java | 12 +-- .../resources/ResourceHandlerComparator.java | 10 +- .../src/main/java/sonia/scm/util/IOUtil.java | 12 ++- .../java/sonia/scm/web/cgi/CGIRunner.java | 2 - .../sonia/scm/BindingExtensionProcessor.java | 6 +- .../api/rest/resources/PluginResource.java | 1 - .../sonia/scm/group/xml/XmlGroupManager.java | 1 - .../sonia/scm/plugin/AetherPluginHandler.java | 11 +-- .../scm/plugin/OverviewPluginFilter.java | 3 +- 11 files changed, 124 insertions(+), 38 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java b/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java index 4100aa5f90..78d81e24c7 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginVersion.java @@ -176,6 +176,97 @@ public class PluginVersion implements Comparable return result; } + /** + * Method description + * + * + * @param obj + * + * @return + */ + @Override + public boolean equals(Object obj) + { + if (obj == null) + { + return false; + } + + if (getClass() != obj.getClass()) + { + return false; + } + + final PluginVersion other = (PluginVersion) obj; + + if (this.maintenance != other.maintenance) + { + return false; + } + + if (this.major != other.major) + { + return false; + } + + if (this.minor != other.minor) + { + return false; + } + + if ((this.parsedVersion == null) + ? (other.parsedVersion != null) + : !this.parsedVersion.equals(other.parsedVersion)) + { + return false; + } + + if (this.snapshot != other.snapshot) + { + return false; + } + + if (this.type != other.type) + { + return false; + } + + if (this.typeVersion != other.typeVersion) + { + return false; + } + + return true; + } + + /** + * Method description + * + * + * @return + */ + @Override + public int hashCode() + { + int hash = 5; + + hash = 61 * hash + this.maintenance; + hash = 61 * hash + this.major; + hash = 61 * hash + this.minor; + hash = 61 * hash + ((this.parsedVersion != null) + ? this.parsedVersion.hashCode() + : 0); + hash = 61 * hash + (this.snapshot + ? 1 + : 0); + hash = 61 * hash + ((this.type != null) + ? this.type.hashCode() + : 0); + hash = 61 * hash + this.typeVersion; + + return hash; + } + /** * Method description * diff --git a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java index 80b2bdf4af..9feabcbc84 100644 --- a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java @@ -39,7 +39,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ConfigurationException; -import sonia.scm.SCMContextProvider; import sonia.scm.io.CommandResult; import sonia.scm.io.ExtendedCommand; import sonia.scm.io.FileSystem; @@ -155,18 +154,6 @@ public abstract class AbstractSimpleRepositoryHandler= pt.getValue())) + if (((name != null) && (p.getType().getValue() >= pt.getValue())) + && (name.equals(username) + || (p.isGroupPermission() && groups.contains(p.getName())))) { - if (name.equals(username) - || (p.isGroupPermission() && groups.contains(p.getName()))) - { - result = true; + result = true; - break; - } + break; } } diff --git a/scm-core/src/main/java/sonia/scm/resources/ResourceHandlerComparator.java b/scm-core/src/main/java/sonia/scm/resources/ResourceHandlerComparator.java index d1e30f0780..c818eb6c73 100644 --- a/scm-core/src/main/java/sonia/scm/resources/ResourceHandlerComparator.java +++ b/scm-core/src/main/java/sonia/scm/resources/ResourceHandlerComparator.java @@ -39,15 +39,23 @@ import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ +import java.io.Serializable; + import java.util.Comparator; /** * * @author Sebastian Sdorra */ -public class ResourceHandlerComparator implements Comparator +public class ResourceHandlerComparator + implements Comparator, Serializable { + /** Field description */ + private static final long serialVersionUID = -1760229246326556762L; + + //~--- methods -------------------------------------------------------------- + /** * Method description * diff --git a/scm-core/src/main/java/sonia/scm/util/IOUtil.java b/scm-core/src/main/java/sonia/scm/util/IOUtil.java index 5805d8c9e4..9c9afa55bb 100644 --- a/scm-core/src/main/java/sonia/scm/util/IOUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/IOUtil.java @@ -66,10 +66,10 @@ public class IOUtil { /** Field description */ - public static final String DEFAULT_CHECKPARAMETER = "--version"; + private static final String DEFAULT_CHECKPARAMETER = "--version"; /** Field description */ - public static final String[] DEFAULT_PATH = new String[] + private static final String[] DEFAULT_PATH = new String[] { // default path @@ -336,7 +336,13 @@ public class IOUtil cmdPath = cmd; } } - catch (IOException ex) {} + catch (IOException ex) + { + if (logger.isTraceEnabled()) + { + logger.trace("could not execute command", ex); + } + } if (cmdPath == null) { diff --git a/scm-core/src/main/java/sonia/scm/web/cgi/CGIRunner.java b/scm-core/src/main/java/sonia/scm/web/cgi/CGIRunner.java index 9aabdf7a85..3a113fda7e 100644 --- a/scm-core/src/main/java/sonia/scm/web/cgi/CGIRunner.java +++ b/scm-core/src/main/java/sonia/scm/web/cgi/CGIRunner.java @@ -47,9 +47,7 @@ import sonia.scm.util.Util; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.util.Enumeration; diff --git a/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java b/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java index 570cdb74d5..e702940776 100644 --- a/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java @@ -208,7 +208,11 @@ public class BindingExtensionProcessor implements ExtensionProcessor binder.bind(extensionClass); } } - catch (Exception ex) + catch (IllegalAccessException ex) + { + logger.error(ex.getMessage(), ex); + } + catch (InstantiationException ex) { logger.error(ex.getMessage(), ex); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java index 9e9badb373..f021f1b057 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java @@ -41,7 +41,6 @@ import com.google.inject.Singleton; import sonia.scm.plugin.DefaultPluginManager; import sonia.scm.plugin.OverviewPluginFilter; import sonia.scm.plugin.PluginInformation; -import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-webapp/src/main/java/sonia/scm/group/xml/XmlGroupManager.java b/scm-webapp/src/main/java/sonia/scm/group/xml/XmlGroupManager.java index 9a6a747e12..f83b69a03c 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/xml/XmlGroupManager.java +++ b/scm-webapp/src/main/java/sonia/scm/group/xml/XmlGroupManager.java @@ -60,7 +60,6 @@ import java.io.IOException; import java.util.Collection; import java.util.LinkedList; -import java.util.Set; /** * diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java b/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java index fb54acdc3b..a30e5f64ec 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java @@ -167,8 +167,6 @@ public class AetherPluginHandler List dependencies = getInstalledDependencies(null); collectDependencies(dependency, dependencies); - - } /** @@ -364,13 +362,10 @@ public class AetherPluginHandler { String id = plugin.getId(); - if ((skipId == null) ||!id.equals(skipId)) + if (Util.isNotEmpty(id) && ((skipId == null) ||!id.equals(skipId))) { - if (Util.isNotEmpty(id)) - { - dependencies.add(new Dependency(new DefaultArtifact(id), - PLUGIN_SCOPE)); - } + dependencies.add(new Dependency(new DefaultArtifact(id), + PLUGIN_SCOPE)); } } } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/OverviewPluginFilter.java b/scm-webapp/src/main/java/sonia/scm/plugin/OverviewPluginFilter.java index 7b3aded4c3..bd9c8d9732 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/OverviewPluginFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/OverviewPluginFilter.java @@ -41,7 +41,8 @@ public class OverviewPluginFilter implements PluginFilter { /** Field description */ - public static OverviewPluginFilter INSTANCE = new OverviewPluginFilter(); + public static final OverviewPluginFilter INSTANCE = + new OverviewPluginFilter(); //~--- methods -------------------------------------------------------------- From db914137869b096e68b4fb7aab1ead742e2b6994 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 15:38:25 +0100 Subject: [PATCH 18/25] set versions to 1.0-M7 --- maven/pom.xml | 6 ++-- maven/scm-plugin-archetype/pom.xml | 4 +-- .../resources/archetype-resources/pom.xml | 4 +-- plugins/pom.xml | 6 ++-- .../scm-activedirectory-auth-plugin/pom.xml | 6 ++-- plugins/scm-auth-ldap-plugin/pom.xml | 6 ++-- plugins/scm-bzr-plugin/pom.xml | 4 +-- plugins/scm-git-plugin/pom.xml | 6 ++-- plugins/scm-graph-plugin/pom.xml | 4 +-- plugins/scm-hg-plugin/pom.xml | 6 ++-- plugins/scm-pam-plugin/pom.xml | 4 +-- plugins/scm-svn-plugin/pom.xml | 6 ++-- pom.xml | 2 +- samples/pom.xml | 4 +-- samples/scm-sample-auth/pom.xml | 6 ++-- samples/scm-sample-hello/pom.xml | 6 ++-- scm-core/pom.xml | 4 +-- scm-server-api/pom.xml | 4 +-- scm-server-jetty/pom.xml | 6 ++-- scm-server/pom.xml | 8 +++--- scm-test/pom.xml | 6 ++-- scm-webapp/pom.xml | 28 +++++++++---------- third-party/pom.xml | 4 +-- third-party/shared-libs/pom.xml | 4 +-- third-party/svnkit-dav/pom.xml | 2 +- 25 files changed, 73 insertions(+), 73 deletions(-) diff --git a/maven/pom.xml b/maven/pom.xml index 5a802c3e9b..4f5981794d 100644 --- a/maven/pom.xml +++ b/maven/pom.xml @@ -6,13 +6,13 @@ sonia.scm scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.maven scm-maven-plugins pom - 1.0-M7-SNAPSHOT + 1.0-M7 scm-maven-plugins @@ -24,7 +24,7 @@ sonia.scm scm-core - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/maven/scm-plugin-archetype/pom.xml b/maven/scm-plugin-archetype/pom.xml index 21c440dc97..bfe72ad51b 100644 --- a/maven/scm-plugin-archetype/pom.xml +++ b/maven/scm-plugin-archetype/pom.xml @@ -7,12 +7,12 @@ scm-maven-plugins sonia.scm.maven - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.maven scm-plugin-archetype - 1.0-M7-SNAPSHOT + 1.0-M7 scm-plugin-archetype diff --git a/maven/scm-plugin-archetype/src/main/resources/archetype-resources/pom.xml b/maven/scm-plugin-archetype/src/main/resources/archetype-resources/pom.xml index 97f5e991f8..9138dcc7c7 100644 --- a/maven/scm-plugin-archetype/src/main/resources/archetype-resources/pom.xml +++ b/maven/scm-plugin-archetype/src/main/resources/archetype-resources/pom.xml @@ -7,7 +7,7 @@ scm-plugins sonia.scm.plugins - 1.0-M7-SNAPSHOT + 1.0-M7 ${groupId} @@ -31,7 +31,7 @@ sonia.scm scm-test - 1.0-M7-SNAPSHOT + 1.0-M7 test diff --git a/plugins/pom.xml b/plugins/pom.xml index b633839dcb..a1be45ecc1 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -6,13 +6,13 @@ sonia.scm scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-plugins pom - 1.0-M7-SNAPSHOT + 1.0-M7 scm-plugins @@ -31,7 +31,7 @@ sonia.scm scm-core - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/plugins/scm-activedirectory-auth-plugin/pom.xml b/plugins/scm-activedirectory-auth-plugin/pom.xml index f7cd9227c9..7d102bd9ec 100644 --- a/plugins/scm-activedirectory-auth-plugin/pom.xml +++ b/plugins/scm-activedirectory-auth-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-activedirectory-auth-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 scm-activedirectory-auth-plugin https://bitbucket.org/sdorra/scm-manager @@ -32,7 +32,7 @@ sonia.scm scm-core - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/plugins/scm-auth-ldap-plugin/pom.xml b/plugins/scm-auth-ldap-plugin/pom.xml index 65e4420914..73b2673f64 100644 --- a/plugins/scm-auth-ldap-plugin/pom.xml +++ b/plugins/scm-auth-ldap-plugin/pom.xml @@ -6,13 +6,13 @@ scm-plugins sonia.scm.plugins - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-auth-ldap-plugin jar - 1.0-M7-SNAPSHOT + 1.0-M7 ${project.artifactId} plugin description @@ -30,7 +30,7 @@ sonia.scm scm-test - 1.0-M7-SNAPSHOT + 1.0-M7 test diff --git a/plugins/scm-bzr-plugin/pom.xml b/plugins/scm-bzr-plugin/pom.xml index d8d6b7dd76..4e746beba4 100644 --- a/plugins/scm-bzr-plugin/pom.xml +++ b/plugins/scm-bzr-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-bzr-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 scm-bzr-plugin https://bitbucket.org/sdorra/scm-manager Plugin for the version control system Bazaar diff --git a/plugins/scm-git-plugin/pom.xml b/plugins/scm-git-plugin/pom.xml index 6aa87c9280..1e8a09646e 100644 --- a/plugins/scm-git-plugin/pom.xml +++ b/plugins/scm-git-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-git-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 scm-git-plugin https://bitbucket.org/sdorra/scm-manager Plugin for the version control system Git @@ -50,7 +50,7 @@ sonia.scm scm-test - 1.0-M7-SNAPSHOT + 1.0-M7 test diff --git a/plugins/scm-graph-plugin/pom.xml b/plugins/scm-graph-plugin/pom.xml index 352544b356..e88dfe0d78 100644 --- a/plugins/scm-graph-plugin/pom.xml +++ b/plugins/scm-graph-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-graph-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 scm-graph-plugin Creates an Google Guice injection graph https://bitbucket.org/sdorra/scm-manager diff --git a/plugins/scm-hg-plugin/pom.xml b/plugins/scm-hg-plugin/pom.xml index f573a55056..042c012fe2 100644 --- a/plugins/scm-hg-plugin/pom.xml +++ b/plugins/scm-hg-plugin/pom.xml @@ -7,12 +7,12 @@ sonia.scm.plugins scm-plugins - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-hg-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 scm-hg-plugin https://bitbucket.org/sdorra/scm-manager Plugin for the version control system Mercurial @@ -37,7 +37,7 @@ sonia.scm scm-test - 1.0-M7-SNAPSHOT + 1.0-M7 test diff --git a/plugins/scm-pam-plugin/pom.xml b/plugins/scm-pam-plugin/pom.xml index 62d1dd1470..2ce4112202 100644 --- a/plugins/scm-pam-plugin/pom.xml +++ b/plugins/scm-pam-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-pam-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 scm-pam-plugin https://bitbucket.org/sdorra/scm-manager Using pam as an authentication handler. diff --git a/plugins/scm-svn-plugin/pom.xml b/plugins/scm-svn-plugin/pom.xml index b96cf290cb..248540c774 100644 --- a/plugins/scm-svn-plugin/pom.xml +++ b/plugins/scm-svn-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-svn-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 scm-svn-plugin https://bitbucket.org/sdorra/scm-manager Plugin for the version control system Subversion @@ -47,7 +47,7 @@ sonia.scm scm-test - 1.0-M7-SNAPSHOT + 1.0-M7 test diff --git a/pom.xml b/pom.xml index 43aa695f6e..adb840fb2a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ sonia.scm scm pom - 1.0-M7-SNAPSHOT + 1.0-M7 The easiest way to share your Git, Mercurial and Subversion repositories over http. diff --git a/samples/pom.xml b/samples/pom.xml index 59ba3607d3..86f59402e9 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -6,13 +6,13 @@ sonia.scm scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.samples scm-samples pom - 1.0-M7-SNAPSHOT + 1.0-M7 scm-samples diff --git a/samples/scm-sample-auth/pom.xml b/samples/scm-sample-auth/pom.xml index 2ec3b8fdc8..2fa0ad66fe 100644 --- a/samples/scm-sample-auth/pom.xml +++ b/samples/scm-sample-auth/pom.xml @@ -7,12 +7,12 @@ scm-samples sonia.scm.samples - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.sample scm-sample-auth - 1.0-M7-SNAPSHOT + 1.0-M7 scm-sample-auth Sample Authentication Plugin https://bitbucket.org/sdorra/scm-manager @@ -29,7 +29,7 @@ sonia.scm scm-core - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/samples/scm-sample-hello/pom.xml b/samples/scm-sample-hello/pom.xml index 9e4415ab2f..506c8d6ac6 100644 --- a/samples/scm-sample-hello/pom.xml +++ b/samples/scm-sample-hello/pom.xml @@ -7,12 +7,12 @@ scm-samples sonia.scm.samples - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.sample scm-sample-hello - 1.0-M7-SNAPSHOT + 1.0-M7 scm-sample-hello A simple hello world plugin https://bitbucket.org/sdorra/scm-manager @@ -29,7 +29,7 @@ sonia.scm scm-core - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/scm-core/pom.xml b/scm-core/pom.xml index 402fe938e5..27af159411 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm scm-core - 1.0-M7-SNAPSHOT + 1.0-M7 scm-core diff --git a/scm-server-api/pom.xml b/scm-server-api/pom.xml index 11a997ae89..79cf644811 100644 --- a/scm-server-api/pom.xml +++ b/scm-server-api/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm scm-server-api - 1.0-M7-SNAPSHOT + 1.0-M7 scm-server-api diff --git a/scm-server-jetty/pom.xml b/scm-server-jetty/pom.xml index f5afddbc99..ea6e135670 100644 --- a/scm-server-jetty/pom.xml +++ b/scm-server-jetty/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm scm-server-jetty - 1.0-M7-SNAPSHOT + 1.0-M7 scm-server-jetty @@ -20,7 +20,7 @@ sonia.scm scm-server-api - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/scm-server/pom.xml b/scm-server/pom.xml index 45fa99d4ca..49945d7883 100644 --- a/scm-server/pom.xml +++ b/scm-server/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm scm-server - 1.0-M7-SNAPSHOT + 1.0-M7 scm-server pom @@ -21,13 +21,13 @@ sonia.scm scm-server-api - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm scm-server-jetty - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/scm-test/pom.xml b/scm-test/pom.xml index cb58d9fe39..d8c5e80617 100644 --- a/scm-test/pom.xml +++ b/scm-test/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm scm-test - 1.0-M7-SNAPSHOT + 1.0-M7 scm-test @@ -26,7 +26,7 @@ sonia.scm scm-core - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index b0327068f8..856f2718f6 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -7,13 +7,13 @@ sonia.scm scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm scm-webapp war - 1.0-M7-SNAPSHOT + 1.0-M7 scm-webapp @@ -28,25 +28,25 @@ sonia.scm scm-core - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-hg-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-svn-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-git-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 @@ -164,7 +164,7 @@ sonia.scm scm-test - 1.0-M7-SNAPSHOT + 1.0-M7 test @@ -287,43 +287,43 @@ sonia.scm.plugins scm-graph-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.sample scm-sample-auth - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.sample scm-sample-hello - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-activedirectory-auth-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-pam-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-bzr-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.plugins scm-auth-ldap-plugin - 1.0-M7-SNAPSHOT + 1.0-M7 diff --git a/third-party/pom.xml b/third-party/pom.xml index f72dd7eb27..14333e49f6 100644 --- a/third-party/pom.xml +++ b/third-party/pom.xml @@ -6,13 +6,13 @@ sonia.scm scm - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.third-party sonia.scm.third-party pom - 1.0-M7-SNAPSHOT + 1.0-M7 third-party diff --git a/third-party/shared-libs/pom.xml b/third-party/shared-libs/pom.xml index 120d7b2924..a81aa1f6cb 100644 --- a/third-party/shared-libs/pom.xml +++ b/third-party/shared-libs/pom.xml @@ -6,13 +6,13 @@ sonia.scm.third-party sonia.scm.third-party - 1.0-M7-SNAPSHOT + 1.0-M7 sonia.scm.third-party shared-libs pom - 1.0-M7-SNAPSHOT + 1.0-M7 shared-libs diff --git a/third-party/svnkit-dav/pom.xml b/third-party/svnkit-dav/pom.xml index 0867adf1b4..31fee5868f 100644 --- a/third-party/svnkit-dav/pom.xml +++ b/third-party/svnkit-dav/pom.xml @@ -6,7 +6,7 @@ sonia.scm.third-party sonia.scm.third-party - 1.0-M7-SNAPSHOT + 1.0-M7 org.tmatesoft.svnkit From c69159f4be5c70cc78d55755211a088825601f1d Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 15:38:37 +0100 Subject: [PATCH 19/25] Added tag 1.0 M7 for changeset ae344df2ac88 From 037267e983ee07d805b9a5a38c046aa0906437b1 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 30 Jan 2011 15:42:25 +0100 Subject: [PATCH 20/25] set versions to 1.0-RC1-SNAPSHOT --- maven/pom.xml | 6 ++-- maven/scm-plugin-archetype/pom.xml | 4 +-- .../resources/archetype-resources/pom.xml | 4 +-- plugins/pom.xml | 6 ++-- .../scm-activedirectory-auth-plugin/pom.xml | 6 ++-- plugins/scm-auth-ldap-plugin/pom.xml | 6 ++-- plugins/scm-bzr-plugin/pom.xml | 4 +-- plugins/scm-git-plugin/pom.xml | 6 ++-- plugins/scm-graph-plugin/pom.xml | 4 +-- plugins/scm-hg-plugin/pom.xml | 6 ++-- plugins/scm-pam-plugin/pom.xml | 4 +-- plugins/scm-svn-plugin/pom.xml | 6 ++-- pom.xml | 2 +- samples/pom.xml | 4 +-- samples/scm-sample-auth/pom.xml | 6 ++-- samples/scm-sample-hello/pom.xml | 6 ++-- scm-core/pom.xml | 4 +-- scm-server-api/pom.xml | 4 +-- scm-server-jetty/pom.xml | 6 ++-- scm-server/pom.xml | 8 +++--- scm-test/pom.xml | 6 ++-- scm-webapp/pom.xml | 28 +++++++++---------- third-party/pom.xml | 4 +-- third-party/shared-libs/pom.xml | 4 +-- third-party/svnkit-dav/pom.xml | 2 +- 25 files changed, 73 insertions(+), 73 deletions(-) diff --git a/maven/pom.xml b/maven/pom.xml index 4f5981794d..10bf3a97cc 100644 --- a/maven/pom.xml +++ b/maven/pom.xml @@ -6,13 +6,13 @@ sonia.scm scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.maven scm-maven-plugins pom - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-maven-plugins @@ -24,7 +24,7 @@ sonia.scm scm-core - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/maven/scm-plugin-archetype/pom.xml b/maven/scm-plugin-archetype/pom.xml index bfe72ad51b..1b91f0b137 100644 --- a/maven/scm-plugin-archetype/pom.xml +++ b/maven/scm-plugin-archetype/pom.xml @@ -7,12 +7,12 @@ scm-maven-plugins sonia.scm.maven - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.maven scm-plugin-archetype - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-plugin-archetype diff --git a/maven/scm-plugin-archetype/src/main/resources/archetype-resources/pom.xml b/maven/scm-plugin-archetype/src/main/resources/archetype-resources/pom.xml index 9138dcc7c7..edeb3f16d4 100644 --- a/maven/scm-plugin-archetype/src/main/resources/archetype-resources/pom.xml +++ b/maven/scm-plugin-archetype/src/main/resources/archetype-resources/pom.xml @@ -7,7 +7,7 @@ scm-plugins sonia.scm.plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT ${groupId} @@ -31,7 +31,7 @@ sonia.scm scm-test - 1.0-M7 + 1.0-RC1-SNAPSHOT test diff --git a/plugins/pom.xml b/plugins/pom.xml index a1be45ecc1..3062665774 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -6,13 +6,13 @@ sonia.scm scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-plugins pom - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-plugins @@ -31,7 +31,7 @@ sonia.scm scm-core - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/plugins/scm-activedirectory-auth-plugin/pom.xml b/plugins/scm-activedirectory-auth-plugin/pom.xml index 7d102bd9ec..cebd3b1226 100644 --- a/plugins/scm-activedirectory-auth-plugin/pom.xml +++ b/plugins/scm-activedirectory-auth-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-activedirectory-auth-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-activedirectory-auth-plugin https://bitbucket.org/sdorra/scm-manager @@ -32,7 +32,7 @@ sonia.scm scm-core - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/plugins/scm-auth-ldap-plugin/pom.xml b/plugins/scm-auth-ldap-plugin/pom.xml index 73b2673f64..a87456d8cd 100644 --- a/plugins/scm-auth-ldap-plugin/pom.xml +++ b/plugins/scm-auth-ldap-plugin/pom.xml @@ -6,13 +6,13 @@ scm-plugins sonia.scm.plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-auth-ldap-plugin jar - 1.0-M7 + 1.0-RC1-SNAPSHOT ${project.artifactId} plugin description @@ -30,7 +30,7 @@ sonia.scm scm-test - 1.0-M7 + 1.0-RC1-SNAPSHOT test diff --git a/plugins/scm-bzr-plugin/pom.xml b/plugins/scm-bzr-plugin/pom.xml index 4e746beba4..1969825f3f 100644 --- a/plugins/scm-bzr-plugin/pom.xml +++ b/plugins/scm-bzr-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-bzr-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-bzr-plugin https://bitbucket.org/sdorra/scm-manager Plugin for the version control system Bazaar diff --git a/plugins/scm-git-plugin/pom.xml b/plugins/scm-git-plugin/pom.xml index 1e8a09646e..bafc8c2b56 100644 --- a/plugins/scm-git-plugin/pom.xml +++ b/plugins/scm-git-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-git-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-git-plugin https://bitbucket.org/sdorra/scm-manager Plugin for the version control system Git @@ -50,7 +50,7 @@ sonia.scm scm-test - 1.0-M7 + 1.0-RC1-SNAPSHOT test diff --git a/plugins/scm-graph-plugin/pom.xml b/plugins/scm-graph-plugin/pom.xml index e88dfe0d78..98308b314d 100644 --- a/plugins/scm-graph-plugin/pom.xml +++ b/plugins/scm-graph-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-graph-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-graph-plugin Creates an Google Guice injection graph https://bitbucket.org/sdorra/scm-manager diff --git a/plugins/scm-hg-plugin/pom.xml b/plugins/scm-hg-plugin/pom.xml index 042c012fe2..cb5d7278ce 100644 --- a/plugins/scm-hg-plugin/pom.xml +++ b/plugins/scm-hg-plugin/pom.xml @@ -7,12 +7,12 @@ sonia.scm.plugins scm-plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-hg-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-hg-plugin https://bitbucket.org/sdorra/scm-manager Plugin for the version control system Mercurial @@ -37,7 +37,7 @@ sonia.scm scm-test - 1.0-M7 + 1.0-RC1-SNAPSHOT test diff --git a/plugins/scm-pam-plugin/pom.xml b/plugins/scm-pam-plugin/pom.xml index 2ce4112202..59a0020fdd 100644 --- a/plugins/scm-pam-plugin/pom.xml +++ b/plugins/scm-pam-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-pam-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-pam-plugin https://bitbucket.org/sdorra/scm-manager Using pam as an authentication handler. diff --git a/plugins/scm-svn-plugin/pom.xml b/plugins/scm-svn-plugin/pom.xml index 248540c774..5e18860803 100644 --- a/plugins/scm-svn-plugin/pom.xml +++ b/plugins/scm-svn-plugin/pom.xml @@ -7,12 +7,12 @@ scm-plugins sonia.scm.plugins - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-svn-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-svn-plugin https://bitbucket.org/sdorra/scm-manager Plugin for the version control system Subversion @@ -47,7 +47,7 @@ sonia.scm scm-test - 1.0-M7 + 1.0-RC1-SNAPSHOT test diff --git a/pom.xml b/pom.xml index adb840fb2a..dc4bbb6dc0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ sonia.scm scm pom - 1.0-M7 + 1.0-RC1-SNAPSHOT The easiest way to share your Git, Mercurial and Subversion repositories over http. diff --git a/samples/pom.xml b/samples/pom.xml index 86f59402e9..598d7e3cbb 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -6,13 +6,13 @@ sonia.scm scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.samples scm-samples pom - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-samples diff --git a/samples/scm-sample-auth/pom.xml b/samples/scm-sample-auth/pom.xml index 2fa0ad66fe..6b2f8233fb 100644 --- a/samples/scm-sample-auth/pom.xml +++ b/samples/scm-sample-auth/pom.xml @@ -7,12 +7,12 @@ scm-samples sonia.scm.samples - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.sample scm-sample-auth - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-sample-auth Sample Authentication Plugin https://bitbucket.org/sdorra/scm-manager @@ -29,7 +29,7 @@ sonia.scm scm-core - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/samples/scm-sample-hello/pom.xml b/samples/scm-sample-hello/pom.xml index 506c8d6ac6..fa6231636e 100644 --- a/samples/scm-sample-hello/pom.xml +++ b/samples/scm-sample-hello/pom.xml @@ -7,12 +7,12 @@ scm-samples sonia.scm.samples - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.sample scm-sample-hello - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-sample-hello A simple hello world plugin https://bitbucket.org/sdorra/scm-manager @@ -29,7 +29,7 @@ sonia.scm scm-core - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/scm-core/pom.xml b/scm-core/pom.xml index 27af159411..0c2a6a7e6b 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm scm-core - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-core diff --git a/scm-server-api/pom.xml b/scm-server-api/pom.xml index 79cf644811..fdc01269f4 100644 --- a/scm-server-api/pom.xml +++ b/scm-server-api/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm scm-server-api - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-server-api diff --git a/scm-server-jetty/pom.xml b/scm-server-jetty/pom.xml index ea6e135670..d45a8ff001 100644 --- a/scm-server-jetty/pom.xml +++ b/scm-server-jetty/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm scm-server-jetty - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-server-jetty @@ -20,7 +20,7 @@ sonia.scm scm-server-api - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/scm-server/pom.xml b/scm-server/pom.xml index 49945d7883..ad247a833f 100644 --- a/scm-server/pom.xml +++ b/scm-server/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm scm-server - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-server pom @@ -21,13 +21,13 @@ sonia.scm scm-server-api - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm scm-server-jetty - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/scm-test/pom.xml b/scm-test/pom.xml index d8c5e80617..12e562c1a2 100644 --- a/scm-test/pom.xml +++ b/scm-test/pom.xml @@ -7,12 +7,12 @@ scm sonia.scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm scm-test - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-test @@ -26,7 +26,7 @@ sonia.scm scm-core - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 856f2718f6..f1668f8746 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -7,13 +7,13 @@ sonia.scm scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm scm-webapp war - 1.0-M7 + 1.0-RC1-SNAPSHOT scm-webapp @@ -28,25 +28,25 @@ sonia.scm scm-core - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-hg-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-svn-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-git-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT @@ -164,7 +164,7 @@ sonia.scm scm-test - 1.0-M7 + 1.0-RC1-SNAPSHOT test @@ -287,43 +287,43 @@ sonia.scm.plugins scm-graph-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.sample scm-sample-auth - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.sample scm-sample-hello - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-activedirectory-auth-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-pam-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-bzr-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.plugins scm-auth-ldap-plugin - 1.0-M7 + 1.0-RC1-SNAPSHOT diff --git a/third-party/pom.xml b/third-party/pom.xml index 14333e49f6..ec5d022314 100644 --- a/third-party/pom.xml +++ b/third-party/pom.xml @@ -6,13 +6,13 @@ sonia.scm scm - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.third-party sonia.scm.third-party pom - 1.0-M7 + 1.0-RC1-SNAPSHOT third-party diff --git a/third-party/shared-libs/pom.xml b/third-party/shared-libs/pom.xml index a81aa1f6cb..59134295b3 100644 --- a/third-party/shared-libs/pom.xml +++ b/third-party/shared-libs/pom.xml @@ -6,13 +6,13 @@ sonia.scm.third-party sonia.scm.third-party - 1.0-M7 + 1.0-RC1-SNAPSHOT sonia.scm.third-party shared-libs pom - 1.0-M7 + 1.0-RC1-SNAPSHOT shared-libs diff --git a/third-party/svnkit-dav/pom.xml b/third-party/svnkit-dav/pom.xml index 31fee5868f..2213ac2103 100644 --- a/third-party/svnkit-dav/pom.xml +++ b/third-party/svnkit-dav/pom.xml @@ -6,7 +6,7 @@ sonia.scm.third-party sonia.scm.third-party - 1.0-M7 + 1.0-RC1-SNAPSHOT org.tmatesoft.svnkit From 927b6636dbc75fbdbd82407e04a11db0723d820f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Pitucha?= Date: Mon, 31 Jan 2011 04:14:01 +0000 Subject: [PATCH 21/25] add basic group support to the ldap plugin --- .../auth/ldap/LDAPAuthenticationHandler.java | 41 ++++++++++++++++++- .../java/sonia/scm/auth/ldap/LDAPConfig.java | 7 ++++ .../sonia/scm/auth/ldap/sonia.ldap.js | 6 +++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/plugins/scm-auth-ldap-plugin/src/main/java/sonia/scm/auth/ldap/LDAPAuthenticationHandler.java b/plugins/scm-auth-ldap-plugin/src/main/java/sonia/scm/auth/ldap/LDAPAuthenticationHandler.java index 5c81c211a8..3037fb248d 100644 --- a/plugins/scm-auth-ldap-plugin/src/main/java/sonia/scm/auth/ldap/LDAPAuthenticationHandler.java +++ b/plugins/scm-auth-ldap-plugin/src/main/java/sonia/scm/auth/ldap/LDAPAuthenticationHandler.java @@ -49,6 +49,7 @@ import sonia.scm.user.User; import sonia.scm.util.AssertUtil; import sonia.scm.web.security.AuthenticationHandler; import sonia.scm.web.security.AuthenticationResult; +import sonia.scm.web.security.AuthenticationState; //~--- JDK imports ------------------------------------------------------------ @@ -56,11 +57,14 @@ import java.io.IOException; import java.text.MessageFormat; +import java.util.HashSet; import java.util.Properties; +import java.util.Set; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; +import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; @@ -133,7 +137,8 @@ public class LDAPAuthenticationHandler implements AuthenticationHandler searchControls.setCountLimit(1); searchControls.setReturningAttributes(new String[] { config.getAttributeNameId(), - config.getAttributeNameFullname(), config.getAttributeNameMail() }); + config.getAttributeNameFullname(), config.getAttributeNameMail(), + config.getAttributeNameGroup() }); String filter = MessageFormat.format(config.getSearchFilter(), username); String baseDn = config.getUnitPeople() + "," + config.getBaseDn(); @@ -172,7 +177,10 @@ public class LDAPAuthenticationHandler implements AuthenticationHandler (String) userAttributes.get( config.getAttributeNameMail()).get()); user.setType(TYPE); - result = new AuthenticationResult(user); + + Set userGroups = getGroups(userAttributes); + user.setAdmin(isAdmin(userGroups, user)); + result = new AuthenticationResult(user, userGroups); } catch (NamingException ex) { @@ -219,6 +227,35 @@ public class LDAPAuthenticationHandler implements AuthenticationHandler return result; } + private Set getGroups(Attributes userAttributes) throws NamingException { + Set groups = new HashSet(); + + Attribute groupsAttribute = userAttributes.get(config.getAttributeNameGroup()); + if (groupsAttribute != null) { + NamingEnumeration userGroups = (NamingEnumeration) groupsAttribute.getAll(); + while (userGroups.hasMore()) + groups.add((String) userGroups.next()); + + userGroups.close(); + } else { + logger.info("user has no groups assigned"); + } + return groups; + } + + private boolean isAdmin(Set userGroups, User user) throws NamingException { + Set adminGroups = config.getAdminGroupSet(); + for (String group : userGroups) + if (adminGroups.contains(group)) + return true; + + Set adminUsers = config.getAdminUserSet(); + if (adminUsers.contains(user.getName())) + return true; + + return false; + } + /** * Method description * diff --git a/plugins/scm-auth-ldap-plugin/src/main/java/sonia/scm/auth/ldap/LDAPConfig.java b/plugins/scm-auth-ldap-plugin/src/main/java/sonia/scm/auth/ldap/LDAPConfig.java index e2431bed1f..b14de2428d 100644 --- a/plugins/scm-auth-ldap-plugin/src/main/java/sonia/scm/auth/ldap/LDAPConfig.java +++ b/plugins/scm-auth-ldap-plugin/src/main/java/sonia/scm/auth/ldap/LDAPConfig.java @@ -118,6 +118,10 @@ public class LDAPConfig return attributeNameMail; } + public String getAttributeNameGroup() { + return attributeNameGroup; + } + /** * Method description * @@ -306,6 +310,9 @@ public class LDAPConfig /** Field description */ @XmlElement(name = "attribute-name-mail") private String attributeNameMail = "mail"; + + @XmlElement(name = "attribute-name-group") + private String attributeNameGroup = "group"; /** Field description */ @XmlElement(name = "base-dn") diff --git a/plugins/scm-auth-ldap-plugin/src/main/resources/sonia/scm/auth/ldap/sonia.ldap.js b/plugins/scm-auth-ldap-plugin/src/main/resources/sonia/scm/auth/ldap/sonia.ldap.js index 5dc6021193..b8c6ba633d 100644 --- a/plugins/scm-auth-ldap-plugin/src/main/resources/sonia/scm/auth/ldap/sonia.ldap.js +++ b/plugins/scm-auth-ldap-plugin/src/main/resources/sonia/scm/auth/ldap/sonia.ldap.js @@ -69,6 +69,12 @@ registerGeneralConfigPanel({ name : 'attribute-name-mail', allowBlank : true } + ,{ + xtype : 'textfield', + fieldLabel : 'Group Attribute Name', + name : 'attribute-name-group', + allowBlank : true + } ,{ xtype : 'textfield', fieldLabel : 'Base DN', From d15d99dec3375a7e2a5963263c74cdb345b08abf Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 31 Jan 2011 17:52:42 +0100 Subject: [PATCH 22/25] replace welcome tab with repository tab --- .../src/main/webapp/resources/js/sonia.scm.js | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.scm.js b/scm-webapp/src/main/webapp/resources/js/sonia.scm.js index 93bb1ce07b..8b682f2e86 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.scm.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.scm.js @@ -118,7 +118,7 @@ Ext.onReady(function(){ items: [{ label: 'Repositories', fn: function(){ - addTabPanel('repositories', 'repositoryPanel', 'Repositories'); + mainTabPanel.setActiveTab('repositories'); } }] }); @@ -209,20 +209,18 @@ Ext.onReady(function(){ panel.doLayout(); } - function createWelcomePanel(){ + function createRepositoryPanel(){ if ( debug ){ - console.debug('create welcome tab'); + console.debug('create repository panel'); } mainTabPanel.add({ - id: 'welcomeTab', - xtype: 'panel', - title: 'Welcome', - hideMode: 'offsets', - bodyCssClass: 'x-panel-mc', - enableTabScroll: true, + id: 'repositories', + xtype: 'repositoryPanel', + title: 'Repositories', + closeable: false, autoScroll: true }); - mainTabPanel.setActiveTab('welcomeTab'); + mainTabPanel.setActiveTab('repositories'); } // register login callbacks @@ -230,6 +228,6 @@ Ext.onReady(function(){ // create menu loginCallbacks.splice(0, 0, createMainMenu ); // add welcome tab - loginCallbacks.push( createWelcomePanel ); + loginCallbacks.push( createRepositoryPanel ); }); \ No newline at end of file From a5a08f2c87bf37ba4d1e67b3a21d533a6ea7b6f0 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 1 Feb 2011 09:13:35 +0100 Subject: [PATCH 23/25] update jetty to version 7.2.2.v20101205 --- scm-server-jetty/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-server-jetty/pom.xml b/scm-server-jetty/pom.xml index d45a8ff001..c6f573b608 100644 --- a/scm-server-jetty/pom.xml +++ b/scm-server-jetty/pom.xml @@ -38,7 +38,7 @@ - 7.1.6.v20100715 + 7.2.2.v20101205 From 71effd7bff074d8ad9a8c0facbf95b2185ddf504 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 1 Feb 2011 11:22:35 +0100 Subject: [PATCH 24/25] remove unused config attribute svnAccessFile --- .../java/sonia/scm/repository/SvnConfig.java | 33 +------------------ 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfig.java b/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfig.java index 0aedb39fac..829f11d5db 100644 --- a/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfig.java +++ b/plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfig.java @@ -42,35 +42,4 @@ import javax.xml.bind.annotation.XmlRootElement; * @author Sebastian Sdorra */ @XmlRootElement(name = "config") -public class SvnConfig extends SimpleRepositoryConfig -{ - - /** - * Method description - * - * - * @return - */ - public String getSvnAccessFile() - { - return svnAccessFile; - } - - //~--- set methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param svnAccessFile - */ - public void setSvnAccessFile(String svnAccessFile) - { - this.svnAccessFile = svnAccessFile; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private String svnAccessFile; -} +public class SvnConfig extends SimpleRepositoryConfig {} From be0913bb9d0d819df18e82de1636ebb5ff315024 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 1 Feb 2011 11:22:48 +0100 Subject: [PATCH 25/25] remove unused imports --- .../main/java/sonia/scm/ManagerTestBase.java | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/scm-test/src/main/java/sonia/scm/ManagerTestBase.java b/scm-test/src/main/java/sonia/scm/ManagerTestBase.java index 516e44b1bf..5499bc4526 100644 --- a/scm-test/src/main/java/sonia/scm/ManagerTestBase.java +++ b/scm-test/src/main/java/sonia/scm/ManagerTestBase.java @@ -33,28 +33,6 @@ package sonia.scm; -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.inject.Provider; - -import org.junit.After; -import org.junit.Before; - -import sonia.scm.security.SecurityContext; -import sonia.scm.user.User; -import sonia.scm.util.IOUtil; - -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.File; -import java.io.IOException; - -import java.util.UUID; - /** * * @author Sebastian Sdorra