diff --git a/docs/Definition of done.md b/docs/Definition of done.md new file mode 100644 index 0000000000..28744481f2 --- /dev/null +++ b/docs/Definition of done.md @@ -0,0 +1,9 @@ +* Acceptance criteria are checked manually (from the user's perspective) +* Code coverage is checked manually (>= 80% on new code) ([sonarcloud](https://sonarcloud.io/dashboard?id=sonia.scm%3Ascm)) +* The clean code principles are respected ([CleanCode](https://clean-code-developer.com/virtues/)) +* All new code/logic is implemented on the right spot / "Should i do this here?" +* Code of the story/feature/branch is merged to the mainline branch +* Build on mainline branch is green ([Jenkins](https://scm-manager.ci.cloudbees.com/job/scm-manager-2.x/)) +* Integration test, wherever sensible, are implemented +* Code is reviewed according to the 4-eyes-principle (1 implementer, 1 reviewer, based on an average number of eyes per person of around 2) +* Documentation is updated whenever necessary \ No newline at end of file diff --git a/docs/ExtensionPoints.md b/docs/ExtensionPoints.md new file mode 100644 index 0000000000..1bf00a01f8 --- /dev/null +++ b/docs/ExtensionPoints.md @@ -0,0 +1,21 @@ +ExtensionPoints +--------------- + +- [AuthenticationHandler](http://docs.scm-manager.org/apidocs/latest/sonia/scm/web/security/AuthenticationHandler.html "wikilink") +- [AuthenticationListener](http://docs.scm-manager.org/apidocs/latest/sonia/scm/web/security/AuthenticationListener.html "wikilink") +- [ChangesetPreProcessor](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/ChangesetPreProcessor.html "wikilink") +- [ChangesetPreProcessorFactory](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/ChangesetPreProcessorFactory.html "wikilink") +- [ + FileObjectPreProcessor](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/FileObjectPreProcessor.html "wikilink") +- [FileObjectPreProcessorFactory](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/FileObjectPreProcessorFactory.html "wikilink") +- [FileSystem](http://docs.scm-manager.org/apidocs/latest/sonia/scm/io/FileSystem.html "wikilink") +- [GroupListener](http://docs.scm-manager.org/apidocs/latest/sonia/scm/group/GroupListener.html "wikilink") +- [Module](http://google-guice.googlecode.com/svn/tags/3.0/javadoc/com/google/inject/Module.html "wikilink") +- [RepositoryHandler](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/RepositoryHandler.html "wikilink") +- [RepositoryHook](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/RepositoryHook.html "wikilink") +- [RepositoryListener](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/RepositoryListener.html "wikilink") +- [ + RepositoryRequestListener](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/RepositoryRequestListener.html "wikilink") +- [ResourceHandler](http://docs.scm-manager.org/apidocs/latest/sonia/scm/resources/ResourceHandler.html "wikilink") +- [ServletModule](http://google-guice.googlecode.com/svn/tags/3.0/javadoc/com/google/inject/servlet/ServletModule.html "wikilink") +- [UserListener](http://docs.scm-manager.org/apidocs/latest/sonia/scm/user/UserListener.html "wikilink") diff --git a/docs/Home.md b/docs/Home.md new file mode 100644 index 0000000000..559b0c47e4 --- /dev/null +++ b/docs/Home.md @@ -0,0 +1,126 @@ +The easiest way to share and manage your Git, Mercurial and Subversion +repositories over http. + +- Very easy installation +- No need to hack configuration files, SCM-Manager is completely + configureable from its Web-Interface +- No Apache and no database installation is required +- Central user, group and permission management +- Out of the box support for Git, Mercurial and Subversion +- Full RESTFul Web Service API (JSON and XML) +- Rich User Interface +- Simple Plugin API +- Useful plugins available ( f.e. Ldap-, ActiveDirectory-, + PAM-Authentication) +- Licensed under the BSD-License + +Migration to Github +------------------- + +We will soon migrate SCM-Manager to Github, please read +[here](https://www.scm-manager.org/scm-manager-2/migration-to-github/ "wikilink") +for more information. + +### News + +- \*\*2018-09-25\*\* - [SCM-Manager 2 gets a boost by Cloudogu + GmbH](https://www.scm-manager.org/scm-manager-2/scm-manager-2-gets-a-boost-by-cloudogu-gmbh/ "wikilink") +- \*\*2018-05-04\*\* - SCM-Manager 1.60 released + ([download](http://www.scm-manager.org/download/ "wikilink") \| + [release notes](release-notes "wikilink")) +- \*\*2018-04-11\*\* - SCM-Manager 1.59 released + +[All news](http://www.scm-manager.org/news/ "wikilink") + +### Mailing List + +- - + [archive](http://groups.google.com/group/scmmanager "wikilink") \| + [subscribe](mailto:scmmanager+subscribe@googlegroups.com "wikilink") + \| + [unsubscribe](mailto:scmmanager+unsubscribe@googlegroups.com "wikilink") + +### Use SCM-Manager + +- [Getting started](getting-started "wikilink") +- [Download latest + version](http://www.scm-manager.org/download/ "wikilink") +- [FAQ](faq "wikilink") +- [Upgrade SCM-Manager to a newer version](upgrade "wikilink") +- [Download latest snapshot + release](download-snapshot-release "wikilink") +- [Download Archive](download-archive "wikilink") +- [Command line client](command-line-client "wikilink") +- [SCM-Server SSL](scm-server-ssl "wikilink") +- [ApplicationServer + (Tomcat/Glassfish/Jetty)](applicationserver "wikilink") +- [Using SCM-Manager with Apache + mod\_proxy](apache/apache-mod_proxy "wikilink") +- [Using SCM-Manager with Nginx](nginx "wikilink") +- [Using SCM-Manager with ISS + (Helicon)](SCM-Manager%20on%20ISS%20Helicon "wikilink") +- [Permissions](https://bitbucket.org/sdorra/scm-manager/wiki/Permissions "wikilink") +- [Plugins](http://plugins.scm-manager.org/scm-plugin-backend/page/index.html "wikilink") +- [Revision Control Plugin + Comparison](rv-plugin-comparison "wikilink") +- [Screenshots](http://www.scm-manager.org/screenshots/ "wikilink") +- [Mercurial Subrepositories](subrepositories "wikilink") +- [Unix Daemons and Windows Services](daemons "wikilink") +- [RPM and DEB packages](RPM%20and%20DEB%20packages "wikilink") +- [Build windows mercurial packages for + SCM-Manager](https://bitbucket.org/sdorra/build-win-hg-packages "wikilink") + +### Plugin documentation + +- [Active Directory Plugin](active-directory-plugin "wikilink") +- [Branch Write Protect Plugin](branchwp-plugin "wikilink") +- [Jenkins Plugin](jenkins-plugin "wikilink") +- [Jira Plugin](jira-plugin "wikilink") +- [Mail Plugin](mail-plugin "wikilink") +- [Path Write Protect Plugin](pathwp-plugin "wikilink") +- [Redmine Plugin](redmine-plugin "wikilink") +- [Scheduler Plugin](scheduler-plugin "wikilink") +- [Trac Plugin](trac-plugin "wikilink") +- [WebHook Plugin](webhook-plugin "wikilink") + +### Development + +- [Building SCM-Manager from source](build-from-source "wikilink") +- [Java Client API](java-client-api "wikilink") +- [Code + Snippets](https://bitbucket.org/sdorra/scm-manager/wiki/code-snippets "wikilink") +- [Configuring Eclipse projects for + SCM-Manager](configure-eclipse "wikilink") +- [Plugin Descriptor](plugin-descriptor "wikilink") +- [ExtensionPoints](ExtensionPoints "wikilink") +- [How to create your own plugin](howto-create-a-plugin "wikilink") +- [Injection Objects](injectionObjects "wikilink") +- [API + documentation](http://docs.scm-manager.org/apidocs/latest/ "wikilink") +- [WebService + documentation](http://docs.scm-manager.org/restdocs/current/ "wikilink") + +### SCM Manager 2 + +- [Configuration for Intellij + IDEA](v2/intellij-idea-configuration "wikilink") +- [State of SCM-Manager 2 + development](v2/State%20of%20SCM-Manager%202%20development "wikilink") +- [SCM v2 Test Cases](v2/SCMM-v2-Test-Cases "wikilink") +- [Table of decisions made during + development](v2/Decision-Table "wikilink") +- [Definition of done](Definition_of_done "wikilink") +- [Style Guide](v2/style-guide "wikilink") +- [Error Handling in REST, Java, UI](v2/error-handling "wikilink") +- [Create a new Plugin](v2/Create_a_new_Plugin "wikilink") +- [Migrate Plugin from v1](v2/Migrate_Plugin_from_v1 "wikilink") +- [Plugin Development](v2/Plugin_Development "wikilink") +- [i18n for Plugins](v2/i18n_for_Plugins "wikilink") +- [Extension Points](v2/Extension-Points "wikilink") +- [API changes](v2/API_changes "wikilink") +- [ui-components/ui-types](v2/UI:_Additions_or_Changes_to_ui-components_or_ui-types "wikilink") +- [Vulnerabilities](v2/vulnerabilities "wikilink") +- [Common pitfall](v2/Common_pitfall "wikilink") +- [Release process](v2/Release_process "wikilink") +- [Migration Wizard](v2/Migration-Wizard "wikilink") +- [Known Issues](v2/Known_Issues "wikilink") diff --git a/docs/Notes and considerations for 2.0.md b/docs/Notes and considerations for 2.0.md new file mode 100644 index 0000000000..a901f9c459 --- /dev/null +++ b/docs/Notes and considerations for 2.0.md @@ -0,0 +1 @@ +Moved to [State of SCM-Manager 2 development](https://bitbucket.org/sdorra/scm-manager/wiki/State%20of%20SCM-Manager%202%20development) \ No newline at end of file diff --git a/docs/Permissions.md b/docs/Permissions.md new file mode 100644 index 0000000000..120a6c027d --- /dev/null +++ b/docs/Permissions.md @@ -0,0 +1,29 @@ +## Permissions ## + +SCM-Manager knows three different types of repository permissions: + +Type | Description +----- | ---------- +READ | The user is able to read +WRITE | The user is able to read and write +OWNER | The user is able to read, write and to manager permissions + +Repository permissions can be assigned to users and groups. The permissions can be assigned +to only one repository or to each repository. Administrators have owner permissions on every repository. + +### Repository permissions ### + +Repository permissions can be managed by administrators and by repository owners. +The permissions can be managed on the permission tab of each repository. + +![repository permissions](https://bytebucket.org/sdorra/scm-manager/wiki/screenshots/permissions_repository.png "repository permissions") + +### Global permissions ### + +Global permissions are only manageable by administrators. They can be managed at *Security -> Users* or *Security -> Groups*. + +![global permissions](https://bytebucket.org/sdorra/scm-manager/wiki/screenshots/permissions_global.png "global permissions") + +### Administrators ### + +Administrators can mark other users as administrators at *Security -> Users*. \ No newline at end of file diff --git a/docs/RPM and DEB packages.md b/docs/RPM and DEB packages.md new file mode 100644 index 0000000000..11965966ca --- /dev/null +++ b/docs/RPM and DEB packages.md @@ -0,0 +1,75 @@ +Since version 1.39, SCM-Manager is delivered as RPM and DEB package. The package are generated with the [nativepkg-maven-plugin](https://github.com/sdorra/nativepkg-maven-plugin). The following table shows the directory structure which will be created by the packages: + +File | Description +--- | --- +/opt/scm-server | Main directory for scm-server installation +/etc/default/scm-server | Default settings for scm-server +/etc/init.d/scm-server | Start script for scm-server +/var/cache/scm/work | Cache directory +/var/log/scm | Logging directory +/var/lib/scm | SCM-Manager home directory + +The package will create a user and group which are called scm. The scm user will be the owner of the process. The init script uses jsvc to start the scm-server process, which makes it possible to run scm-server on port 80 without running it as root user. The main settings for the server process are stored at /etc/default/scm-server. + +## Installation + +### RPM + +The RPM package is tested with Fedora and Centos. Create a new files at /etc/yum.repos.d/SCM-Manager.repo with the following content to install the scm-manager repository: + +``` +#!text +[scm-releases] +name=SCM-Manager Releases +baseurl=http://maven.scm-manager.org/nexus/content/repositories/releases +enabled=1 +protect=0 +gpgcheck=0 +metadata_expire=30s +autorefresh=1 +type=rpm-md +``` + +After file creation execute the following command to install scm-server: + + +``` +#!bash + +# install the scm-server package +sudo yum install scm-server +``` + +### DEB + +The DEB package is tested with Debian and Ubuntu. Execute the following commands to install scm-server: + +``` +#!bash + +# add the scm-manager repository +echo "echo 'deb http://maven.scm-manager.org/nexus/content/repositories/releases ./' >> /etc/apt/sources.list" | sudo sh + +# install gpg key for the scm-manager repository +sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 D742B261 + +# update +sudo apt-get update + +# install scm-server +sudo apt-get install scm-server + +``` + +## Migration from ApplicationServer or Standalone version + +To migrate from an existing installation, you have to the following steps: + +* Stop the old service +* Move the folder /opt/scm-server, if it exists +* Install the package +* Copy the content of your existing scm home directory to /var/lib/scm +* Change the owner of the directory and all containing files to scm:scm (chown -R scm:scm /var/lib/scm) +* Verify *repositoryDirectory* in /var/lib/scm/config/[git|hg|svn].xml], make sure they point to respective /var/lib/scm/repositories/[git|hg|svn] and not your old location. Otherwise the repository health check will fail. +* Optional: Reapply changes to /opt/scm-server/conf/server-config.xml and /opt/scm-server/conf/logging.xml +* Start scm-server (/etc/init.d/scm-server start) \ No newline at end of file diff --git a/docs/SCM-Manager on ISS Helicon.md b/docs/SCM-Manager on ISS Helicon.md new file mode 100644 index 0000000000..cf026acfca --- /dev/null +++ b/docs/SCM-Manager on ISS Helicon.md @@ -0,0 +1,57 @@ +First of all this setup is not recommended, because there were a lot of problems with it and it was never tested by the development team of SCM-Manager. However there are several working installation out there. But there some pitfalls: + +**Problem description:** + +When moving of copying files in SVN, the commit fails with the following message: + +``` +#!cmd + +MyWorkstation:MyRepo user$ svn mv A.cs B.cs +A B.cs +D A.cs +MyWorkstation:MyRepo user$ svn commit -m "Renamed A.cs to B.cs" +Deleting A.cs +Adding B.cs +svn: E175002: Commit failed (details follow): +svn: E175002: The COPY request returned invalid XML in the response: XML parse error at line 1: no element found (/svn/MyRepo/!svn/bc/4/A.cs) +MyWorkstation:MyRepo user$ + +``` + +This problem only occurs when accessing the repository via https, not http. + +**Solution:** + +1. Add the following rewrite rule to the web.config of the SCM application: + +``` +#!xml + + + + + + + + + + + + + + + + + + + + + +``` + +2. Add HTTP_Destination to the Allowed Server Variables using IIS: + +![2014-10-16_01-40-50.png](https://bitbucket.org/repo/65dEj/images/3287552754-2014-10-16_01-40-50.png) + +For more information, see issue [624](https://bitbucket.org/sdorra/scm-manager/issue/624/svn-400-bad-request-on-copy-or-move-when). diff --git a/docs/State of SCM-Manager 2 development.md b/docs/State of SCM-Manager 2 development.md new file mode 100644 index 0000000000..318f3513cc --- /dev/null +++ b/docs/State of SCM-Manager 2 development.md @@ -0,0 +1,36 @@ +The development of SCM-Manager 2.0.0 is organised in [Trello Boards](https://trello.com/scmmanager). + +## [Milestone 1](https://trello.com/b/oit1MD92/scm-manager-2-0-0-milestone-1) ## + +### Main goals ### +* remove deprecated and unused stuff +* remove old style listeners +* replace [guava eventbus](https://code.google.com/p/guava-libraries/wiki/EventBusExplained) with [legman](https://github.com/sdorra/legman) +* introduce new plugin structure +* offline plugin installation/updates/deinstallation +* use java 7 as default +* use of [annotation processors](http://docs.oracle.com/javase/7/docs/api/javax/annotation/processing/Processor.html) instead of classpath scanning +* move non core modules (plugin-backend, maven plugins, etc.) to separate repositories + +## [Milestone 2](https://trello.com/b/Afb3hoJ9/scm-manager-2-0-0-milestone-2) ## + +### Main goals ### +* use [apache shiro](http://shiro.apache.org/) everywhere +* improve authentication +* improve user and group management +* use permission instead of roles + +## [Milestone 3](https://trello.com/b/eLvqTGGe/scm-manager-2-0-0-milestone-3) ## + +### Main goals ### +* completely new designed rest api + +## Milestone 4 ## + +### Main goals ### +* completely new user interface + +## Milestone 5 ## + +### Main goals ### +* improve repository api \ No newline at end of file diff --git a/docs/active-directory-plugin.md b/docs/active-directory-plugin.md new file mode 100644 index 0000000000..bd6a99bc7f --- /dev/null +++ b/docs/active-directory-plugin.md @@ -0,0 +1,11 @@ +### Active Directory Plugin + +- Connect your Windows machine to your local Active Directory +- Log in as a user of that directory +- Run the scm-server batch file +- Install the active-directory plugin +- restart the scm-server + + + +- - Note:\*\* Since version 1.7 of the plugin 64bit is supported. diff --git a/docs/apache/apache-mod_jk.md b/docs/apache/apache-mod_jk.md new file mode 100644 index 0000000000..916e7ae3a4 --- /dev/null +++ b/docs/apache/apache-mod_jk.md @@ -0,0 +1,10 @@ +SCM-Server and Apache mod\_jk +----------------------------- + +### Apache Configuration + +### JK Workers File (jkworkers.properties) + +### SCM-Server conf/server-config.xml + +Uncomment the following lines: diff --git a/docs/apache/apache-mod_proxy.md b/docs/apache/apache-mod_proxy.md new file mode 100644 index 0000000000..593ad812fd --- /dev/null +++ b/docs/apache/apache-mod_proxy.md @@ -0,0 +1,31 @@ +SCM-Server and Apache mod\_proxy +-------------------------------- + +### Apache configuration + +- - Warning\*\*: Setting ProxyPassReverseCookiePath would most + likely cause problems with session handling! + + + +- - Note\*\*: If you encounter timeout problems, please have a look + [here](http://httpd.apache.org/docs/current/mod/mod_proxy.html#workers "wikilink"). + +### SCM-Server conf/server-config.xml + +NOTE: This file is found in the installation directory, not the user\'s +home directory. + +Uncomment following line: Example: === SCM-Manager Configuration version +1.5 and above == + +1. Login as an admin user and select \"General\" +2. Set the \"Base Url\" to the URL of the Apache (\*\*warning:\*\* + don\'t check \"Force Base Url\") +3. Save the new new settings + +### SCM-Manager Configuration before version 1.5 + +1. Login as an admin user and select \"General\" +2. Set the Serverport to the apache port (normally port 80) +3. Save the new settings diff --git a/docs/apache/config-mod_proxy.png b/docs/apache/config-mod_proxy.png new file mode 100644 index 0000000000..d1d8d6cd05 Binary files /dev/null and b/docs/apache/config-mod_proxy.png differ diff --git a/docs/applicationserver.md b/docs/applicationserver.md new file mode 100644 index 0000000000..4c4cf4293a --- /dev/null +++ b/docs/applicationserver.md @@ -0,0 +1,47 @@ +Tomcat +------ + +Mercurial uses very large http headers for branch and head informations. +You have to increase the maxHttpHeaderSize parameter on the connector +configuration. Open the conf/server.xml and add the parameter to your +connector e.g.: + +After changing the configuration you have to restart the tomcat. + +Source: + +- - Note\*\*: If you have problems with big mercurial pushes on + instances which are newer than tomcat 7.0.55, you have to + increase/disable the maxSwallowSize (see issue \#691). + +#### Access Log + +If you wan\'t like to print the current user in tomcats access log you +could use a valve like the following: + +The pattern \*\*%{principal}r\*\* is responsible for logging the +username to the access log (see issue \#877). + +GlassFish +--------- + +To use SCM-Manager 1.6 and above with GlassFish 3 you have to add a +JVM-Option to the GlassFish configuration to override the jax-rs +packages. Please execute the following commands. + +- - Note\*\* Glassfish 3.1.2 and above seems not to work with + SCM-Manager. Please have a look at + [QeO-QVX6wmsJ](https://groups.google.com/forum/#!searchin/scmmanager/glassfish/scmmanager/SEbuEU8H-qo/QeO-QVX6wmsJ "wikilink"). + +Restart the GlassFish-Server. + +Source: + + +Jetty +----- + +If Jetty returns a HTTP \"413 FULL head\" status, you may want to +further increase the maximum header size. You can configure the limit by +setting the headerBufferSize for the connector you\'re using in the +jetty.xml file: diff --git a/docs/branchwp-plugin.md b/docs/branchwp-plugin.md new file mode 100644 index 0000000000..760c5fbd9a --- /dev/null +++ b/docs/branchwp-plugin.md @@ -0,0 +1,42 @@ +Branch Write Protect Plugin +--------------------------- + +### Installation + +- Login in as administrator +- Open Plugins +- Install scm-branchwp-plugin +- Restart your applicationserver + +### Usage + +After the restart you should see a \"Branch write protect\" tab for each +repository. On this tab you are able to set branch write protections for +users and groups. Here are some rules for the usage of the branchwp +plugin: + +- Administrators and repository owner have always write access. +- Grant write permissions on the \"Permission\" tab for every user or + group who should write to any branch in the repository. +- If the branchwp plugin is enabled, nobody can write to the + repository expect administrators, repository owners and the + specified rules. + +### Notes + +The branchwp plugin works only for Git and Mercurial, for Subversion +have a look at the +[pathwp-plugin](http://plugins.scm-manager.org/scm-plugin-backend/page/detail/sonia.scm.plugins/scm-pathwp-plugin.html "wikilink"). + +Since version 1.2 of the plugin it is possible to define deny +permissions and placeholders for branch names. Deny permissions are +handled always before allow permissions. At the state of version 1.2 the +following placeholders are available: + +- {username} - will be replaced with the username of the current user +- {mail} - will be replaced with the e-mail address of the current + user + +### Known issues + +- diff --git a/docs/build-from-source.md b/docs/build-from-source.md new file mode 100644 index 0000000000..13a2abc964 --- /dev/null +++ b/docs/build-from-source.md @@ -0,0 +1,35 @@ +Building SCM-Manager from source +-------------------------------- + +### Software Requirements + +- JDK 1.7 or higher + ([download](http://www.oracle.com/technetwork/java/index.html "wikilink")) +- Maven 3 or higher ([download](http://maven.apache.org/ "wikilink")) +- Mercurial ([download](https://www.mercurial-scm.org/ "wikilink")) + +### Build SCM-Manager 1.x from source + +- - Note:\*\* if you use the \"package\" phase rather than the + \"install\" phase, the standalone version may include an old + version of the WAR file in the distribution bundle, rather than + the version you just built. + +After mvn finished, the war bundle is located at +\*\*scm-webapp/target/scm-webapp.war\*\* and the standalone version is +located at \*\*scm-server/target/scm-server-app\*\*. + +You can also start a dev server using \`mvn jetty:run-war -f +scm-webapp\`. SCMM is served at . + +### REST + +Docs: + +- Create the documentation: \`mvn -f scm-webapp compile -P doc\` +- The documentation can be found at scm-webapp/target/restdocs + +Note that if using jetty (see above) you have to access + once, to trigger creation of the +\`scmadmin\` user. Then you can access the REST api directly + diff --git a/docs/code-snippets.md b/docs/code-snippets.md new file mode 100644 index 0000000000..7e5ca5eedc --- /dev/null +++ b/docs/code-snippets.md @@ -0,0 +1,15 @@ +Code Snippets +------------- + +### User Interface + +- [extend + navigation](https://bitbucket.org/sdorra/scm-manager/wiki/snippet-extend-navigation "wikilink") +- [add tab to repository + configuration](https://bitbucket.org/sdorra/scm-manager/wiki/snippet-repository-tab "wikilink") +- [extend global + configuration](https://bitbucket.org/sdorra/scm-manager/wiki/snippet-config-group "wikilink") + +=== Backend == + +- [Authentication](https://bitbucket.org/sdorra/scm-manager/wiki/snippet-authentication "wikilink") diff --git a/docs/command-line-client.md b/docs/command-line-client.md new file mode 100644 index 0000000000..773757e32f --- /dev/null +++ b/docs/command-line-client.md @@ -0,0 +1,16 @@ +Command line client +------------------- + +You can download the command line client from +[here](http://www.scm-manager.org/download/ "wikilink") (the +scm-cli-client). + +### Examples + +- - 1\. Store username, password and server url\*\* + +- - 2\. List all repositories\*\* + +- - 3\. Create a new user\*\* + +- - 4\. Add write permission for user test to repository scm\*\* diff --git a/docs/configure-eclipse.md b/docs/configure-eclipse.md new file mode 100644 index 0000000000..6ca863f019 --- /dev/null +++ b/docs/configure-eclipse.md @@ -0,0 +1,49 @@ +There are multiple approaches to using Maven projects within Eclipse. If +you use an approach that isn\'t listed here, feel free to add it. + +Use Maven to generate Eclipse project files +------------------------------------------- + +1. First, [build scm-manager from + source](build-from-source "wikilink"). +2. Open a shell to the root of your scm-manager source. +3. Run the following command:\\\\ +4. Run the following command:\\\\ +5. Open Eclipse using the specified workspace. +6. In Eclipse, select the \"File\", \"Import\...\" menu. +7. Select the \"General\", \"Existing Projects into Workspace\" item + and click \"Next\". +8. Click \"Browse\" and select the root of your scm-manager source. +9. All projects will be selected by default. Click \"Finish\". + +### Troubleshooting + +You may encounter an error during the \"eclipse:eclipse\" step that +looks like this: + +This error is caused by a bug in version 2.7 and 2.8 of the Maven +eclipse plugin. See below for one workaround. Other discussion of this +issue can be found +[here](http://forums.atlassian.com/thread.jspa?threadID=34952&tstart=1 "wikilink"). + +1. Add the following line within the element of your + \~/.m2/settings.xml [file:\\\\](file:\\){{{ + +true }}} + +1. Add the file \~/.m2/plugin-registry.xml with the following contents: + +If you have .project files in any parent directory, the Eclipse import +step will not search beneath that parent for any further projects. +Delete the .project file in the parent and try the import again. + +If you get errors in Eclipse about not finding M2\_REPO, it means that +the eclipse:configure-workspace step didn\'t work. One cause for this +could be using \"\~\" or other special characters in your workspace path +that the plugin doesn\'t resolve properly. Either re-run +eclipse:configure-workspace, or manually create a classpath variable +named M2\_REPO pointing to the root of your local maven repository +directory. + +If you get compilation errors on JAXB or ServiceLoader, your Eclipse may +not be configured to use Java 6. diff --git a/docs/daemons.md b/docs/daemons.md new file mode 100644 index 0000000000..48d8877491 --- /dev/null +++ b/docs/daemons.md @@ -0,0 +1,20 @@ +Unix Daemons and Windows Services +--------------------------------- + +- - Note\*\*: If you are using a 64Bit operating system you should + use a 64Bit JavaVirtualMachine as well (\#74 or + [rOL1nJ9DnfI](https://groups.google.com/forum/?fromgroups#!topic/scmmanager/rOL1nJ9DnfI "wikilink")). + +### Unix Daemons + +You could run scm-server in background as unix daemon with one simple +command: + +If you would like to stop the running daemon instance just call: + +### Windows Services + +Register scm-server as Windows service open a console (cmd) as +Administrator and execute the following command: The service is no +available in the service control center. You could uninstall the service +with the command below: diff --git a/docs/download-archive.md b/docs/download-archive.md new file mode 100644 index 0000000000..9f4683b1cf --- /dev/null +++ b/docs/download-archive.md @@ -0,0 +1,770 @@ +Download Archive +---------------- + +### SCM-Server 1.59 (standalone) + +- [scm-server-1.59-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.59/scm-server-1.59-app.zip "wikilink") +- [scm-server-1.59-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.59/scm-server-1.59-app.tar.gz "wikilink") + +### SCM-WebApp 1.59 (Web application archive) + +- [scm-webapp-1.59.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.59/scm-webapp-1.59.war "wikilink") + +### SCM-Cli-Client 1.59 (Java application archive) + +- [scm-cli-client-1.59-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.59/scm-cli-client-1.59-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.58 (standalone) + +- [scm-server-1.58-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.58/scm-server-1.58-app.zip "wikilink") +- [scm-server-1.58-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.58/scm-server-1.58-app.tar.gz "wikilink") + +### SCM-WebApp 1.58 (Web application archive) + +- [scm-webapp-1.58.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.58/scm-webapp-1.58.war "wikilink") + +### SCM-Cli-Client 1.58 (Java application archive) + +- [scm-cli-client-1.58-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.58/scm-cli-client-1.58-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.57 (standalone) + +- [scm-server-1.57-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.57/scm-server-1.57-app.zip "wikilink") +- [scm-server-1.57-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.57/scm-server-1.57-app.tar.gz "wikilink") + +### SCM-WebApp 1.57 (Web application archive) + +- [scm-webapp-1.57.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.57/scm-webapp-1.57.war "wikilink") + +### SCM-Cli-Client 1.57 (Java application archive) + +- [scm-cli-client-1.57-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.57/scm-cli-client-1.57-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.56 (standalone) + +- [scm-server-1.56-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.56/scm-server-1.56-app.zip "wikilink") +- [scm-server-1.56-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.56/scm-server-1.56-app.tar.gz "wikilink") + +### SCM-WebApp 1.56 (Web application archive) + +- [scm-webapp-1.56.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.56/scm-webapp-1.56.war "wikilink") + +### SCM-Cli-Client 1.56 (Java application archive) + +- [scm-cli-client-1.56-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.56/scm-cli-client-1.56-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.55 (standalone) + +- [scm-server-1.55-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.55/scm-server-1.55-app.zip "wikilink") +- [scm-server-1.55-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.55/scm-server-1.55-app.tar.gz "wikilink") + +### SCM-WebApp 1.55 (Web application archive) + +- [scm-webapp-1.55.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.55/scm-webapp-1.55.war "wikilink") + +### SCM-Cli-Client 1.55 (Java application archive) + +- [scm-cli-client-1.55-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.55/scm-cli-client-1.55-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.54 (standalone) + +- [scm-server-1.54-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.54/scm-server-1.54-app.zip "wikilink") +- [scm-server-1.54-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.54/scm-server-1.54-app.tar.gz "wikilink") + +### SCM-WebApp 1.54 (Web application archive) + +- [scm-webapp-1.54.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.54/scm-webapp-1.54.war "wikilink") + +### SCM-Cli-Client 1.54 (Java application archive) + +- [scm-cli-client-1.54-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.54/scm-cli-client-1.54-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.53 (standalone) + +- [scm-server-1.53-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.53/scm-server-1.53-app.zip "wikilink") +- [scm-server-1.53-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.53/scm-server-1.53-app.tar.gz "wikilink") + +### SCM-WebApp 1.53 (Web application archive) + +- [scm-webapp-1.53.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.53/scm-webapp-1.53.war "wikilink") + +### SCM-Cli-Client 1.53 (Java application archive) + +- [scm-cli-client-1.53-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.53/scm-cli-client-1.53-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.52 (standalone) + +- [scm-server-1.52-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.52/scm-server-1.52-app.zip "wikilink") +- [scm-server-1.52-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.52/scm-server-1.52-app.tar.gz "wikilink") + +### SCM-WebApp 1.52 (Web application archive) + +- [scm-webapp-1.52.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.52/scm-webapp-1.52.war "wikilink") + +### SCM-Cli-Client 1.52 (Java application archive) + +- [scm-cli-client-1.52-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.52/scm-cli-client-1.52-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.51 (standalone) + +- [scm-server-1.51-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.51/scm-server-1.51-app.zip "wikilink") +- [scm-server-1.51-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.51/scm-server-1.51-app.tar.gz "wikilink") + +### SCM-WebApp 1.51 (Web application archive) + +- [scm-webapp-1.51.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.51/scm-webapp-1.51.war "wikilink") + +### SCM-Cli-Client 1.51 (Java application archive) + +- [scm-cli-client-1.51-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.51/scm-cli-client-1.51-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.50 (standalone) + +- [scm-server-1.50-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.50/scm-server-1.50-app.zip "wikilink") +- [scm-server-1.50-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.50/scm-server-1.50-app.tar.gz "wikilink") + +### SCM-WebApp 1.50 (Web application archive) + +- [scm-webapp-1.50.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.50/scm-webapp-1.50.war "wikilink") + +### SCM-Cli-Client 1.50 (Java application archive) + +- [scm-cli-client-1.50-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.50/scm-cli-client-1.50-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.49 (standalone) + +- [scm-server-1.49-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.49/scm-server-1.49-app.zip "wikilink") +- [scm-server-1.49-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.49/scm-server-1.49-app.tar.gz "wikilink") + +### SCM-WebApp 1.49 (Web application archive) + +- [scm-webapp-1.49.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.49/scm-webapp-1.49.war "wikilink") + +### SCM-Cli-Client 1.49 (Java application archive) + +- [scm-cli-client-1.49-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.49/scm-cli-client-1.49-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.48 (standalone) + +- [scm-server-1.48-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.48/scm-server-1.48-app.zip "wikilink") +- [scm-server-1.48-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.48/scm-server-1.48-app.tar.gz "wikilink") + +### SCM-WebApp 1.48 (Web application archive) + +- [scm-webapp-1.48.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.48/scm-webapp-1.48.war "wikilink") + +### SCM-Cli-Client 1.48 (Java application archive) + +- [scm-cli-client-1.48-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.48/scm-cli-client-1.48-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.47 (standalone) + +- [scm-server-1.47-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.47/scm-server-1.47-app.zip "wikilink") +- [scm-server-1.47-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.47/scm-server-1.47-app.tar.gz "wikilink") + +### SCM-WebApp 1.47 (Web application archive) + +- [scm-webapp-1.47.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.47/scm-webapp-1.47.war "wikilink") + +### SCM-Cli-Client 1.47 (Java application archive) + +- [scm-cli-client-1.47-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.47/scm-cli-client-1.47-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.46 (standalone) + +- [scm-server-1.46-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.46/scm-server-1.46-app.zip "wikilink") +- [scm-server-1.46-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.46/scm-server-1.46-app.tar.gz "wikilink") + +### SCM-WebApp 1.46 (Web application archive) + +- [scm-webapp-1.46.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.46/scm-webapp-1.46.war "wikilink") + +### SCM-Cli-Client 1.46 (Java application archive) + +- [scm-cli-client-1.46-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.46/scm-cli-client-1.46-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.45 (standalone) + +- [scm-server-1.45-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.45/scm-server-1.45-app.zip "wikilink") +- [scm-server-1.45-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.45/scm-server-1.45-app.tar.gz "wikilink") + +### SCM-WebApp 1.45 (Web application archive) + +- [scm-webapp-1.45.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.45/scm-webapp-1.45.war "wikilink") + +### SCM-Cli-Client 1.45 (Java application archive) + +- [scm-cli-client-1.45-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.45/scm-cli-client-1.45-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.44 (standalone) + +- [scm-server-1.44-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.44/scm-server-1.44-app.zip "wikilink") +- [scm-server-1.44-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.44/scm-server-1.44-app.tar.gz "wikilink") + +### SCM-WebApp 1.44 (Web application archive) + +- [scm-webapp-1.44.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.44/scm-webapp-1.44.war "wikilink") + +### SCM-Cli-Client 1.44 (Java application archive) + +- [scm-cli-client-1.44-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.44/scm-cli-client-1.44-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.43 (standalone) + +- [scm-server-1.43-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.43/scm-server-1.43-app.zip "wikilink") +- [scm-server-1.43-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.43/scm-server-1.43-app.tar.gz "wikilink") + +### SCM-WebApp 1.43 (Web application archive) + +- [scm-webapp-1.43.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.43/scm-webapp-1.43.war "wikilink") + +### SCM-Cli-Client 1.43 (Java application archive) + +- [scm-cli-client-1.43-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.43/scm-cli-client-1.43-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.42 (standalone) + +- [scm-server-1.42-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.42/scm-server-1.42-app.zip "wikilink") +- [scm-server-1.42-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.42/scm-server-1.42-app.tar.gz "wikilink") + +### SCM-WebApp 1.42 (Web application archive) + +- [scm-webapp-1.42.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.42/scm-webapp-1.42.war "wikilink") + +### SCM-Cli-Client 1.42 (Java application archive) + +- [scm-cli-client-1.42-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.42/scm-cli-client-1.42-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.41 (standalone) + +- [scm-server-1.41-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.41/scm-server-1.41-app.zip "wikilink") +- [scm-server-1.41-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.41/scm-server-1.41-app.tar.gz "wikilink") + +### SCM-WebApp 1.41 (Web application archive) + +- [scm-webapp-1.41.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.41/scm-webapp-1.41.war "wikilink") + +### SCM-Cli-Client 1.41 (Java application archive) + +- [scm-cli-client-1.41-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.41/scm-cli-client-1.41-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.40 (standalone) + +- [scm-server-1.40-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.40/scm-server-1.40-app.zip "wikilink") +- [scm-server-1.40-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.40/scm-server-1.40-app.tar.gz "wikilink") + +### SCM-WebApp 1.40 (Web application archive) + +- [scm-webapp-1.40.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.40/scm-webapp-1.40.war "wikilink") + +### SCM-Cli-Client 1.40 (Java application archive) + +- [scm-cli-client-1.40-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.40/scm-cli-client-1.40-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.39 (standalone) + +- [scm-server-1.39-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.39/scm-server-1.39-app.zip "wikilink") +- [scm-server-1.39-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.39/scm-server-1.39-app.tar.gz "wikilink") + +### SCM-WebApp 1.39 (Web application archive) + +- [scm-webapp-1.39.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.39/scm-webapp-1.39.war "wikilink") + +### SCM-Cli-Client 1.39 (Java application archive) + +- [scm-cli-client-1.39-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.39/scm-cli-client-1.39-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.38 (standalone) + +- [scm-server-1.38-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.38/scm-server-1.38-app.zip "wikilink") +- [scm-server-1.38-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.38/scm-server-1.38-app.tar.gz "wikilink") + +### SCM-WebApp 1.38 (Web application archive) + +- [scm-webapp-1.38.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.38/scm-webapp-1.38.war "wikilink") + +### SCM-Cli-Client 1.38 (Java application archive) + +- [scm-cli-client-1.38-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.38/scm-cli-client-1.38-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.37 (standalone) + +- [scm-server-1.37-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.37/scm-server-1.37-app.zip "wikilink") +- [scm-server-1.37-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.37/scm-server-1.37-app.tar.gz "wikilink") + +### SCM-WebApp 1.37 (Web application archive) + +- [scm-webapp-1.37.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.37/scm-webapp-1.37.war "wikilink") + +### SCM-Cli-Client 1.37 (Java application archive) + +- [scm-cli-client-1.37-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.37/scm-cli-client-1.37-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.36 (standalone) + +- [scm-server-1.36-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.36/scm-server-1.36-app.zip "wikilink") +- [scm-server-1.36-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.36/scm-server-1.36-app.tar.gz "wikilink") + +### SCM-WebApp 1.36 (Web application archive) + +- [scm-webapp-1.36.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.36/scm-webapp-1.36.war "wikilink") + +### SCM-Cli-Client 1.36 (Java application archive) + +- [scm-cli-client-1.36-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.36/scm-cli-client-1.36-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.35 (standalone) + +- [scm-server-1.35-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.35/scm-server-1.35-app.zip "wikilink") +- [scm-server-1.35-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.35/scm-server-1.35-app.tar.gz "wikilink") + +### SCM-WebApp 1.35 (Web application archive) + +- [scm-webapp-1.35.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.35/scm-webapp-1.35.war "wikilink") + +### SCM-Cli-Client 1.35 (Java application archive) + +- [scm-cli-client-1.35-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.35/scm-cli-client-1.35-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.34 (standalone) + +- [scm-server-1.34-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.34/scm-server-1.34-app.zip "wikilink") +- [scm-server-1.34-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.34/scm-server-1.34-app.tar.gz "wikilink") + +### SCM-WebApp 1.34 (Web application archive) + +- [scm-webapp-1.34.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.34/scm-webapp-1.34.war "wikilink") + +### SCM-Cli-Client 1.34 (Java application archive) + +- [scm-cli-client-1.34-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.34/scm-cli-client-1.34-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.33 (standalone) + +- [scm-server-1.33-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.33/scm-server-1.33-app.zip "wikilink") +- [scm-server-1.33-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.33/scm-server-1.33-app.tar.gz "wikilink") + +### SCM-WebApp 1.33 (Web application archive) + +- [scm-webapp-1.33.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.33/scm-webapp-1.33.war "wikilink") + +### SCM-Cli-Client 1.33 (Java application archive) + +- [scm-cli-client-1.33-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.33/scm-cli-client-1.33-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.32 (standalone) + +- [scm-server-1.32-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.32/scm-server-1.32-app.zip "wikilink") +- [scm-server-1.32-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.32/scm-server-1.32-app.tar.gz "wikilink") + +### SCM-WebApp 1.32 (Web application archive) + +- [scm-webapp-1.32.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.32/scm-webapp-1.32.war "wikilink") + +### SCM-Cli-Client 1.32 (Java application archive) + +- [scm-cli-client-1.32-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.32/scm-cli-client-1.32-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.31 (standalone) + +- [scm-server-1.31-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.31/scm-server-1.31-app.zip "wikilink") +- [scm-server-1.31-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.31/scm-server-1.31-app.tar.gz "wikilink") + +### SCM-WebApp 1.31 (Web application archive) + +- [scm-webapp-1.31.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.31/scm-webapp-1.31.war "wikilink") + +### SCM-Cli-Client 1.31 (Java application archive) + +- [scm-cli-client-1.31-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.31/scm-cli-client-1.31-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.30 (standalone) + +- [scm-server-1.30-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.30/scm-server-1.30-app.zip "wikilink") +- [scm-server-1.30-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.30/scm-server-1.30-app.tar.gz "wikilink") + +### SCM-WebApp 1.30 (Web application archive) + +- [scm-webapp-1.30.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.30/scm-webapp-1.30.war "wikilink") + +### SCM-Cli-Client 1.30 (Java application archive) + +- [scm-cli-client-1.30-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.30/scm-cli-client-1.30-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.29 (standalone) + +- [scm-server-1.29-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.29/scm-server-1.29-app.zip "wikilink") +- [scm-server-1.29-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.29/scm-server-1.29-app.tar.gz "wikilink") + +### SCM-WebApp 1.29 (Web application archive) + +- [scm-webapp-1.29.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.29/scm-webapp-1.29.war "wikilink") + +### SCM-Cli-Client 1.29 (Java application archive) + +- [scm-cli-client-1.29-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.29/scm-cli-client-1.29-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.28 (standalone) + +- [scm-server-1.28-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.28/scm-server-1.28-app.zip "wikilink") +- [scm-server-1.28-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.28/scm-server-1.28-app.tar.gz "wikilink") + +### SCM-WebApp 1.28 (Web application archive) + +- [scm-webapp-1.28.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.28/scm-webapp-1.28.war "wikilink") + +### SCM-Cli-Client 1.28 (Java application archive) + +- [scm-cli-client-1.28-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.28/scm-cli-client-1.28-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.27 (standalone) + +- [scm-server-1.27-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.27/scm-server-1.27-app.zip "wikilink") +- [scm-server-1.27-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.27/scm-server-1.27-app.tar.gz "wikilink") + +### SCM-WebApp 1.27 (Web application archive) + +- [scm-webapp-1.27.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.27/scm-webapp-1.27.war "wikilink") + +### SCM-Cli-Client 1.27 (Java application archive) + +- [scm-cli-client-1.27-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.27/scm-cli-client-1.27-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.26 (standalone) + +- [scm-server-1.26-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.26/scm-server-1.26-app.zip "wikilink") +- [scm-server-1.26-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.26/scm-server-1.26-app.tar.gz "wikilink") + +### SCM-WebApp 1.26 (Web application archive) + +- [scm-webapp-1.26.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.26/scm-webapp-1.26.war "wikilink") + +### SCM-Cli-Client 1.26 (Java application archive) + +- [scm-cli-client-1.26-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.26/scm-cli-client-1.26-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.25 (standalone) + +- [scm-server-1.25-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.25/scm-server-1.25-app.zip "wikilink") +- [scm-server-1.25-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.25/scm-server-1.25-app.tar.gz "wikilink") + +### SCM-WebApp 1.25 (Web application archive) + +- [scm-webapp-1.25.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.25/scm-webapp-1.25.war "wikilink") + +### SCM-Cli-Client 1.25 (Java application archive) + +- [scm-cli-client-1.25-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.25/scm-cli-client-1.25-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.24 (standalone) + +- [scm-server-1.24-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.24/scm-server-1.24-app.zip "wikilink") +- [scm-server-1.24-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.24/scm-server-1.24-app.tar.gz "wikilink") + +### SCM-WebApp 1.24 (Web application archive) + +- [scm-webapp-1.24.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.24/scm-webapp-1.24.war "wikilink") + +### SCM-Cli-Client 1.24 (Java application archive) + +- [scm-cli-client-1.24-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.24/scm-cli-client-1.24-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.23 (standalone) + +- [scm-server-1.23-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.23/scm-server-1.23-app.zip "wikilink") +- [scm-server-1.23-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.23/scm-server-1.23-app.tar.gz "wikilink") + +### SCM-WebApp 1.23 (Web application archive) + +- [scm-webapp-1.23.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.23/scm-webapp-1.23.war "wikilink") + +### SCM-Cli-Client 1.23 (Java application archive) + +- [scm-cli-client-1.23-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.23/scm-cli-client-1.23-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.22 (standalone) + +- [scm-server-1.22-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.22/scm-server-1.22-app.zip "wikilink") +- [scm-server-1.22-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.22/scm-server-1.22-app.tar.gz "wikilink") + +### SCM-WebApp 1.22 (Web application archive) + +- [scm-webapp-1.22.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.22/scm-webapp-1.22.war "wikilink") + +### SCM-Cli-Client 1.22 (Java application archive) + +- [scm-cli-client-1.22-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.22/scm-cli-client-1.22-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.21 (standalone) + +- [scm-server-1.21-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.21/scm-server-1.21-app.zip "wikilink") +- [scm-server-1.21-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.21/scm-server-1.21-app.tar.gz "wikilink") + +### SCM-WebApp 1.21 (Web application archive) + +- [scm-webapp-1.21.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.21/scm-webapp-1.21.war "wikilink") + +### SCM-Cli-Client 1.21 (Java application archive) + +- [scm-cli-client-1.21-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.21/scm-cli-client-1.21-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.20 (standalone) + +- [scm-server-1.20-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.20/scm-server-1.20-app.zip "wikilink") +- [scm-server-1.20-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.20/scm-server-1.20-app.tar.gz "wikilink") + +### SCM-WebApp 1.20 (Web application archive) + +- [scm-webapp-1.20.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.20/scm-webapp-1.20.war "wikilink") + +### SCM-Cli-Client 1.20 (Java application archive) + +- [scm-cli-client-1.20-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.20/scm-cli-client-1.20-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.19 (standalone) + +- [scm-server-1.19-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.19/scm-server-1.19-app.zip "wikilink") +- [scm-server-1.19-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.19/scm-server-1.19-app.tar.gz "wikilink") + +### SCM-WebApp 1.19 (Web application archive) + +- [scm-webapp-1.19.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.19/scm-webapp-1.19.war "wikilink") + +### SCM-Cli-Client 1.19 (Java application archive) + +- [scm-cli-client-1.19-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.19/scm-cli-client-1.19-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.18 (standalone) + +- [scm-server-1.18-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.18/scm-server-1.18-app.zip "wikilink") +- [scm-server-1.18-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.18/scm-server-1.18-app.tar.gz "wikilink") + +### SCM-WebApp 1.18 (Web application archive) + +- [scm-webapp-1.18.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.18/scm-webapp-1.18.war "wikilink") + +### SCM-Cli-Client 1.18 (Java application archive) + +- [scm-cli-client-1.18-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.18/scm-cli-client-1.18-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.17 (standalone) + +- [scm-server-1.17-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.17/scm-server-1.17-app.zip "wikilink") +- [scm-server-1.17-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.17/scm-server-1.17-app.tar.gz "wikilink") + +### SCM-WebApp 1.17 (Web application archive) + +- [scm-webapp-1.17.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.17/scm-webapp-1.17.war "wikilink") + +### SCM-Cli-Client 1.17 (Java application archive) + +- [scm-cli-client-1.17-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.17/scm-cli-client-1.17-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.16 (standalone) + +- [scm-server-1.16-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.16/scm-server-1.16-app.zip "wikilink") +- [scm-server-1.16-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.16/scm-server-1.16-app.tar.gz "wikilink") + +### SCM-WebApp 1.16 (Web application archive) + +- [scm-webapp-1.16.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.16/scm-webapp-1.16.war "wikilink") + +### SCM-Cli-Client 1.16 (Java application archive) + +- [scm-cli-client-1.16-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.16/scm-cli-client-1.16-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.15 (standalone) + +- [scm-server-1.15-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.15/scm-server-1.15-app.zip "wikilink") +- [scm-server-1.15-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.15/scm-server-1.15-app.tar.gz "wikilink") + +### SCM-WebApp 1.15 (Web application archive) + +- [scm-webapp-1.15.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.15/scm-webapp-1.15.war "wikilink") + +### SCM-Cli-Client 1.15 (Java application archive) + +- [scm-cli-client-1.15-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.15/scm-cli-client-1.15-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.14 (standalone) + +- [scm-server-1.14-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.14/scm-server-1.14-app.zip "wikilink") +- [scm-server-1.14-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.14/scm-server-1.14-app.tar.gz "wikilink") + +### SCM-WebApp 1.14 (Web application archive) + +- [scm-webapp-1.14.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.14/scm-webapp-1.14.war "wikilink") + +### SCM-Cli-Client 1.14 (Java application archive) + +- [scm-cli-client-1.14-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.14/scm-cli-client-1.14-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.13 (standalone) + +- [scm-server-1.13-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.13/scm-server-1.13-app.zip "wikilink") +- [scm-server-1.13-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.13/scm-server-1.13-app.tar.gz "wikilink") + +### SCM-WebApp 1.13 (Web application archive) + +- [scm-webapp-1.13.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.13/scm-webapp-1.13.war "wikilink") + +### SCM-Cli-Client 1.13 (Java application archive) + +- [scm-cli-client-1.13-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.13/scm-cli-client-1.13-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.12 (standalone) + +- [scm-server-1.12-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.12/scm-server-1.12-app.zip "wikilink") +- [scm-server-1.12-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.12/scm-server-1.12-app.tar.gz "wikilink") + +### SCM-WebApp 1.12 (Web application archive) + +- [scm-webapp-1.12.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.12/scm-webapp-1.12.war "wikilink") + +### SCM-Cli-Client 1.12 (Java application archive) + +- [scm-cli-client-1.12-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.12/scm-cli-client-1.12-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.11 (standalone) + +- [scm-server-1.11-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.11/scm-server-1.11-app.zip "wikilink") +- [scm-server-1.11-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.11/scm-server-1.11-app.tar.gz "wikilink") + +### SCM-WebApp 1.11 (Web application archive) + +- [scm-webapp-1.11.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.11/scm-webapp-1.11.war "wikilink") + +### SCM-Cli-Client 1.11 (Java application archive) + +- [scm-cli-client-1.11-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.11/scm-cli-client-1.11-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.10 (standalone) + +- [scm-server-1.10-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.10/scm-server-1.10-app.zip "wikilink") +- [scm-server-1.10-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.10/scm-server-1.10-app.tar.gz "wikilink") + +### SCM-WebApp 1.10 (Web application archive) + +- [scm-webapp-1.10.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.10/scm-webapp-1.10.war "wikilink") + +### SCM-Cli-Client 1.10 (Java application archive) + +- [scm-cli-client-1.10-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.10/scm-cli-client-1.10-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.9 (standalone) + +- [scm-server-1.9-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.9/scm-server-1.9-app.zip "wikilink") +- [scm-server-1.9-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.9/scm-server-1.9-app.tar.gz "wikilink") + +### SCM-WebApp 1.9 (Web application archive) + +- [scm-webapp-1.9.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.9/scm-webapp-1.9.war "wikilink") + +### SCM-Cli-Client 1.9 (Java application archive) + +- [scm-cli-client-1.9-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.9/scm-cli-client-1.9-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.8 (standalone) + +- [scm-server-1.8-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.8/scm-server-1.8-app.zip "wikilink") +- [scm-server-1.8-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.8/scm-server-1.8-app.tar.gz "wikilink") + +### SCM-WebApp 1.8 (Web application archive) + +- [scm-webapp-1.8.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.8/scm-webapp-1.8.war "wikilink") + +### SCM-Cli-Client 1.8 (Java application archive) + +- [scm-cli-client-1.8-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.8/scm-cli-client-1.8-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.7 (standalone) + +- [scm-server-1.7-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.7/scm-server-1.7-app.zip "wikilink") +- [scm-server-1.7-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.7/scm-server-1.7-app.tar.gz "wikilink") + +### SCM-WebApp 1.7 (Web application archive) + +- [scm-webapp-1.7.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.7/scm-webapp-1.7.war "wikilink") + +### SCM-Cli-Client 1.7 (Java application archive) + +- [scm-cli-client-1.7-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.7/scm-cli-client-1.7-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.6 (standalone) + +- [scm-server-1.6-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.6/scm-server-1.6-app.zip "wikilink") +- [scm-server-1.6-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.6/scm-server-1.6-app.tar.gz "wikilink") + +### SCM-WebApp 1.6 (Web application archive) + +- [scm-webapp-1.6.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.6/scm-webapp-1.6.war "wikilink") + +### SCM-Cli-Client 1.6 (Java application archive) + +- [scm-cli-client-1.6-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.6/scm-cli-client-1.6-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.5 (standalone) + +- [scm-server-1.5-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.5/scm-server-1.5-app.zip "wikilink") +- [scm-server-1.5-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.5/scm-server-1.5-app.tar.gz "wikilink") + +### SCM-WebApp 1.5 (Web application archive) + +- [scm-webapp-1.5.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.5/scm-webapp-1.5.war "wikilink") + +### SCM-Cli-Client 1.5 (Java application archive) + +- [scm-cli-client-1.5-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.5/scm-cli-client-1.5-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.4 (standalone) + +- [scm-server-1.4-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.4/scm-server-1.4-app.zip "wikilink") +- [scm-server-1.4-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.4/scm-server-1.4-app.tar.gz "wikilink") + +### SCM-WebApp 1.4 (Web application archive) + +- [scm-webapp-1.4.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.4/scm-webapp-1.4.war "wikilink") + +### SCM-Cli-Client 1.4 (Java application archive) + +- [scm-cli-client-1.4-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.4/scm-cli-client-1.4-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.3 (standalone) + +- [scm-server-1.3-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.3/scm-server-1.3-app.zip "wikilink") +- [scm-server-1.3-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.3/scm-server-1.3-app.tar.gz "wikilink") + +### SCM-WebApp 1.3 (Web application archive) + +- [scm-webapp-1.3.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.3/scm-webapp-1.3.war "wikilink") + +### SCM-Cli-Client 1.3 (Java application archive) + +- [scm-cli-client-1.3-jar-with-dependencies.jar](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/clients/scm-cli-client/1.3/scm-cli-client-1.3-jar-with-dependencies.jar "wikilink") + +### SCM-Server 1.2 (standalone) + +- [scm-server-1.2-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.2/scm-server-1.2-app.zip "wikilink") +- [scm-server-1.2-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.2/scm-server-1.2-app.tar.gz "wikilink") + +### SCM-WebApp 1.2 (Web application archive) + +- [scm-webapp-1.2.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.2/scm-webapp-1.2.war "wikilink") + +### SCM-Server 1.1 (standalone) + +- [scm-server-1.1-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.1/scm-server-1.1-app.zip "wikilink") +- [scm-server-1.1-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.1/scm-server-1.1-app.tar.gz "wikilink") + +### SCM-WebApp 1.1 (Web application archive) + +- [scm-webapp-1.1.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.1/scm-webapp-1.1.war "wikilink") + +### SCM-Server 1.0 (standalone) + +- [scm-server-1.0-app.zip](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.0/scm-server-1.0-app.zip "wikilink") +- [scm-server-1.0-app.tar.gz](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.0/scm-server-1.0-app.tar.gz "wikilink") + +### SCM-WebApp 1.0 (Web application archive) + +- [scm-webapp-1.0.war](http://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-webapp/1.0/scm-webapp-1.0.war "wikilink") diff --git a/docs/download-snapshot-release.md b/docs/download-snapshot-release.md new file mode 100644 index 0000000000..e9604c7eae --- /dev/null +++ b/docs/download-snapshot-release.md @@ -0,0 +1,14 @@ +Download latest Snapshot release +-------------------------------- + +### SCM-Server 1.61 SNAPSHOT (standalone) + +- [scm-server](https://repository-scm-manager.forge.cloudbees.com/snapshot/sonia/scm/scm-server/1.61-SNAPSHOT/ "wikilink") + +### SCM-WebApp 1.61 SNAPSHOT (Web application archive) + +- [scm-webapp](https://repository-scm-manager.forge.cloudbees.com/snapshot/sonia/scm/scm-webapp/1.61-SNAPSHOT "wikilink") + +### SCM-Cli-Client 1.61 SNAPSHOT (Java application archive) + +- [scm-cli-client](https://repository-scm-manager.forge.cloudbees.com/snapshot/sonia/scm/clients/scm-cli-client/1.61-SNAPSHOT/ "wikilink") diff --git a/docs/download.md b/docs/download.md new file mode 100644 index 0000000000..c0eb06284c --- /dev/null +++ b/docs/download.md @@ -0,0 +1,4 @@ +Download +-------- + +The download page has moved to diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 0000000000..b885ded798 --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,69 @@ +FAQ +--- + +### What are the username and the password in the default installation? + +Username: scmadmin + +Password: scmadmin + +### Where does SCM-Manager store its configuration, log files and the repositories? + +SCM-Manager stores the complete data in a directory called .scm (the +SCM-Manager home directory). This directory is located in the home +directory of the user which is the owner of the process. Except for [rpm +and +deb](https://bitbucket.org/sdorra/scm-manager/wiki/RPM%20and%20DEB%20packages "wikilink") +installations, for those installations the home directory is located at +/var/lib/scm. + +=== How can I change the SCM-Manager home directory? You could change +the SCM-Manager home directory in a few ways: + +- Edit the scm.properties (WEB-INF/classes) file and add the path to + your folder f.e. scm.home=/var/scm +- Set an environment variable SCM\_HOME with the path of your + directory +- Start your application server with a java property called scm.home + f.e. -Dscm.home=/var/scm + +### Can I create a directory structure for scm-manager repositories? + +Yes, since version 1.9 you can create directory structures. You can just +use a \"/\" in the name of the repository to create the structure. For +example the repositories Project/module-1, Project/module-2 and +OtherProject/module-1 will result in the following structure. + +For more information have a look at +. + +### After creation of a new public repository I am trying to clone it anonymously, but I got request of user and password. What am I doing wrong? + +You have to enabled \"Allow Anonymous Access\" at Config-\>General. + +### Where does SCM-Manager stores it log files? + +SCM-Manager stores the log files in a directory called \"logs\" which is +located in the home directory (see question \"Where does SCM-Manager +store its configuration, log files and the repositories?\"). + +### How do I enable trace logging? + +Edit scm-server/conf/logging.xml change the line from: + +to: + +If you are using the war version with an application server such as +tomcat, you have to edit the logback.xml in WEB-INF/classes. + +### How do I install plugins? + +Select Config-\>Plugins. This is supposed to show you a list of all +available plugins to install. It is not a place to configure existing +plugins. Install Package does not take you to the install screen\... If +you only see the installed plugins, see the next question. + +### Why don\'t I see any installable plugins on the plugin tab? + +Is the SCM-Manager server behind a proxy server? Then you have to +configure your proxyserver at Config-\>General. diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 0000000000..7ab4300875 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,54 @@ +Getting started +--------------- + +### Install Java + +SCM-Manager needs an installed Java 1.7 or newer. It is recommended to +use the [oracle jre](http://java.oracle.com/ "wikilink"). How to check +which version of Java is installed: + +### Install the latest version of Java + +Download java from [here](http://java.oracle.com/ "wikilink") and follow +the install instructions. + +### Install SCM-Manager + +Download the latest version of SCM-Manager from +[here](http://www.scm-manager.org/download/ "wikilink"), unpack the .zip +or .tar.gz package and start SCM-Manager with + +### First access + +\|=URL\|\| \|=Username\|scmadmin\| +\|=Password\|scmadmin\| + +### Mercurial + +Subversion and Git will work out of the box, but if you want to use +mercurial with SCM-Manager you have to install mercurial version +\*\*1.9\*\* or newer. + +#### Mercurial on Windows + +The installation of mercurial for SCM-Manager is very complicated on +windows, have a look at: + +- +- +- + +SCM-Manager comes with the option to install packages for windows to +simplify this setup. To use such a package just login as Administrator, +goto \"Repository Types\", click the \"Start Configuration Wizard\" and +Choose \"Download and install\". + +If you see an error like the following: + +Then you have to install [Microsoft Visual C++ 2008 SP1 Redistributable +Package +(x86)](http://www.microsoft.com/en-us/download/details.aspx?id=5582 "wikilink"). +Note you have to use the x86 package and not the x64 package, because we +use 32bit python in SCM-Manager on Windows. For more informations have a +look at +[\#522](https://bitbucket.org/sdorra/scm-manager/issue/552/hg-repo-creation-failed "wikilink"). diff --git a/docs/glassfish.md b/docs/glassfish.md new file mode 100644 index 0000000000..ee3d85f717 --- /dev/null +++ b/docs/glassfish.md @@ -0,0 +1,15 @@ +SCM-Manager with GlassFish +-------------------------- + +To use SCM-Manager 1.6 and above with GlassFish 3.x you have to add a +JVM-Option to the GlassFish configuration. Please follow the steps +below. + +Open the GlassFish Admin-Console (http://yourserver:4848), login as +admin user, goto Configuration-\>JVM Settings, switch to the JVM Options +tab and add the following JVM-Option: + +Restart the GlassFish-Server. + +Source: + diff --git a/docs/healthchecks/svn-incompatible-dbformat.md b/docs/healthchecks/svn-incompatible-dbformat.md new file mode 100644 index 0000000000..da5b5c6c2f --- /dev/null +++ b/docs/healthchecks/svn-incompatible-dbformat.md @@ -0,0 +1,23 @@ +# Incompatible subversion db format # + +SCM-Manager versions prior to 1.36 are creating incompatible subversion repositories, if the subversion option "with 1.7 Compatible" is enabled. This subversion repositories are neither compatible with svn 1.7 nor svn 1.8. These repositories are marked as unhealthy by SCM-Manager version 1.36 and above. + +This incompatible repositories must be converted, before they can be used with SCM-Manager 1.36 and above. Note the convert process can take some time and need some space, because it creates a backup for each converted repository. Follow the steps below to convert all incompatible subversion repositories of one SCM-Manager instance. + +* stop SCM-Manager +* create a full backup of your scm home directory +* download the convert util from [here](https://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-fixsvndb5-cli/1.0.1/scm-fixsvndb5-cli-1.0.1-jar-with-dependencies.jar) +* execute the convert util with your scm home directory as parameter e.g.: + +``` +#!bash + +java -jar scm-fixsvndb5-cli-1.0.1-jar-with-dependencies.jar /path/to/.scm +``` + +* start SCM-Manager + +For more informations have a look at: + +* [Issue #519](https://bitbucket.org/sdorra/scm-manager/issue/519/default-svn-repository-format-setting) +* [Subversion release notes](https://subversion.apache.org/docs/release-notes/1.7.html#revprop-packing) \ No newline at end of file diff --git a/docs/howto-create-a-plugin.md b/docs/howto-create-a-plugin.md new file mode 100644 index 0000000000..c1ce626c1f --- /dev/null +++ b/docs/howto-create-a-plugin.md @@ -0,0 +1,34 @@ +How to create your own plugin +----------------------------- + +### Software Requirements + +- JDK 1.7 or higher + ([download](http://www.oracle.com/technetwork/java/index.html "wikilink")) +- Maven 3 or higher ([download](http://maven.apache.org/ "wikilink")) + +### Create plugin + +### Test the plugin + +### Samples + +- [Hello + World](https://bitbucket.org/sdorra/scm-manager/src/1.x/scm-samples/scm-sample-hello/ "wikilink") +- [Authentication + Plugin](https://bitbucket.org/sdorra/scm-manager/src/1.x/scm-samples/scm-sample-auth/ "wikilink") + +### Further reading + +- [Injection framework - Google + Guice](http://code.google.com/p/google-guice/ "wikilink") +- [Restful WebService - + Jersey](http://jersey.java.net/nonav/documentation/latest/user-guide.html "wikilink") +- [ XML transformation - JAXB](http://jaxb.java.net/guide/ "wikilink") +- [User interface - Ext + JS](http://www.sencha.com/products/extjs3/ "wikilink") + +### Questions/Help + +If you have questions or you need help, please write to the mailing +list: diff --git a/docs/injectionObjects.md b/docs/injectionObjects.md new file mode 100644 index 0000000000..a1848e1e20 --- /dev/null +++ b/docs/injectionObjects.md @@ -0,0 +1,25 @@ +Injection Objects +----------------- + +- [AdministrationContext](http://docs.scm-manager.org/apidocs/latest/sonia/scm/web/security/AdministrationContext.html "wikilink") +- [AuthenticationManager](http://docs.scm-manager.org/apidocs/latest/sonia/scm/web/security/AuthenticationManager.html "wikilink") +- [CGIExecutorFactory](http://docs.scm-manager.org/apidocs/latest/sonia/scm/web/cgi/CGIExecutorFactory.html "wikilink") +- [CacheManager](http://docs.scm-manager.org/apidocs/latest/sonia/scm/cache/CacheManager.html "wikilink") +- [ChangesetViewerUtil](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/ChangesetViewerUtil.html "wikilink") +- [CipherHandler](http://docs.scm-manager.org/apidocs/latest/sonia/scm/security/CipherHandler.html "wikilink") +- [EncryptionHandler](http://docs.scm-manager.org/apidocs/latest/sonia/scm/security/EncryptionHandler.html "wikilink") +- [FileSystem](http://docs.scm-manager.org/apidocs/latest/sonia/scm/io/FileSystem.html "wikilink") +- [GroupManager](http://docs.scm-manager.org/apidocs/latest/sonia/scm/group/GroupManager.html "wikilink") +- [HttpClient](http://docs.scm-manager.org/apidocs/latest/sonia/scm/net/HttpClient.html "wikilink") +- [HttpServletRequest](http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletRequest.html "wikilink") +- [HttpServletResponse](http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletResponse.html "wikilink") +- [HttpSession](http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html "wikilink") +- [KeyGenerator](http://docs.scm-manager.org/apidocs/latest/sonia/scm/security/KeyGenerator.html "wikilink") +- [RepositoryBrowserUtil](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/RepositoryBrowserUtil.html "wikilink") +- [RepositoryManager](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/RepositoryManager.html "wikilink") +- [ + RepositoryRequestListenerUtil](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/RepositoryRequestListenerUtil.html "wikilink") +- [ScmConfiguration](http://docs.scm-manager.org/apidocs/latest/sonia/scm/config/ScmConfiguration.html "wikilink") +- [StoreFactory](http://docs.scm-manager.org/apidocs/latest/sonia/scm/store/StoreFactory.html "wikilink") +- [UserManager](http://docs.scm-manager.org/apidocs/latest/sonia/scm/user/UserManager.html "wikilink") +- [WebSecurityContext](http://docs.scm-manager.org/apidocs/latest/sonia/scm/web/security/WebSecurityContext.html "wikilink") diff --git a/docs/java-client-api.md b/docs/java-client-api.md new file mode 100644 index 0000000000..ba00b0a3db --- /dev/null +++ b/docs/java-client-api.md @@ -0,0 +1,29 @@ +Java Client API +--------------- + +### Maven + +To use the SCM-Manager Java Client API you have to configure the +SCM-Manager maven repository in your pom.xml: + +And you have to define the dependency to the api and one implementation: + +### Usage + +First you have to create a session to your SCM-Manager instance: + +After you have successfully created a client session you can nearly +execute every action which is available from the web interface. But do +not forget to close the session after you have finished your work: + +### Examples + +Create a new repository: + +Get the last 20 commits of a repository: + +Print the content of a file in a repository: + +Create a new user: + +Add a user to an existing group: diff --git a/docs/jenkins-plugin.md b/docs/jenkins-plugin.md new file mode 100644 index 0000000000..d5e6c691c6 --- /dev/null +++ b/docs/jenkins-plugin.md @@ -0,0 +1,57 @@ +scm-jenkins-plugin +------------------ + +The jenkins plugin will ping your Jenkins CI server when a new commit is +pushed to SCM-Manager. In SCM-Manager exists two differnt methods to +trigger jenkins builds. + +### Per repository configuration + +The \"per repository configuration\" method requires a configuration for +each repository. The following parameters must be configured: + +- The url of the jenkins server inclusive the context path e.g.: + +- The name of the jenkins job +- Jenkins trigger authentication token +- Username of the jenkins user. This option is only required if your + jenkins job does not allow anonymous access +- API Token of the jenkins user. This token is used for + authentication. You could get your API Token from your jenkins + server at + + +Note for this setup the jenkins job have to be configured for remote +trigger (Trigger builds remotely). + +### Global configuration + +The global configuration has only support for git and mercurial. If you +want to use the jenkins plugin with subversion repositories, you have to +use the \"per repository configuration\". The global configuration +method uses push notifications from the git-plugin and mercurial-plugin +for jenkins. SCM-Manager will send the url of the changed repository +after each successful push, jenkins will build each repository which +this scm url and enabled polling. + +To use the \"global configuration\" method, you have to note a few +things: + +- You have to insert the url to your jenkins server + (Config-\>General-\>Jenkins Configuration-\>Url) the url must + conatin the context path of jenkins e.g.: + . +- Be sure the base url contains the full qualified hostname to your + scm-manager server (Config-\>General-\>General Settings-\>Base Url). +- All jenkins repositories have to be configured for polling (the + interval does not matter, a good value would be once a day). +- If you are using \"Matrix based security\" on jenkins, be sure you + use at least version 1.43 of the mercurial-plugin for jenkins. + +#### Links + +- +- +- +- +- diff --git a/docs/jira-plugin.md b/docs/jira-plugin.md new file mode 100644 index 0000000000..d8c62d076b --- /dev/null +++ b/docs/jira-plugin.md @@ -0,0 +1,48 @@ +scm-jira-plugin +--------------- + +The plugin enables the following features to integrate Atlassian JIRA to +SCM-Manager: + +- Turn issue keys in changeset descriptions to links for jira +- Updates a Jira issue if the issue key is found in a changeset + description +- Close a Jira issue if the issue key and a auto close (close, fix, + resolve, \...) word is found in the changeset description + +### Installation and configuration + +1. Enable remote api calls in jira + (https://developer.atlassian.com/display/JIRADEV/JIRA+XML-RPC+Overview) +2. Install scm-jira-plugin over the plugin center in scm-manager +3. Be sure that your jira installation accepts remote calls + ([Screenshot](screenshots/scm-jira-plugin/jira-plugin-01.png "wikilink")) +4. Configure the plugin, select a repository to enable the + scm-jira-plugin for this repository + ([Screenshot](screenshots/scm-jira-plugin/jira-plugin-02.png "wikilink")) +5. \*\*Note: \*\* For the auto close and update feature it is necessary + that users have the same names and passwords in SCM-Manager and Jira + +### Auto Close Words (Since v. 1.17) + +From version 1.17 the plugin offers the possibility of mapping auto +close words with transition that are configured in JIRA. + +- Auto Close Words are a comma separated list +- Auto Close Words are not case sensitive +- Auto Close Words can contain spaces +- If the Auto Close Word is identical to the transition name, just add + the transition name to the list (e.g. transition name = start + progress \--\> Auto Close Word = start progress) +- If the Auto Close Word is different from the transition name you + have to use the mapping function (e.g. transition name = start + progress, Auto Close Word = begin \--\> you have to add \'begin = + start progress\' to the configuration of the plugin. + +### Screenshots + +[](screenshots/scm-jira-plugin/jira-plugin-01.png "wikilink") +[](screenshots/scm-jira-plugin/jira-plugin-02.png "wikilink") +[](screenshots/scm-jira-plugin/jira-plugin-03.png "wikilink") +[](screenshots/scm-jira-plugin/jira-plugin-04.png "wikilink") +[](screenshots/scm-jira-plugin/jira-plugin-05.png "wikilink") diff --git a/docs/mail-plugin.md b/docs/mail-plugin.md new file mode 100644 index 0000000000..1e85501cb9 --- /dev/null +++ b/docs/mail-plugin.md @@ -0,0 +1,20 @@ +scm-mail-plugin +=============== + +The mail plugin provides an central api for sending e-mails. This api +can be used by other plugins. + +Configuration +------------- + +The scm-mail-plugin provides a single place for the mail server +configurations at Config-\>General-\>Mail Settings. + +API Usage +--------- + +First you have to add the dependency to your pom.xml e.g.: + +But note you should use at least version 1.15 of scm-plugins as parent. + +Now you can use the MailService class via injection e.g.: diff --git a/docs/mantisbt-plugin.md b/docs/mantisbt-plugin.md new file mode 100644 index 0000000000..badc011307 --- /dev/null +++ b/docs/mantisbt-plugin.md @@ -0,0 +1,9 @@ +== scm-mantisbt-plugin == + +The plugin enables the following features to integrate [MantisBT](https://www.mantisbt.org/) to SCM-Manager: + +* Turn issue keys in changeset descriptions to links for MantisBT +* Updates a MantisBT issue if the issue key is found in a changeset description +* Change status of a MantisBT issue if the issue key and a status (e.g. resolved) word is found in the changeset description + +**Note**: The issue keys must be defined with a 7 digit number (e.g. 0000001) \ No newline at end of file diff --git a/docs/nginx.md b/docs/nginx.md new file mode 100644 index 0000000000..7bc74036fc --- /dev/null +++ b/docs/nginx.md @@ -0,0 +1,49 @@ +# SCM-Server and Nginx # + +## Nginx configuration ## + +``` +#!text + +location /scm { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $http_host; + proxy_pass http://localhost:8080; +} +``` + +## SCM-Server conf/server-config.xml ## + +Uncomment following line: + +``` +#!xml +true +``` + +Example: + +``` +#!xml + + + + + + + + + + + true + + + +``` + +## SCM-Manager Configuration version 1.5 and above ## +* Login as an admin user and select "General" +* Set the "Base Url" to the URL of Nginx (**warning:** don't check "Force Base Url") +* Save the new new settings \ No newline at end of file diff --git a/docs/pathwp-plugin.md b/docs/pathwp-plugin.md new file mode 100644 index 0000000000..d57c912202 --- /dev/null +++ b/docs/pathwp-plugin.md @@ -0,0 +1,33 @@ +Path Write Protect Plugin +------------------------- + +### Installation + +- Login in as administrator +- Open Plugins +- Install scm-pathwp-plugin +- Restart your applicationserver + +### Usage + +After the restart you should see a \"Path write protect\" tab for each +repository. On this tab you are able to set path write protection for +users and groups. Here are some rules for the usage of the pathwp +plugin: + +- Administrators and repository owner have always write access. +- Grant write permissions on the \"Permission\" tab for every user or + group who should write to any file or folder in the repository. +- If the pathwp plugin is enabled, nobody can write to the repository + expect administrators, repository owners and the specified rules. +- To protect a complete folder use a star at the end of the path + (e.g.: trunk/\*) + +Examples +-------- + +\|=Path \|=Name \|=Group Permission \|=Description \| \| \* \| scmadmin +\| false \| user scmadmin has write access to the whole repository \| \| +trunk/\* \| development \| true \| group development has write access to +the trunk directory \| \| trunk/joe.txt \| joe \| false \| user joe has +write access to the file trunk/joe.txt \| diff --git a/docs/plugin-descriptor.md b/docs/plugin-descriptor.md new file mode 100644 index 0000000000..431f0712a3 --- /dev/null +++ b/docs/plugin-descriptor.md @@ -0,0 +1,34 @@ +Plugin Descriptor +----------------- + +The plugin descriptor contains informations and instructions for the +scm-manager to integrate the plugin. The descriptor is located at +META-INF/scm/plugin.xml in the package of a plugin. + +\|=Element \|=Description \|=Multiple \| \| plugin \| Root element of +the plugin descriptor \| \| \| plugin/condition \| Plugin condifitions +\| \| \| plugin/condition/arch \| Processor architecture (x86/amd64) \| +\| \| plugin/condition/min-version \| Minimum version of SCM-Manager \| +\| \| plugin/condition/os \| Operation System \| \| \| +plugin/condition/os/name \| Name of the Operating System \| X \| \| +plugin/information \| Contains informations of the plugin for the plugin +backend \| \| \| plugin/information/artifactId \| Maven artifact id \| +\| \| plugin/information/author \| The Author of the plugin \| \| \| +plugin/information/category \| Category of the plugin \| \| \| +plugin/information/description \| Description of the plugin \| \| \| +plugin/information/groupId \| Maven group id \| \| \| +plugin/information/name \| Name of the plugin \| \| \| +plugin/information/screenshots \| Contains screenshots of the plugin \| +\| \| plugin/information/screenshots/screenshot \| Single screenshot of +the plugin \| X \| \| plugin/information/url \| The url of the plugin +homepage \| \| \| plugin/information/version \| The current version of +the plugin \| \| \| plugin/information/wiki \| The url of a wiki page \| +\| \| plugin/packages \| Java packages which are being searched for +extensions \| \| \| plugin/packages/package \| Single Java packages +which is being searched for extensions \| X \| \| plugin/resources \| +Contains resources for the web interface (stylesheets and JavaScript +files) \| \| \| plugin/resources/script \| JavaScript file for the web +interface \| X \| \| plugin/resources/stylesheet \| Stylesheet for the +web interface \| X \| + +Example of the plugin descriptor: diff --git a/docs/redmine-plugin.md b/docs/redmine-plugin.md new file mode 100644 index 0000000000..69ca19204d --- /dev/null +++ b/docs/redmine-plugin.md @@ -0,0 +1,29 @@ +Redmine Plugin +-------------- + +Is based on +[scm-jira-plugin](https://bitbucket.org/sdorra/scm-manager/wiki/jira-plugin "wikilink") + +The plugin enables the following features to integrate SCM-Manager to +[Redmine](http://www.redmine.org/ "wikilink"): + +- Turn issue keys in changeset descriptions to links for redmine +- Updates a redmine issue if the issue key is found in a changeset + description +- Close a Redmine issue if the issue key and a auto close (close, fix, + resolve, \...) word is found in the changeset description + +### Installation and configuration + +1. Enable redmine rest authentication + (http://www.redmine.org/projects/redmine/wiki/Rest\_api, basically + \'you have to check Enable REST API in Administration -\> Settings + -\> Authentication\' ) +2. Install redmine-plugin over the plugin center in scm-manager +3. Configure the plugin, select a repository to enable the + redmine-plugin for this repository +4. To link issues commit must be match the following: \'(\#issue\_id) + your commit message\' +5. \*\*Note: \*\* For the auto close and update feature it is necessary + that users have the same names and passwords in SCM-Manager and + Redmine diff --git a/docs/release notes 1.19 - 1.0.md b/docs/release notes 1.19 - 1.0.md new file mode 100644 index 0000000000..0368df8ba3 --- /dev/null +++ b/docs/release notes 1.19 - 1.0.md @@ -0,0 +1,626 @@ +SCM-Manager 1.19 +---------------- + +- - improvements\*\* + +- implement new template api which uses mustache as default engine +- display error on startup if home directory is not writable +- use cached thread pool for async hooks to improve memory consumption +- added support for jersey viewables +- do not show browser basic authentication dialog on session timeout + + + +- - fixed bugs\*\* + +- fix npe on windows startup, see \<\\> + + + +- - library updates\*\* + +- update javahg to version 0.4 +- update enunciate to version 1.26 + +SCM-Manager 1.18 +---------------- + +- - improvements\*\* + +- use javahg for mercurial commit, source, blame, content and diff + views +- support for tags in source view +- support for branches in commit view +- improve svnkit logging, see \<\\> +- improve mercurial error messages, see \<\\> +- allow configuration of mercurial repository encoding +- warn if plugin artifact checksum not match + + + +- - fixed bugs\*\* + +- fix wrong cache result in blame command +- fix wrong escaped subversion commit messages, see \<\\> +- fix wrong directory content in source browser, see \<\\> +- fix missing error messages for some json stores +- fix missing localizations +- fix wrong unarchive message +- added missing dtd to server-config.xml + + + +- - library updates\*\* + +- update ehcache to version 2.6.0 +- update jetty to version 7.6.5.v20120716 +- update google guava to version 13.0 +- update jersey to version 1.13 + +SCM-Manager 1.17 +---------------- + +- - improvements\*\* + +- new repository api +- log scm-manager version on boot +- use copy on read for repository api caches to fix reference problems + with pre processor api +- added api for blame line pre processor +- added compatibility modes for svn 1.7, see \<\\> +- added warning message if javascript is disabled, see \<\\> +- fix ugly login error message, see \<\\> +- Repository links should use relative paths, see \<\\> +- Added locale and timezone to support informations + + + +- - fixed bugs\*\* + +- fix detection of scm-server servlet container +- fix svn version informations +- fix mercurial version informations +- fix mercurial import with non valid mail address in contact field, + see \<\\> +- disable ssl validation for mercurial hook detection, see \<\\> +- fix basic authentication for systems with turkish locale, see + \<\\> + + + +- - library updates\*\* + +- update jgit to version 2.0.0.201206130900-r +- update svnkit to version 1.7.5-1 +- update logback to version 1.0.6 +- update slf4j to version 1.6.6 + +SCM-Manager 1.16 +---------------- + +- - improvements\*\* + +- improve mercurial hook error handling +- mercurial hook url auto detection +- cleanup empty directories during repository delete, see \<\\> +- use urllib2 for urlopen to be more campatible to different python + versions, see \<\\> +- redirect to repository root help when accessing repository type root + url, see \<\\> +- Add a way to deactivate users, see \<\\> +- small performance improvements +- store svn uuid as property on repository creation +- allow basic authentication for rest endpoint + /api/rest/authentication +- added api for store listeners +- added option to encode svn responses with gzip + + + +- - fixed bugs\*\* + +- do not encode changeset author name, see \<\\> +- pass shell environment to mercurial cgi process, see \<\\> +- fix mercurial encoding problem on windows, see \<\\> +- fix changing resource order for plugins +- fix repository name validation, see \<\\> + + + +- - library updates\*\* + +- update jetty to version 7.6.4.v20120524 +- update logback to version 1.0.4 +- update jersey-client to version 1.12 +- update args4j to version 2.0.21 +- update svnkit to version 1.7.4-1.v1 + +SCM-Manager 1.15 +---------------- + +- - improvements\*\* + +- added information page for service requests +- templates can be loaded from webapp context or classpath +- allow sourcing in /etc/default/scm-server when available, see + \<\\> +- display user informations on the bottom of the page, see \<\\> +- improve mercurial error messages, see \<\\> +- improve logging for plugin loading +- added public and archived option to modify-repository sub command of + scm-cli-client + + + +- - fixed bugs\*\* + +- disable jsvc arch call to fix wrong cpu problem on darwin i386 + daemon +- fix wrong german localization, see \<\\> +- fix build with jdk7 +- fix bug in repository name validation, see \<\\> and + \<\\> +- fix subversion path not found on merge, see \<\\> +- fix subversion lock results in NoSuchMethodError, see \<\\> +- fix possible xss in Acitivities View, Repository Commits, see + \<\\> +- fix plugin installation failed with enabled proxy server, see + \<\\> +- fix wrong changeset url in ui url provider + + + +- - library updates\*\* + +- update google guava to version 12.0 +- update logback to version 1.0.3 + +SCM-Manager 1.14 +---------------- + +- - improvements\*\* + +- archive for repositories, see \<\\> +- simpler api to create other backend as the default xml version +- api for overriding core components +- extensionpoint for ServletContextListener +- improved error dialog in user interface, see \<\\> +- improve german locale + + + +- - fixed bugs\*\* + +- fix wrong log messages +- fix repository creation failure leaves empty directory, see + \<\\> +- fix mercurial repository source does not display with + subrepositories, see \<\\> +- fix history repository selection + + + +- - library updates\*\* + +- update jetty to version 7.6.3.v20120416 +- update logback to version 1.0.1 +- update ehcache to version 2.5.2 +- update commons-daemon to version 1.0.10, see \<\\> + +SCM-Manager 1.13 +---------------- + +- - improvements\*\* + +- more robust python modules to access mercurial resources +- added disable option to each core plugin + + + +- - fixed bugs\*\* + +- fix changing etags for collections +- fix missing hooks of mercurial repository import, see \<\\> +- fix anonymous push to public mercurial repositories, see \<\\> +- execute \"hg init\" in the scm home directory instead of current + working directory, see \<\\> +- use repository directory as working directory for git repository + hooks, see \<\\> +- do not fail on non basic authorization header +- fix mercurial encoding problem, see \<\\> +- fix issue-94 can\'t edit users, see \<\\> + + + +- - library updates\*\* + +- update freemarker to version 2.3.19 +- update jetty to version 7.6.1.v20120215 +- update jgit to version 1.3.0.201202151440-r +- update jersey to version 1.12 + +SCM-Manager 1.12 +---------------- + +- - improvements\*\* + +- new theme +- support for mercurial 2.1 +- import of existing repositories, see \<\\> +- new changeset view +- show categories in plugin overview +- added api for project stages +- added api to fetch a single changeset + + + +- - fixed bugs\*\* + +- allow usernames \< 3 chars, see pull request 2 +- git: use author ident instead of commit ident +- fix plugin resource caching bug +- mercurial: fix getChangesets of post receive hooks +- fix history bug during repository selection + + + +- - library updates\*\* + +- update jetty to version 7.6.0.v20120127 +- update maven for aether to version 3.0.4 +- update ehcache to version 2.5.1 + +SCM-Manager 1.11 +---------------- + +- - improvements\*\* + +- allow to fetch repositories by type and name +- added icon for tags +- show parent revision in changeset viewer +- added repository browser support for external git submodules + + + +- - fixed bugs\*\* + +- fix wrong svn diff +- fix wrong revision for sub module repository browser +- fix basic authentication access with a colon in the user password, + see \<\\> +- fix git hooks for repository structures +- fix subversion hooks on windows with repository structure +- fix mercurial hooks on windows with repository structure +- fix wrong mercurial revisions in urls +- fix svn hooks for repositories located on soft links +- fix bug in appendParameter method of UrlBuilder +- truncate long svn status lines, see \<\\> + +SCM-Manager 1.10 +---------------- + +- - improvements\*\* + +- small performance improvements +- added basic support for external mercurial subrepositories +- added repository request listener api +- added file object pre processor api + + + +- - fixed bugs\*\* + +- fix vertical scrollbar in webkit based browsers +- fix mercurial push with symbolic links, see \<\\> +- fix wrong decoding in hgweb, see \<\\> +- fix plugin installation with a proxy server, see \<\\> +- fix \"Allow anonymous access\" breaks access to private + repositories, see \<\\> + + + +- - library updates\*\* + +- update args4j to version 2.0.19 +- update aether to version 1.13.1 +- update jersey to version 1.11 +- update jgit to version 1.2.0.201112221803-r +- update svnkit to version 1.3.7.1 + +SCM-Manager 1.9 +--------------- + +- - improvements\*\* + +- Support for directory structure, see \<\\> +- Added webservice method to fetch repository by its type and name +- Mercurial auto configuration support for homebrew installations +- Improve httpclient api to support headers and authentication +- Reimplemented browser history functions +- SCM-Manager is now complete bookmark-able +- Added api to create urls for the interface or the webservice +- Improve interface performance by reducing Ext.getCmp calls +- Added history panel for a single file, see pull request 1 +- Added wiki categories, wiki and screenshots to plugin descriptor +- Added version and server-version to scm-cli-client +- Improve performance by better repository caching + + + +- - fixed bugs\*\* + +- fix bug in get method of repository resource +- fix issue \"Administrator flag is disabled after login\", see + \<\\> +- Allow usernames with spaces, see \<\\> +- fix rolling file policy of scm-manager logging +- fix mercurial hooks with configured force base url +- fix mercurial hooks with apache mod\_proxy, see \<\\> + + + +- - library updates\*\* + +- update jersey to version 1.10 +- update slf4j to verion 1.6.4 +- update logback to version 1.0.0 +- update jetty to version 7.5.4.v20111024 + +SCM-Manager 1.8 +--------------- + +- - improvements\*\* + +- support for pre receive hooks, see \<\\> +- scm-maven-plugin are now useable for integration tests +- added readme file to server bundles +- support for mercurial 1.9 +- improve mercurial performance +- support for blame/annotation view, special thanks to narva.com +- support for Diff views of changesets +- added basic authentication support to restful webservice +- generate webservice documentation +- improve javadoc +- download for single files from repository + + + +- - fixed bugs\*\* + +- Fixed bug in git repositories without head + + + +- - library updates\*\* + +- update jetty to version 7.5.1.v20110908 +- update aether to version 1.13 +- update ehcache to version 2.4.5 +- update logback to version 0.9.30 +- update jgit to version 1.1.0.201109151100-r +- update jersey to version 1.9 + +SCM-Manager 1.7 +--------------- + +- - improvements\*\* + + + +- added repository search and repository type filter to user + interface, see \<\\> +- handle browser back and forward buttons +- improve output of mercurial hooks +- added injection support for authentication, group, repository, user + and hook listeners +- added cipher api +- select new repository after creation +- added option to configure the scm home directory with a classpath + resource, see \<\\> +- support for proxyservers with authentication, see + [ko7eGU88rB4](https://groups.google.com/forum/#!topic/scmmanager/ko7eGU88rB4 "wikilink") +- improve changeset pre processor api +- improve support for repository, group and user properties + + + +- - fixed bugs\*\* + + + +- show installed plugins without internet connection, see \<\\> +- fix git svn clone, see \<\\> +- fix wron chanllenge bug in mercurial hook management +- fix jdk7 build bug +- fix a classloading problem in scmp:run maven goal +- fix bug in property xml serialization + + + +- - library updates\*\* + + + +- update ehcache to version 2.4.4 +- update slf4j to version 1.6.2 +- update junit to version 4.9 + +SCM-Manager 1.6 +--------------- + +- - note\*\* + +- GlassFish 3.x users have to change their GlassFish configuration, + see [SCM-Manager with GlassFish](glassfish "wikilink") + + + +- - improvements\*\* + +- added an api for repository hooks +- support for git post-receive hook +- improved performance for source and commit viewer +- added loading mask of commit viewer +- added run as admin api +- improved validaton of user, group and repository names +- simplify plugin development +- added icons to member and permission grid +- added properties to repositories, users and groups + + + +- - fixed bugs\*\* + +- fixed deployment bug on some tomcat configurations, \<\\> +- fixed NullPointerException with empty git repositories, \<\\> +- fixed source and commit browser for git repositories without HEAD + ref +- fixed missing updates in plugin overview +- fixed plugin update +- fixed xml representation of changeset webservice resource +- fixed error 500 in mercurial repository browser with configured + python path + + + +- - library updates\*\* + +- upgraded jetty to version 7.4.5.v20110725 +- upgraded wagon to version 1.0 +- upgraded ehcache to version 2.4.3 +- upgraded aether to version 1.12 + +SCM-Manager 1.5 +--------------- + +- - note\*\* + +- mod\_proxy users have to change their configuration, see [mod\_proxy + configuration](https://bitbucket.org/sdorra/scm-manager/wiki/apache/apache-mod_proxy "wikilink") + + + +- - improvements\*\* + +- added a \"repositorybrowser\" +- added missing error messages on session timeout +- support for mod\_proxy forward with ssl, see \<\\> +- added toolbar icons for add, remove and refresh action + + + +- - fixed bugs\*\* + +- fixed javascript error on loginwindow cancelbutton click +- fixed bug with non default git repository directory, see \<\\> + + + +- - library updates\*\* + +- upgraded jersey to version 1.8 +- upgraded jgit to version 1.0.0.201106090707-r + +SCM-Manager 1.4 +--------------- + +- - improvements\*\* + +- support for IE 9 +- using tabs for group details + + + +- - fixed bugs\*\* + +- fixed svn move command, see \<\\> +- fixed svn log command, see \<\\> + + + +- - library updates\*\* + +- upgraded jersey-ahc-client to version 1.0.2 +- upgraded jersey-client to version 1.7 +- upgraded logback to version 0.9.29 +- upgraded extjs to version 3.4.0 + +SCM-Manager 1.3 +--------------- + +- - improvements\*\* + +- added a client api +- added a commandline client +- added support for proxy servers, see \<\\> +- improved plugin page +- improved session timeout handling, see \<\\> +- move logging configuration to \"conf\" folder of scm-server + + + +- - fixed bugs\*\* + +- svn: fixed wrong content-length in DAVServlet, see \<\\> +- svn: fixed wrong encoding, see \<\\> + + + +- - library updates\*\* + +- upgraded jetty to version 7.4.2.v20110526 +- upgraded google guice to version 3.0 +- upgraded ehcache to version 2.4.2 +- upgraded freemarker to version 2.3.18 +- upgraded jersey to version 1.7 + +SCM-Manager 1.2 +--------------- + +- - improvements\*\* + +- added a \"changesetviewer\" +- using tabs for repository configuration +- added a configuration wizard for mercurial +- the date format is now configurable +- added a repository information panel +- new cgi api +- added subversion compatibility switches, see \<\\> + + + +- - fixed bugs\*\* + +- fixed ssl support in scm-server, see \<\\> +- fixed ssl support in mercurial cgi servlet, see \<\\> +- fixed a browser window resize bug, see \<\\> +- fixed bug with spaces in the scm home path, see \<\\> + + + +- - library updates\*\* + +- upgrade freemarker to version 2.3.16 +- upgrade jersey to version 1.6 +- upgrade ehcache to version 2.4.1 +- upgrade jgit to version 0.12.1 + +SCM-Manager 1.1 +--------------- + +- Support for Unix-Daemons and Windows-Services +- Support for localization +- German localization +- Help tooltips +- New Plugin-Backend diff --git a/docs/release notes 1.39 - 1.20.md b/docs/release notes 1.39 - 1.20.md new file mode 100644 index 0000000000..310c606380 --- /dev/null +++ b/docs/release notes 1.39 - 1.20.md @@ -0,0 +1,641 @@ +SCM-Manager 1.39 +---------------- + +- - improvements\*\* + +- created rpm and deb packages for scm-server +- improve error handling of permission system +- set DefaultCGIExecutor logger level to debug instead of trace +- added tcpip dependency for scm-server windows service +- implemented health checks for mercurial and git repositories +- implemented marker interface for plugin class loaders to make it + easier to find class loader leaks + + + +- - fixed bugs\*\* + +- fix mailto links +- fix automatic start as service on windows server 2012, see \<\\> +- fix open webserver port \< 1024 as non privileged user +- encode user and group names for rest requests, see \<\\> +- translate path for scmp plugin installation, see \<\\> +- remove antiJARLocking attribute from context.xml, because it is no + longer supported by tomcat 8 +- fix possible class loader leak +- fix IndentXMLStreamWriterTest on windows +- fix marshalling exception on plugin installation with rest api, see + \<\\> + + + +- - library updates\*\* + +- update mustache to version 0.8.15 +- update jgit to version 3.4.0.201406110918-r +- update commons-beanutils to version 1.9.2 +- update commons-daemon to version 1.0.15 + +SCM-Manager 1.38 +---------------- + +- - fixed bugs\*\* + +- fix NoClassDefFoundError in scm-cli-client, see issue \<\\> +- escape backslash in checkout url, see \<\\> +- fixed a circular guice dependency +- do not use subject \"run as\" for administration context, because it + could affect other threads +- fix a linkage error on Util.nonNull, see \<\\> +- fix wrong date format in logging configuration + +SCM-Manager 1.37 +---------------- + +- - improvements\*\* + +- improved git error messages for failed authentication and not enough + permissions +- improve error handling for failed authentication and not enough + privileges +- added date to log pattern +- update last modified date of a repository after each push +- added hidden last modified column to repository grid + + + +- - fixed bugs\*\* + +- resolve dependency resolution conflicts, see \<\\>, + \<\\> and \<\\> +- fix basic authentication for urls which contain a username but + without password, see \<\\> +- subversion repositories are not closed correctly, see \<\\> +- use a more robust check if html5 localStorage is available, see + \<\\> +- subversion cannot delete properties, see \<\\> + + + +- - library updates\*\* + +- update jetty to version 7.6.15.v20140411 +- update svnkit to version 1.8.5-scm1 +- update jgit to version 3.3.2.201404171909-r +- update logback to version 1.1.2 +- update slf4j to version 1.7.7 +- update commons-code to version 1.9 + +SCM-Manager 1.36 +---------------- + +- - improvements\*\* + +- added feature to set custom realm description, see [PR + 16](https://bitbucket.org/sdorra/scm-manager/pull-request/16/add-feature-to-set-custom-realm "wikilink") +- added option to skip failed authenticators +- cli-client: allow retrieving repositories by using type/name instead + of repository id +- implemented repository health checks + + + +- - fixed bugs\*\* + +- solve classloading issues for plugin classes +- fix changing passwords which a shorter than 5 chars, see issue + \<\\> +- fix possible npe on authentication, see issue \<\\> +- fix exception on login, if an external authenticator returns a + changed user object +- basic auth filter should return 403 instead of 401 for wrong + credentials, see issue \<\\> +- fix bug with passwords which contains a colon, see \<\\> +- fix double slash for append and getCompleteUrl of HttpUtil +- fix bug with some special chars in SearchUtil +- fix mercurial out of scope exception on startup + + + +- - library updates\*\* + +- update args4j 2.0.26 +- update svnkit to version 1.8.4-scm1 +- update jgit to 3.3.0.201403021825-r +- update shiro to version 1.2.3 +- update jersey to version 1.18.1 +- update logback to version 1.1.1 +- update slf4j to version 1.7.6 +- update commons-beanutils to version 1.9.1 + +SCM-Manager 1.35 +---------------- + +- - improvements\*\* + +- Spanish translation, see [PR + 9](https://bitbucket.org/sdorra/scm-manager/pull-request/9/spanish-translation "wikilink") + thanks to [Ángel L. + García](https://bitbucket.org/algarcia "wikilink") +- added auto-login filter system, see [PR + 4](https://bitbucket.org/sdorra/scm-manager/pull-request/4/modifications-for-auto-login "wikilink") + thanks to [Clemens Rabe](https://bitbucket.org/seeraven "wikilink") +- added property to disable escaping for blame, browse, log command + and hooks, see \<\\> +- remove cancel button on login window if anonymous access is + disabled, see \<\\> +- syntax highlighting for c, h, hh and cc files, see [PR + 11](https://bitbucket.org/sdorra/scm-manager/pull-request/11/c-java-extensions-added-to "wikilink") + thanks to [pankaj azad](https://bitbucket.org/pankajazad "wikilink") +- custom subversion collection renderer +- use full message instead of short message for git commits, see + \<\\> +- improved german translation, see [PR + 5](https://bitbucket.org/sdorra/scm-manager/pull-request/5/german-translation-adjusted/diff "wikilink") + thanks to [Ahmed Saad](https://bitbucket.org/saadous "wikilink") +- use same validation rules for user and group names, see \<\\> +- added brushes for applescript and sass + + + +- - fixed bugs\*\* + +- fixed file leak, see \<\\> +- fixed double escaping, see \<\\> +- fixed python path for scm mercurial packages, see \<\\> +- remove setContentLength with -1 to fix CGI on jetty 9, see \<\\> +- retry delete up to 5 sec to fix problem with windows locking, see + \<\\> +- fix wrong commit and source url on git repositories with reverse + proxy, see \<\\> +- use work directory instead of temp directory for scm-manager webapp, + see \<\\> +- fix wrong sql brush filename, see \<\\> + + + +- - library updates\*\* + +- update jetty to 7.6.14.v20131031 +- update jersey to 1.18 +- update svnkit to 1.7.10-scm4 +- update jgit to 3.2.0.201312181205-r +- update enunciate to 1.28 +- update mustasche to 0.8.14 +- update javahg to 0.7 + +SCM-Manager 1.34 +---------------- + +- - improvements\*\* + +- allow multi line mercurial messages +- change order of permission column and use a more robust cell editor + check +- added api for changing diff output format +- added support for glassfish 4, see \<\\> +- added configuration changed event +- implement login attempt handler to handle failed authentications + + + +- - fixed bugs\*\* + +- fix bug with user events and decorated user managers +- fix hg push fails with \'URLError\' object has no attribute + \'read\', see \<\\> +- fix CommandNotSupportedException for git outgoing command +- fix detection of non bare repositories as pull source +- fix scm behind reverse proxy on root: svn not working, see \<\\> +- fix permission caching for logged in users +- fix possible npe with unpacked war files, see \<\\> +- fix escaping bug in SearchUtil, see \<\\> +- avoid duplicate members in groups, see \<\\> +- fix store and load method of xml configuration entry store +- fix out of scope exception on access hgcontext, see \<\\> + + + +- - library updates\*\* + +- update jetty to 7.6.13.v20130916 +- update guava to version 15.0 + +SCM-Manager 1.33 +---------------- + +- - improvements\*\* + +- added api to bypass changeset pre processors during hook +- added api to send messages back to scm client during hook +- create scm-client-impl jar with all dependencies +- introduce Event annotation to mark event classes which are + receiveable over the event system + + + +- - fixed bugs\*\* + +- fix login window scrollbars on linux with firefox 21, see \<\\> +- fix name resolution for git repositories with working copy, see + \<\\> +- fix handling of \"svn lock\", see \<\\> +- fix handling of \"svn copy\", see \<\\> +- clear authorization cache, when a group has changed, see \<\\> +- fix wrong svn hook error messages +- fix wrong sytem account e-mails, use scm-manager.org instead of + scm-manager.com +- implement svn cat during pre receive repository hooks +- fix handling of pending changesets during pre receive repository + hooks + + + +- - library updates\*\* + +- update jgit to 3.0.0.201306101825-r +- update args4j to version 2.0.25 +- update freemarker to version 2.3.20 +- update enunciate to version 1.27 +- update ehcache to version 2.6.6 +- update to svnkit 1.7.10-scm3 +- update mustache to version 0.8.13 + +SCM-Manager 1.32 +---------------- + +- - improvements\*\* + +- added support for subversion 1.8 and ra\_serf (\<\\>, + \<\\>) +- added detection eclipse jetty (standalone) to + ServletContainerDetector (pull request 3) + + + +- - fixed bugs\*\* + +- fix loading of cache configurations from plugins +- resolve conflicts for plugins and plugin dependencies +- fix parsing of security.xml on older jre\'s (\<\\>) +- fix source, commit, etc. views of mercurial on systems were the home + directory is not writable (\<\\>) +- fix wrong python path on mercurial homebrew installations + +SCM-Manager 1.31 +---------------- + +- - improvements\*\* + +- added first access url and credentials to readme +- option to assign global access permissions to users and groups + (\<\\>) +- store api for multiple configuration entries +- added group for all authenticated users +- implementation of a remember me system (\<\\>) +- implment incoming, outgoing, push and pull command for git and + mercurial +- display repository access permissions on info panel (\<\\>)) +- improve plugin archetype and use version 1.23 of scm-manager as + parent +- create and deploy package for rest documentation + + + +- - fixed bugs\*\* + +- fix wrong message for deleting repositories (\<\\>) +- fix button handling on repository grid with enabled archive mode + (\<\\>) +- fix missing git index view (\<\\>) +- ignore global proxy settings for mercurial callback hooks (\<\\>) +- fix registration of synchronous event handlers +- fix classpath generation with manually installed plugins (\<\\>) +- fix daemon mode on some operating systems (\<\\>) + + + +- - library updates\*\* + +- update logback to version 1.0.13 +- update svnkit to version 1.7.9-scm1 +- update jetty to 7.6.11.v20130520 +- update web-compressor to version 1.5 +- update mustache to version 0.8.12 +- update javahg to version 0.6 +- update apache shiro to version 1.2.2 + +SCM-Manager 1.30 +---------------- + +- - fixed bugs\*\* + +- fix missing copy strategy in guava cache configuration + +SCM-Manager 1.29 +---------------- + +- - improvements\*\* + +- use guava as default cache implementation (\<\\>) +- merge cache configuration from default location, config directory + and plugins (\<\\>) +- create a copy of tag collections to reduce memory on caching + (\<\\>) +- added configuration for authorization cache (\<\\>) +- default authentication handler should always be the first in the + authentication chain +- improve logging of BootstrapUtil +- implemented a child first plugin classloader strategy +- use template engine and repository service for git repository page + (\<\\>) + + + +- - fixed bugs\*\* + +- synchronize getCache method of cache manager implementations + (\<\\>) +- create a copy of search result collection to reduce memory of caches + (\<\\>) +- send mercurial hook error messages to client (\<\\>) +- use content type text/html for mercurial error messages, if the + client accept it (\<\\>) +- scm-svn-plugin does not handle modified paths on pre-receive hooks + (\<\\>) +- use a initial capacity of one for subversion hook changesets +- fix wrong handling of git file hooks (\<\\>) +- sonia.scm.net.HttpRequest.appendValues() adds parameter values twice + (\<\\>) + + + +- - library updates\*\* + +- update ehcache to version 2.6.5 +- update jersey to version 1.17.1 +- update guava to version 14.0.1 +- update logback to version 1.0.11 +- update slf4j to version 1.7.5 +- update mustache to version 0.8.11 +- update jgit to version 2.3.1.201302201838-r +- update maven-aether-provider to version 3.0.5 + +SCM-Manager 1.28 +---------------- + +- - improvements\*\* + +- added scm.home example for windows, see \<\\> +- disable directory listings on default scm-server configuration +- respect subscriber annotation on event bus registration +- register every injectable object to event bus +- enable tab scrolling for repository setting tabs +- use async cache for scm realm +- improve manager exception handling + + + +- - fixed bugs\*\* + +- fix path traversal vulnerability in git changelog api, see \<\\> +- fix possible crlf injections, see \<\\> +- fix admin access vulnerability in user repository creation, see + \<\\> +- fix circular proxy error on binding +- protect mustache resources +- fix eager singleton loading + +SCM-Manager 1.27 +---------------- + +- - improvements\*\* + +- exclude commons-logging and use jcl-over-slf4j instead +- icons of repository browser should be clickable +- post authentication events to the new event system + + + +- - fixed bugs\*\* + +- fix binding of extensions with eager singleton scope +- fix bug with registration of multiple authentication listeners +- fix localStorage detection for ie 6 and 7 +- fix hover links for ie \>= 8, see \<\\> + +SCM-Manager 1.26 +---------------- + +- - improvements\*\* + +- use localStorage to store state of the user interface +- improve logging of plugin installer +- find and bind extension points automatically +- added option to disable the last commit for browse command +- added recursive option to browse command +- added option to disable sub repository detection of browse command + + + +- - fixed bugs\*\* + +- normalize urls for BaseUrlFilter to prevent redirect loops, see + \<\\> +- fix privileged action is not executed, if the user is already an + admin +- added missing id for security navigation section +- synchronize getChangeset method of hook events and call registered + pre processors before the changesets are returned to hook + + + +- - library updates\*\* + +- update jersey to version 1.17 + +SCM-Manager 1.25 +---------------- + +- - improvements\*\* + +- added feature api for specific repository types +- improve logging of plugin installer + + + +- - fixed bugs\*\* + +- fix svn make and put with Polish characters in path, see \<\\> +- fix bookmarkable support for ie, see \<\\> +- call ui repository open listener, no matter which permission the + user has +- fix IllegalArgumentException with nested privileged actions +- fix installing plugin package breaks classpath.xml, see \<\\> + + + +- - library updates\*\* + +- update svnkit to version 1.7.8-scm1 +- update ehcache to version 2.6.3 +- update mustache to version 0.8.9 +- update jgit to version 2.2.0.201212191850-r +- update enunciate to version 1.26.2 + +SCM-Manager 1.24 +---------------- + +- - fixed bugs\*\* + +- fix wrong default date format + +SCM-Manager 1.23 +---------------- + +- - improvements\*\* + +- new event api based on guavas EventBus +- added option to exclude hosts from proxy, see \<\\> +- set name for different Threads to simplify debugging +- added eager singleton scope for injection +- added blob store api, to store unstructured data +- added data store api, to store structured data +- added decorator api for manager objets +- use moment.js to format dates in ui +- use javahg to retrieve changesets from a mercurial hook +- prepare server-config.xml for request logging +- improve javadoc + + + +- - fixed bugs\*\* + +- use system environment when executing \"hg create\" +- fix build from source, see \<\\> +- svn mergeinfo returns wrong results, see \<\\> +- svn diff fails if the path contains spaces, see \<\\> + and \<\\> +- BasicPropertiesAware should be implement Serializable +- changeset.id for mercurial changesets should always return a + complete node id, \<\\> +- fix mercurial sub repository detection in source browser +- fix non closing client response + + + +- - library updates\*\* + +- update selenium to version 2.28.0 +- update svnkit to version 1.7.6-scm3 +- update logback to version 1.0.9 +- update junit to 4.11 +- update jetty to version 7.6.8.v20121106 +- update ehcache to version 2.6.2 +- update javahg to version 0.5 +- update jersey to version 1.16 + +SCM-Manager 1.22 +---------------- + +- - improvements\*\* + +- store expanded/collapsed state of groupingviews across sessions, see + \<\\> +- added favicon and new logo +- added method to read templates from a reader +- added repository type icons to grid + + + +- - fixed bugs\*\* + +- fix permission autocomplete, see \<\\> + + + +- - library updates\*\* + +- update mustache.java to version 0.8.8 +- update mockito to version 1.9.5 + +SCM-Manager 1.21 +---------------- + +- - improvements\*\* + +- reimplment the complete security model on top of apache shiro +- allow execution of administration tasks without an active http + session +- use shorter repository ids +- added option to install plugin packages +- added option to display mercurial revisions as part of the node id, + see \<\\> +- improve performance and memory consumption of svn log command +- do not log sensitive cgi env variables + + + +- - fixed bugs\*\* + +- fix freezing configuration form on ie, see \<\\> +- fix wrong branch informations of git repository hooks, \<\\> and \<\\> +- fix bug in history of subversion repositories +- fix wrong mercurial changeset ids during hooks + + + +- - library updates\*\* + +- update google guava to version 13.0.1 +- update jetty to version 7.6.7.v20120910 +- update jersey to version 1.14 +- update args4j to version 2.0.22 +- update jgit to 2.1.0.201209190230-r +- update enunciate to version 1.26.1 +- update mustache to version 0.8.7 +- update slf4j to version 1.7.2 + +SCM-Manager 1.20 +---------------- + +- - improvements\*\* + +- added java.awt.headless system property to server startup scripts +- strip changeset ids to 12 chars +- use eternal caches for new repository api +- added placeholder to commit view + + + +- - fixed bugs\*\* + +- fix non closing \"hg serve\" processes +- fix error on changing branches in commit viewer +- fix wrong file modifications on git changeset overview + + + +- - library updates\*\* + +- update logback to version 1.0.7 + +[Release 1.19 - +1.0](https://bitbucket.org/sdorra/scm-manager/wiki/release%20notes%201.19%20-%201.0 "wikilink") diff --git a/docs/release-notes.md b/docs/release-notes.md new file mode 100644 index 0000000000..b9cf3be24c --- /dev/null +++ b/docs/release-notes.md @@ -0,0 +1,530 @@ +- - note\*\* + +- Versions prior to 1.36 are creating incompatible subversion + repositories, if the subversion option \"with 1.7 Compatible\" is + enabled. [read + more](https://bitbucket.org/sdorra/scm-manager/wiki/healthchecks/svn-incompatible-dbformat "wikilink") +- since version 1.18 scm-manager requires mercurial 1.9 or newer +- since version 1.49 Java 7 or newer is required +- version 1.58 and 1.59 are not working on java 7, but version 1.60 + restored java 7 support +- java 9 and 10 are supported since 1.60 + +SCM-Manager 1.60 +---------------- + +- - fixed bugs\*\* + +- restored java 7 compatibility (broken since 1.58), see \<\\> and \<\\> +- fixed build on java 9 +- fixed execution on java 9 and 10 + + + +- - improvements\*\* + +- encrypt cli configuration with aes instead of pbe, see \<\\> and \<\\> + + + +- - library updates\*\* + +- update commons-daemon to version 1.1.0 + +SCM-Manager 1.59 +---------------- + +- - fixed bugs\*\* + +- mercurial: fix hgweb execution for mercurial versions prior 4.1, see + [\#976](https://bitbucket.org/sdorra/scm-manager/issues/976/issue-with-158-and-mercurial "wikilink") +- mercurial: make {extras} work on old versions of Hg, see [PR + \#41](https://bitbucket.org/sdorra/scm-manager/pull-requests/41/make-extras-work-on-old-versions-of-hg/diff "wikilink") + and + [\#971](https://bitbucket.org/sdorra/scm-manager/issues/971/commit-listening-requires-at-least "wikilink") + +SCM-Manager 1.58 +---------------- + +- - improvements\*\* + +- mercurial: support for httppostargs protocol, see \<\\> +- mercurial: prevent + [CVE-2018-1000132](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-1000132 "wikilink"), + see \<\\> +- mercurial: dded option to disable ssl validation for scm hooks, see + \<\\> +- removed never released scm-dao-orientdb module + + + +- - library updates\*\* + +- update javahg to 0.13 +- update commons-beanutils to 1.9.3 +- update commons-collections to 3.2.2 +- update httpclient to 4.5.5 +- update slf4j to 1.7.25 +- update logback to 1.2.3 +- update jackson to 1.9.13 +- update apache shiro to version 1.3.2 +- update from sonatype aether to eclipse aether version 1.1.0 + +SCM-Manager 1.57 +---------------- + +- - improvements\*\* + +- treat update of a git tag as delete and create for hooks + + + +- - fixed bugs\*\* + +- fixed handling of resources with spaces in its id, see \<\\> + + + +- - library updates\*\* + +- update svnkit to version 1.9.0-scm3 + +SCM-Manager 1.56 +---------------- + +- - fixed bugs\*\* + +- fixed high cpu load after subversion client connection abort, see + \<\\> +- fix integer overflow of request with body larger than 4gb, see + \<\\> + +SCM-Manager 1.55 +---------------- + +- - improvements\*\* + +- added option to disallow non fast-forward git pushes + + + +- - fixed bugs\*\* + +- fixes usage of named cache configurations, see \<\\> +- fixed update of git repositories with empty git default branch, see + issue \<\\> +- remove work directory after package upgrade, see \<\\> +- prevent binary data in mercurial {extras} from interfering with + UTF-8 decoding, see + [\#PR-39](https://bitbucket.org/sdorra/scm-manager/pull-requests/39 "wikilink") + + + +- - library updates\*\* + +- update jgit to version v4.5.3.201708160445-r-scm1 +- update svnkit to version 1.9.0-scm1 + +SCM-Manager 1.54 +---------------- + +- - improvements\*\* + +- added experimetal support for git-lfs, + [\#PR-27](https://bitbucket.org/sdorra/scm-manager/pull-requests/27 "wikilink") +- improve git client detection to include jgit +- git repositories are now accessible with the \".git\" suffix + + + +- - fixed bugs\*\* + +- fix repository browsing with mercurial 4.x +- fixing test execution on german / windows machines + + + +- - library updates\*\* + +- update jgit to v4.5.2.201704071617-r-scm1 +- update javahg to 0.8-scm1 +- update jetty to version 1.19.4 +- update jetty to version 7.6.21.v20160908 + +SCM-Manager 1.53 +---------------- + +- - fixed bugs\*\* + +- fix jax-rs classpath conflict, see \<\\> + + + +- - library updates\*\* + +- update nativepkg-maven-plugin to version 1.1.4 + +SCM-Manager 1.52 +---------------- + +- - improvements\*\* + +- added support for gtld email domains, see \<\\> +- improved performance by creating an adapter between scm and shiro + caches, see \<\\> +- improved rest api documentation, see + + + + +- - library updates\*\* + +- update svnkit to version 1.8.15-scm1 +- update enunciate to version 2.9.1 + +SCM-Manager 1.51 +---------------- + +- - improvements\*\* + +- update svnkit to version 1.8.14-scm1 in order to support subversion + 1.9 new fsfs repository format, see \<\\> + + + +- - fixed bugs\*\* + +- fix wrong subversion urls behind a reverse proxy, see \<\\> +- svn: fix wrong error message during commit on a locked file, see + \<\\> +- fix wrong key usage during encoding in DefaultCipherHandler, see + \<\\> + + + +- - library updates\*\* + +- update jersey to version 1.19.3 +- update slf4j to version 1.7.22 +- update logback to version 1.1.10 +- updated jgit v4.5.0.201609210915-r-scm1 +- fix wrong subversion urls behind a reverse proxy, see \<\\> + +SCM-Manager 1.50 +---------------- + +- - improvements\*\* + +- added reusable components for branch and tag combo boxes +- option to define default branch for git repositories \<\\> +- added primary principal as request attribute to allow subject + logging for access logs, see \<\\> +- treat HEAD, OPTIONS and TRACE as mercurial read requests not only + GET, see issue \<\\> +- added new hook context api for tags + + + +- - fixed bugs\*\* + +- send http status code 401 unauthorized on failed git authentication, + see issue \<\\> +- fix npe when GitHookBranchProvider tries to collect a tag as branch, + see issue \<\\> + +SCM-Manager 1.49 +---------------- + +- - improvements\*\* + +- reduce event bus logging +- added RepositoryHookITCase to test repository post receive hooks + + + +- - fixed bugs\*\* + +- escape url parameters ub UrlBuilder in order to fix \<\\> +- assign revision field in constructor FileObjectWrapper, fix + \<\\> +- IE: Web Interface Only Showing Border and no Login Prompt, see + \<\\> +- fix guice javadoc link + + + +- - library updates\*\* + +- update apache shiro to version 1.3.0 +- updated jgit 4.4.0.201606070830-r-scm1, see \<\\> + + + +- - breaking changes\*\* + +- SCM-Manager 1.49 requires at least Java 7 + +SCM-Manager 1.48 +---------------- + +- - improvements\*\* + +- added request uri to mdc logging context +- added request method to mdc filter +- log authorization summary to trace level +- improve logging of AuthorizationCollector +- improved authorization cache invalidation +- improve modification events to pass the item before it was modified + to the subscriber + + + +- - fixed bugs\*\* + +- fixed bug in equals method of Permission object +- fixed syntax highlight for bash/sh, see issue \<\\> +- added missing name of repository to access denied exceptions + + + +- - library updates\*\* + +- update apache shiro to version 1.2.5 + +SCM-Manager 1.47 +---------------- + +- - improvements\*\* + +- added implmentation for running git gc in an configurable interval, + see \<\\> +- implemented small scheduler engine +- focus same repository tab as was selected previously, see \<\\> +- added experimental XSRF protection, see \<\\> +- Add Jetty host interface variable. Allows to run a specific + interface or locahost instead of just all interfaces. +- added option for plugins to change ssl context +- case insensitive sorting the of name column, see + [\#PR-25](https://bitbucket.org/sdorra/scm-manager/pull-requests/25/case-insensitive-sorting-of-the-name "wikilink") + + + +- - fixed bugs\*\* + +- removed broken maven repositories +- do not swallow the ScmSecurityException in PermissionFilter +- fix order of script resources in production stage, see \<\\> +- JsonContentTransformer should not fail on unknown json properties +- getCompleteUrl of HttpUtil should now respect forwarding headers, + see issue \<\\> +- fix wrong file permissions as mentioned in \<\\> +- update commons-daemon-native to version 1.0.15.1 to fix scm-server + start on macos + + + +- - library updates\*\* + +- update enunciate to version 1.31 +- update jetty to version 7.6.19.v20160209 +- update jersey to version 1.19.1 +- update logback to version 1.1.7 +- update slf4j to version 1.7.21 +- update shiro to version 1.2.4 + +SCM-Manager 1.46 +---------------- + +- - improvements\*\* + +- link modification to files on commit panel, see \<\\> +- added to branch switcher to repository browser, see \<\\> +- expose latest changeset id of branch in rest api +- use cached thread pool to process mercurial process error streams +- new advanced http client, see \<\\> + + + +- - fixed bugs\*\* + +- fix rendering of bottom toolbar in repository browser, if path is + null +- do not show error message for syntax highliting on txt and cs files, + see \<\\> +- fix a bug in git submodule detection +- fix wrong uft-8 filenames on raw download, see \<\\> +- fix missing separator char for post values with same name in http + client api +- set content-length header on post requests, see \<\\> + + + +- - library updates\*\* + +- update enunciate to version 1.30.1 +- update jgit to version 3.7.1.201504261725-r-scm1 +- update logback to version 1.1.3 +- update slf4j to version 1.7.12 + +SCM-Manager 1.45 +---------------- + +- - improvements\*\* + +- improve remove repository confirmation dialog +- introducing HookBranchProvider to get informations about changed + branches during a hook, see \<\\> +- return a changeset property for closed mercurial branches +- avoid receiving duplicate git commits, during a push with multiple + new branches +- retrieve only new git commits, do not collect commits from existing + branches, see \<\\> +- usability of init script improved. + + + +- - fixed bugs\*\* + +- added missing shebang statement in create user script, see \<\\> +- increase timeout for directory import from 30 seconds to 5 minutes, + to fix \<\\> +- fixed basic authentication with non ascii passwords, see \<\\> + + + +- - library updates\*\* + +- update jersey to version 1.19 +- update slf4j to version 1.7.10 + +SCM-Manager 1.44 +---------------- + +- - library updates\*\* + +- update jgit to version 3.5.3.201412180710-r in order to fix + [CVE-2014-9390](http://article.gmane.org/gmane.linux.kernel/1853266 "wikilink") +- update jersey to version 1.18.3 +- update slf4j to version 1.7.9 + +SCM-Manager 1.43 +---------------- + +- - improvements\*\* + +- new repository import wizard +- added support for remote urls to push and pull apis (implemented by + git and hg) +- added api for bundle/unbundle command to repository apis + (implemented by svn) +- implemented AdvancedImportHandler which gives more control over the + import result than ImportHandler + + + +- - fixed bugs\*\* + +- create default accounts only, if no other user exists in the dao +- do not try to convert git changesets from a receive command of type + delete, see \<\\> +- added utf-8 response encoding for git quick commit view, + [\#PR-17](https://bitbucket.org/sdorra/scm-manager/pull-request/17/utf-8-response-encoding-for-git-quick "wikilink") +- load advanced plugin configuration from plugin directory and from + root of scm home +- fix wrong changeset count for git push and pull commands + + + +- - library updates\*\* + +- update jersey to version 1.18.2 + +SCM-Manager 1.42 +---------------- + +- - improvements\*\* + +- added comment about POODLE vulnerability to https configuration +- added extension point for HttpSessionListener +- implement util class for AutoLoginModules to mark request as + completed or send redirects from an AutoLoginModule + + + +- - fixed bugs\*\* + +- use base uri from request for git quick repository view, see + \<\\> + + + +- - library updates\*\* + +- update mustache to version 0.8.17 +- update mockito to version 1.10.8 + +SCM-Manager 1.41 +---------------- + +- - improvements\*\* + +- improve performance for simple subversion changeset paging, see + \<\\> +- added cli sub command to generate unique keys +- added cli sub command to encrypt passwords +- added mdc logging variables username, client\_ip and client\_host +- use default jersey client implementation instead of ahc + + + +- - fixed bugs\*\* + +- subversion fails to commit filenames containing url-encoded + character \"/\", see \<\\> +- fix some missing file extensions for syntax highlighter +- fix scm-server stop method on windows, see \<\\> + + + +- - library updates\*\* + +- update jetty to version 7.6.16.v20140903 +- update jgit to version 3.4.1.201406201815-r +- update mustache to version 0.8.16 +- update svnkit to version 1.8.5-scm2 + +SCM-Manager 1.40 +---------------- + +- - improvements\*\* + +- added display name to web.xml + + + +- - fixed bugs\*\* + +- remove url parameters before building base url +- fixed wrong directory permissions on rpm installations +- fixed missing preinstall scripts in rpm and deb packages + + + +- - library updates\*\* + +- update args4j to version 2.0.28 + +[Release 1.39 - +1.20](https://bitbucket.org/sdorra/scm-manager/wiki/release%20notes%201.39%20-%201.20 "wikilink") diff --git a/docs/resources/scm-manager_logo.jpg b/docs/resources/scm-manager_logo.jpg new file mode 100644 index 0000000000..c8b45b7a82 Binary files /dev/null and b/docs/resources/scm-manager_logo.jpg differ diff --git a/docs/rv-plugin-comparison.md b/docs/rv-plugin-comparison.md new file mode 100644 index 0000000000..e7d2b67de5 --- /dev/null +++ b/docs/rv-plugin-comparison.md @@ -0,0 +1,10 @@ +Revision Control Plugin Comparison +---------------------------------- + +\|=Plugin Name \|=Name \|=Core-Plugin \|=Requirements \|=Url \| \| +scm-svn-plugin \| Subversion \| X \| \| +\| \| scm-git-plugin \| Git \| X \| \| \| \| +scm-hg-plugin \| Mercurial \| X \| [Python (v. +2.6)](http://www.python.org/getit/releases/2.6 "wikilink"), Mercurial \| + \| \| scm-bzr-plugin \| Bazaar \| \| +Python, Bazaar \| \| diff --git a/docs/scheduler-plugin.md b/docs/scheduler-plugin.md new file mode 100644 index 0000000000..58f9542bb3 --- /dev/null +++ b/docs/scheduler-plugin.md @@ -0,0 +1,96 @@ +# scm-scheduler-plugin # + +The scheduler plugin provides an api for other plugins to execute scheduled jobs. The plugin is based on the [quartz project](http://quartz-scheduler.org/). + +## Configuration ## + +The plugin needs no further configuration. + +## API Usage ## + +First you have to add the dependency to your pom.xml e.g.: + +``` +#!xml + + sonia.scm.plugins + scm-scheduler-plugin + 1.0 + +``` + +But note you should use at least version 1.22 of scm-plugins as parent for your plugin. + +Now you can get a [SchedulerFactory](http://www.quartz-scheduler.org/api/2.0.0/org/quartz/SchedulerFactory.html) via injection. + +For Example: + + +``` +#!java + +public class ReportHandler { + + private final SchedulerFactory schedulerFactory; + + @Inject + public ReportContextListener(SchedulerFactory schedulerFactory){ + this.schedulerFactory = schedulerFactory; + } + +} +``` + +With the SchedulerFactory [SchedulerFactory](http://www.quartz-scheduler.org/api/2.0.0/org/quartz/SchedulerFactory.html) you can schedule [Jobs](http://www.quartz-scheduler.org/api/2.0.0/org/quartz/Job.html). To simplify the steps to schedule a job, the scm-scheduler-plugin comes with a helper class called Schedulers. + +### Notes ### + +* Schedulers must always be executed by an administrator or in an administrative context. Jobs which are executed by a scheduler are executed with administrator privileges. +* Each job is able to get dependencies via injection. + +### Further reading ### + +* [Quartz Overview](http://www.quartz-scheduler.org/overview) +* [Quartz Cron Trigger](http://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/crontrigger) +* [Quartz Examples](http://www.quartz-scheduler.org/documentation/quartz-2.1.x/examples) + +### Complete Example ### + +In the following example a ReportJob is executed every minute since the start of scm-manager. + + +``` +#!java + +@Extension +public class ReportContextListener implements ServletContextListener { + + private final AdministrationContext adminContext; + private final SchedulerFactory schedulerFactory; + + @Inject + public ReportContextListener(AdministrationContext adminContext, + SchedulerFactory schedulerFactory){ + this.adminContext = adminContext; + this.schedulerFactory = schedulerFactory; + } + + @Override + public void contextDestroyed(ServletContextEvent sce) {} + + @Override + public void contextInitialized(ServletContextEvent sce){ + Schedulers.schedule(adminContext, schedulerFactory, + SimpleScheduleBuilder.repeatMinutelyForever(), ReportJob.class); + } + + private static class ReportJob implements Job { + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + // do something minutely + System.out.println(new Date()); + } + } +} +``` \ No newline at end of file diff --git a/docs/scm-plugins.md b/docs/scm-plugins.md new file mode 100644 index 0000000000..5dcf63e313 --- /dev/null +++ b/docs/scm-plugins.md @@ -0,0 +1,62 @@ +Plugins +------- + +### Authentication + +\|=Plugin Name \|=Description \|=Core-Plugin \|=Repository \| \| +scm-activedirectory-auth-plugin \| Plugin for using Active Directory as +an authentication handler. Currently only supports running on Windows in +a 32-bit JVM. \| \| + \| \| +scm-auth-ldap-plugin \| Plugin for using LDAP as an authentication +handler. \| \| \| +\| scm-pam-plugin \| This plugin enables PAM-Authentication for +SCM-Manager. \| \| \| \| +scm-crowd-plugin \| Plugin for using Atlassian Crowd as an +authentication handler. \| \| + \| + +### Continuous Integration + +\|=Plugin Name \|=Description \|=Core-Plugin \|=Repository \| \| +scm-bamboo-plugin \| Post receive hook for Atlassian Bamboo. \| \| + \| \| +scm-jenkins-plugin \| This plugin will ping your Jenkins CI server when +a new commit is pushed to SCM-Manager. \| \| + \| + +### Development + +\|=Plugin Name \|=Description \|=Core-Plugin \|=Repository \| \| +scm-graph-plugin \| Creates a Google Guice injection graph. \| \| + \| + +### Issue-Tracking + +\|=Plugin Name \|=Description \|=Core-Plugin \|=Repository \| \| +scm-jira-plugin \| This plugin integrates Atlassian JIRA to SCM-Manager. +\| \| \| + +### Miscellaneous + +\|=Plugin Name \|=Description \|=Core-Plugin \|=Repository \| \| +scm-activity-plugin \| Shows the latest activity from your repositories. +\|\| \| \| +scm-gravatar-plugin \| Gravatar icons for the changesetviewer. \| \| + \| \| +scm-pathwp-plugin \| This plugin adds path write protection for +repositories. \|\| \| +\| scm-userrepo-plugin \| This plugin allows regular users to create +repositories. \|\| \| + +### Version Control Systems + +\|=Plugin Name \|=Description \|=Core-Plugin \|=Repository \| \| +scm-hg-plugin \| Support for the version control system Mercurial. \| X +\| \| \| scm-git-plugin \| +Support for the version control system Git. \| X \| + \| \| scm-svn-plugin \| +Support for the version control system Subversion. \| X \| + \| \| scm-bzr-plugin \| +Support for the version control system Bazaar. \| \| + \| diff --git a/docs/scm-server-ssl.md b/docs/scm-server-ssl.md new file mode 100644 index 0000000000..2d2252095e --- /dev/null +++ b/docs/scm-server-ssl.md @@ -0,0 +1,40 @@ +SCM-Server SSL +-------------- + +- - Note\*\*: This document describes a ssl configuration with a + self-signed certificate + +1\. Open a shell and go to the conf directory of the scm-server + +2\. Create a certificate request. Replace all variables (\*varname\*) + +- - Note:\*\* You have to enter the full qualified hostname of your + server for the cn (cn = What is your first and last name?) + +3\. Edit the server-config.xml, uncomment the SSL-Connector and set your +password. For example: + +4\. Start or restart the scm-server + +- - Note\*\*: It looks like there is a error in some version of + OpenJDK (issues \#84 and \#151). If you have such a problem, + please try to use the Oracle JDK. + +### Configure Git + +1\. Export the certificate from keystore: + +2\. Copy the certificate to your client and add it to your git config: + +### Configure Mercurial + +1\. Export the certificate from keystore: + +2\. Copy the certificate to your client and add it to your .hgrc config +file: + +### Sources + +- [Keytool](http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/keytool.html "wikilink") +- [Jetty + SSL-Connectors](http://wiki.eclipse.org/Jetty/Reference/SSL_Connectors "wikilink") diff --git a/docs/screens.md b/docs/screens.md new file mode 100644 index 0000000000..981a2e8fee --- /dev/null +++ b/docs/screens.md @@ -0,0 +1,43 @@ +Screenshots +----------- + + + +Screenshots pre 1.12 +-------------------- + +\|{{/sdorra/scm-manager/wiki/screenshots/login.thumb.png\|Login}}\| +{{/sdorra/scm-manager/wiki/screenshots/change-password.thumb.png\|Change +Password}} \| +{{/sdorra/scm-manager/wiki/screenshots/repository-config.thumb.png\|Repository +Config}} \| +\|[Login](/sdorra/scm-manager/wiki/screenshots/login.png "wikilink") \| +[Change +Password](/sdorra/scm-manager/wiki/screenshots/change-password.png "wikilink") +\| [Repository +Configuration](/sdorra/scm-manager/wiki/screenshots/repository-config.png "wikilink") +\| +\|{{/sdorra/scm-manager/wiki/screenshots/repository-details.thumb.png\|Repository +details}}\| +{{/sdorra/scm-manager/wiki/screenshots/repository-overview.thumb.png\|Repository +Overview}} \| +{{/sdorra/scm-manager/wiki/screenshots/user-overview.thumb.png\|User +Overview}} \| \|[Repository +details](/sdorra/scm-manager/wiki/screenshots/repository-details.png "wikilink") +\| [Repository +Overview](/sdorra/scm-manager/wiki/screenshots/repository-overview.png "wikilink") +\| [User +Overview](/sdorra/scm-manager/wiki/screenshots/user-overview.png "wikilink") +\| +\|{{/sdorra/scm-manager/wiki/screenshots/plugin-overview.thumb.png\|Plugin +Overview}}\| +{{/sdorra/scm-manager/wiki/screenshots/mercurial-wizard.thumb.png\|Mercurial +Configuration Wizard}} \| +{{/sdorra/scm-manager/wiki/screenshots/changesetviewer-gravatar-plugin.thumb.png\|Changesetviewer +(with Gravatar Plugin)}} \| \|[Plugin +Overview](/sdorra/scm-manager/wiki/screenshots/plugin-overview.png "wikilink")\| +[Mercurial Configuration +Wizard](/sdorra/scm-manager/wiki/screenshots/mercurial-wizard.png "wikilink") +\| [Changesetviewer (with Gravatar +Plugin)](/sdorra/scm-manager/wiki/screenshots/changesetviewer-gravatar-plugin.png "wikilink") +\| diff --git a/docs/screenshots/change-password.png b/docs/screenshots/change-password.png new file mode 100644 index 0000000000..83e87e8d11 Binary files /dev/null and b/docs/screenshots/change-password.png differ diff --git a/docs/screenshots/change-password.thumb.png b/docs/screenshots/change-password.thumb.png new file mode 100644 index 0000000000..9d095001a1 Binary files /dev/null and b/docs/screenshots/change-password.thumb.png differ diff --git a/docs/screenshots/changesetviewer-gravatar-plugin.png b/docs/screenshots/changesetviewer-gravatar-plugin.png new file mode 100644 index 0000000000..a275487f69 Binary files /dev/null and b/docs/screenshots/changesetviewer-gravatar-plugin.png differ diff --git a/docs/screenshots/changesetviewer-gravatar-plugin.thumb.png b/docs/screenshots/changesetviewer-gravatar-plugin.thumb.png new file mode 100644 index 0000000000..280ea3cbd8 Binary files /dev/null and b/docs/screenshots/changesetviewer-gravatar-plugin.thumb.png differ diff --git a/docs/screenshots/login.png b/docs/screenshots/login.png new file mode 100644 index 0000000000..a7f958eb02 Binary files /dev/null and b/docs/screenshots/login.png differ diff --git a/docs/screenshots/login.thumb.png b/docs/screenshots/login.thumb.png new file mode 100644 index 0000000000..9b4e8e2797 Binary files /dev/null and b/docs/screenshots/login.thumb.png differ diff --git a/docs/screenshots/mercurial-wizard.png b/docs/screenshots/mercurial-wizard.png new file mode 100644 index 0000000000..a9a1a1c832 Binary files /dev/null and b/docs/screenshots/mercurial-wizard.png differ diff --git a/docs/screenshots/mercurial-wizard.thumb.png b/docs/screenshots/mercurial-wizard.thumb.png new file mode 100644 index 0000000000..0d8006a791 Binary files /dev/null and b/docs/screenshots/mercurial-wizard.thumb.png differ diff --git a/docs/screenshots/permission_global.jpg b/docs/screenshots/permission_global.jpg new file mode 100644 index 0000000000..1d49bcaffc Binary files /dev/null and b/docs/screenshots/permission_global.jpg differ diff --git a/docs/screenshots/permissions_global.png b/docs/screenshots/permissions_global.png new file mode 100644 index 0000000000..79e8389676 Binary files /dev/null and b/docs/screenshots/permissions_global.png differ diff --git a/docs/screenshots/permissions_repository.jpg b/docs/screenshots/permissions_repository.jpg new file mode 100644 index 0000000000..9663a66776 Binary files /dev/null and b/docs/screenshots/permissions_repository.jpg differ diff --git a/docs/screenshots/permissions_repository.png b/docs/screenshots/permissions_repository.png new file mode 100644 index 0000000000..029204a597 Binary files /dev/null and b/docs/screenshots/permissions_repository.png differ diff --git a/docs/screenshots/plugin-overview.png b/docs/screenshots/plugin-overview.png new file mode 100644 index 0000000000..e2fc05e694 Binary files /dev/null and b/docs/screenshots/plugin-overview.png differ diff --git a/docs/screenshots/plugin-overview.thumb.png b/docs/screenshots/plugin-overview.thumb.png new file mode 100644 index 0000000000..e33a086190 Binary files /dev/null and b/docs/screenshots/plugin-overview.thumb.png differ diff --git a/docs/screenshots/repository-config.png b/docs/screenshots/repository-config.png new file mode 100644 index 0000000000..2f4c274c1d Binary files /dev/null and b/docs/screenshots/repository-config.png differ diff --git a/docs/screenshots/repository-config.thumb.png b/docs/screenshots/repository-config.thumb.png new file mode 100644 index 0000000000..b875acaeec Binary files /dev/null and b/docs/screenshots/repository-config.thumb.png differ diff --git a/docs/screenshots/repository-create.png b/docs/screenshots/repository-create.png new file mode 100644 index 0000000000..4f8e1afe38 Binary files /dev/null and b/docs/screenshots/repository-create.png differ diff --git a/docs/screenshots/repository-create.thumb.png b/docs/screenshots/repository-create.thumb.png new file mode 100644 index 0000000000..c3cbd76ad7 Binary files /dev/null and b/docs/screenshots/repository-create.thumb.png differ diff --git a/docs/screenshots/repository-details.png b/docs/screenshots/repository-details.png new file mode 100644 index 0000000000..6d0e7016c9 Binary files /dev/null and b/docs/screenshots/repository-details.png differ diff --git a/docs/screenshots/repository-details.thumb.png b/docs/screenshots/repository-details.thumb.png new file mode 100644 index 0000000000..d0e73d03ff Binary files /dev/null and b/docs/screenshots/repository-details.thumb.png differ diff --git a/docs/screenshots/repository-overview.png b/docs/screenshots/repository-overview.png new file mode 100644 index 0000000000..8d58b9dc32 Binary files /dev/null and b/docs/screenshots/repository-overview.png differ diff --git a/docs/screenshots/repository-overview.thumb.png b/docs/screenshots/repository-overview.thumb.png new file mode 100644 index 0000000000..cb1e07f1ce Binary files /dev/null and b/docs/screenshots/repository-overview.thumb.png differ diff --git a/docs/screenshots/scm-hgnested-plugin.png b/docs/screenshots/scm-hgnested-plugin.png new file mode 100644 index 0000000000..f4588c95e8 Binary files /dev/null and b/docs/screenshots/scm-hgnested-plugin.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-01.png b/docs/screenshots/scm-jira-plugin/jira-plugin-01.png new file mode 100644 index 0000000000..7e4d488157 Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-01.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-01.thumb.png b/docs/screenshots/scm-jira-plugin/jira-plugin-01.thumb.png new file mode 100644 index 0000000000..d66e38a3e8 Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-01.thumb.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-02.png b/docs/screenshots/scm-jira-plugin/jira-plugin-02.png new file mode 100644 index 0000000000..7c455b7b0e Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-02.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-02.thumb.png b/docs/screenshots/scm-jira-plugin/jira-plugin-02.thumb.png new file mode 100644 index 0000000000..2987c1ae2b Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-02.thumb.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-03.png b/docs/screenshots/scm-jira-plugin/jira-plugin-03.png new file mode 100644 index 0000000000..c478ed7c96 Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-03.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-03.thumb.png b/docs/screenshots/scm-jira-plugin/jira-plugin-03.thumb.png new file mode 100644 index 0000000000..6be7e198da Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-03.thumb.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-04.png b/docs/screenshots/scm-jira-plugin/jira-plugin-04.png new file mode 100644 index 0000000000..cd2db62276 Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-04.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-04.thumb.png b/docs/screenshots/scm-jira-plugin/jira-plugin-04.thumb.png new file mode 100644 index 0000000000..12b2c00c3b Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-04.thumb.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-05.png b/docs/screenshots/scm-jira-plugin/jira-plugin-05.png new file mode 100644 index 0000000000..a3b08a6e6f Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-05.png differ diff --git a/docs/screenshots/scm-jira-plugin/jira-plugin-05.thumb.png b/docs/screenshots/scm-jira-plugin/jira-plugin-05.thumb.png new file mode 100644 index 0000000000..29b775a7c8 Binary files /dev/null and b/docs/screenshots/scm-jira-plugin/jira-plugin-05.thumb.png differ diff --git a/docs/screenshots/ssl-redirect.png b/docs/screenshots/ssl-redirect.png new file mode 100644 index 0000000000..811c5bce92 Binary files /dev/null and b/docs/screenshots/ssl-redirect.png differ diff --git a/docs/screenshots/user-overview.png b/docs/screenshots/user-overview.png new file mode 100644 index 0000000000..8ee29e6d25 Binary files /dev/null and b/docs/screenshots/user-overview.png differ diff --git a/docs/screenshots/user-overview.thumb.png b/docs/screenshots/user-overview.thumb.png new file mode 100644 index 0000000000..e1f3b5143b Binary files /dev/null and b/docs/screenshots/user-overview.thumb.png differ diff --git a/docs/snippet-authentication.md b/docs/snippet-authentication.md new file mode 100644 index 0000000000..cc27b2f51c --- /dev/null +++ b/docs/snippet-authentication.md @@ -0,0 +1,5 @@ +Authentication +-------------- + +[Complete +source](https://bitbucket.org/sdorra/scm-code-snippets/src/tip/004-authentication "wikilink") diff --git a/docs/snippet-config-group.md b/docs/snippet-config-group.md new file mode 100644 index 0000000000..27d8171567 --- /dev/null +++ b/docs/snippet-config-group.md @@ -0,0 +1,5 @@ +Extend global configuration +--------------------------- + +[Complete +source](https://bitbucket.org/sdorra/scm-code-snippets/src/tip/003-extend-global-config "wikilink") diff --git a/docs/snippet-extend-navigation.md b/docs/snippet-extend-navigation.md new file mode 100644 index 0000000000..76f7aaf0a5 --- /dev/null +++ b/docs/snippet-extend-navigation.md @@ -0,0 +1,4 @@ +### Extend Navigation + +[Complete +source](https://bitbucket.org/sdorra/scm-code-snippets/src/tip/001-extend-navigation "wikilink") diff --git a/docs/snippet-repository-tab.md b/docs/snippet-repository-tab.md new file mode 100644 index 0000000000..fba7ffeb8a --- /dev/null +++ b/docs/snippet-repository-tab.md @@ -0,0 +1,5 @@ +Add tab to repository configuration +----------------------------------- + +[Complete +source](https://bitbucket.org/sdorra/scm-code-snippets/src/tip/002-repository-tab "wikilink") diff --git a/docs/subrepositories.md b/docs/subrepositories.md new file mode 100644 index 0000000000..31116c765c --- /dev/null +++ b/docs/subrepositories.md @@ -0,0 +1,32 @@ +Mercurial Subrepositories +------------------------- + +In the following examples i will use the +[scm-cli-client](https://bitbucket.org/sdorra/scm-manager/wiki/command-line-client "wikilink") +to create the repositories, but you can also use the web interface to +create the repositories. + +The best way to use subrepositories with scm-manager is the following. +Create a main repository and for each subrepository a mercurial +repository in scm-manager. Than add the subrepositories with the +complete url to the .hgsub file. + +### Mercurial nested repositories + +If you already have nested repositories, you have to redirect the nested +repository to a real scm-manager repository. This work is done by the +[scm-hgnested-plugin](https://bitbucket.org/sdorra/scm-hgnested-plugin "wikilink"). +Install the +[scm-hgnested-plugin](https://bitbucket.org/sdorra/scm-hgnested-plugin "wikilink") +from the plugin-center (requires scm-manager version 1.10 or higher). +Create a repository for the main repository and for each nested +repository. Configure the +[scm-hgnested-plugin](https://bitbucket.org/sdorra/scm-hgnested-plugin "wikilink") +like +[this](https://bitbucket.org/sdorra/scm-manager/wiki/screenshots/scm-hgnested-plugin.png "wikilink"). + +### Further reading + +- +- +- diff --git a/docs/trac-plugin.md b/docs/trac-plugin.md new file mode 100644 index 0000000000..960c2776ee --- /dev/null +++ b/docs/trac-plugin.md @@ -0,0 +1,10 @@ +# Trac Plugin # + +The plugin enables the following features to integrate SCM-Manager to [Trac](http://trac.edgewall.org/): + +* Turn ticket ids in changeset descriptions to links for [Trac](http://trac.edgewall.org/) +* Updates a [Trac](http://trac.edgewall.org/) ticket if the ticket id is found in a changeset description +* Close a [Trac](http://trac.edgewall.org/) ticket if the ticket id and a resolution key word (fixed, invalid, wontfix, duplicate and worksforme) is found in the changeset description + +The plugin needs an installed [Trac XML-RPC Plugin](http://trac-hacks.org/wiki/XmlRpcPlugin) and each user which should be able to update tickets via SCM-Manager needs the XML_RPC permission in Trac. + diff --git a/docs/upgrade.md b/docs/upgrade.md new file mode 100644 index 0000000000..108eb1aa79 --- /dev/null +++ b/docs/upgrade.md @@ -0,0 +1,32 @@ +Upgrade to a new Version +======================== + +If you would like to update SCM-Manager, you have to do the following +steps. + +- Update all plugins: Goto the plugins panel and click every update + link + +The next steps depends on the version you use. + +Upgrade the Standalone version +------------------------------ + +- Stop the old instance +- Rename your old version +- Download the latest version of the scm-server bundle +- Extract the new version +- If you have changed bin/scm-server or one of the files from the conf + directory, you have to make the same changes for the new version +- If you use a windows service you have to reinstall the service + (uninstallService and installService) + +Upgrade the WebArchive (war) version +------------------------------------ + +- Download the latest version of the war bundle +- Deploy the new version +- If you have changed the WEB-INF/scm.properties or the + WEB-INF/classes/logback.xml, you have to make the same changes for + the new version. After you have done the changes you have to restart + your applicationserver. diff --git a/docs/v2/API changes.md b/docs/v2/API changes.md new file mode 100644 index 0000000000..e3443eea78 --- /dev/null +++ b/docs/v2/API changes.md @@ -0,0 +1,3 @@ +# API and concepts changes from SCM-Manger v1 to v2 + +TODO document api and concept changes while we're migrating plugins \ No newline at end of file diff --git a/docs/v2/Common pitfall.md b/docs/v2/Common pitfall.md new file mode 100644 index 0000000000..5eb0931266 --- /dev/null +++ b/docs/v2/Common pitfall.md @@ -0,0 +1,88 @@ +# Common pitfall occurred while developing the SCM V2 + +## React Component is loaded unexpectedly + +### Bug + +A react component is updated without any changes in the props or states. + +### Fix + +Use the [why-did-you-update](Link https://github.com/maicki/why-did-you-update) library to analyze the causes of the updates. + +A common cause is the definition of[ new functions in render()](Link https://github.com/maicki/why-did-you-update#changes-are-in-functions-only). + +### Example + + +``` +#!javascript + +class Main extends React.Component { + render() { + const { authenticated, links } = this.props; + const redirectUrlFactory = binder.getExtension("main.redirect", this.props); + +.... + + +const ActivityRoute = ({ authenticated, links }: RouteProps) => { + return ( + } + authenticated={authenticated && links.activity.href} + /> + ); +}; + +binder.bind("main.route", ActivityRoute); +``` +the definition of the Component like this: + + +``` +#!javascript + +component={() => } +``` +triggers a re-render because: + +``` +#!javascript + + +() => !== () => +``` + +You can avoid it by binding this function in advance and then reusing it on all renders + + +``` +#!javascript + +class ActivityRoute extends React.Component { + constructor(props: Props) { + super(props); + } + + renderActivity = () => { + const { links } = this.props; + return ; + }; + + render() { + const { authenticated, links } = this.props; + + return ( + + ); + } +} + +binder.bind("main.route", ActivityRoute); +``` \ No newline at end of file diff --git a/docs/v2/Create a new Plugin.md b/docs/v2/Create a new Plugin.md new file mode 100644 index 0000000000..785b593eaf --- /dev/null +++ b/docs/v2/Create a new Plugin.md @@ -0,0 +1,4 @@ +# Create a new plugin + +We are planning a [Maven Archetype](https://maven.apache.org/guides/introduction/introduction-to-archetypes.html) for +the creation of new plugins, however the Archetype for v2 plugins is not ready yet. \ No newline at end of file diff --git a/docs/v2/Decision-Table.md b/docs/v2/Decision-Table.md new file mode 100644 index 0000000000..1800c9e5bf --- /dev/null +++ b/docs/v2/Decision-Table.md @@ -0,0 +1,90 @@ +[TOC] + +# Lombok # + +[Project Lombok](https://projectlombok.org/) provides an easy way to generate java beans with + +- constructors for no and all fields, +- getters and setters, and +- equals and hash code. + +Using this has the following implications: + +- The generated code is not explicit (the lombok plugin generates bytecode) +- Especially for `hashCode` and `equals` a lot of code with a high complexity is generated. + This has implications for test coverage. Even though lombok supports the generation of `Generated` + annotations (own or javax), this has no effect in Sonar. + +First, this will be used for data transfer objects (DTO) in the REST endpoints. To avoid the mentioned +complexity of `hashCode` and `equals`, these should not be generated. + +The following lombok annotations will be used for DTOs: + +- `@Getter` +- `@Setter` +- `@AllArgsConstructor` and `@NoArgsConstructor` (if needed; by default only the default constructor + will be present. Because this one is necessary for deserialization, this one has to be created + explicitly when the all-args constructor is declared) + +# /repo/ & /repos/ as URI prefixes # + +The URI-format for accessing a repository, be it with a browser, or cloning/pulling via git/hg/svn, is defined to be `/repo/:namespace/:name`. The decision was made to allow users to choose namespaces as they please. If there would not be a prefix, some namespaces (e.g. `user`, `users`) would have to be reserved, since the names are already in use by SCM Manager itself. The `/repos` URI linked to a list of repositories, as well as operations such as creating a repositoriy (`/repos/create`). + +# Error handling + +In v1 error handling was somewhat diverse. Some checks were made explicitly in the web resource classes leading +to direct responses, some were made using exceptions and matching exception mappers. + +In v2 we have decided to + +1. use bean validation with a mapping to json responses with error messages and http status 400, +1. implement special checks like valid `sortBy` parameters using dedicated exceptions, +1. check ModelObjects internally with an extra `isValid` method (taken from v1) without an extra mapping + (so that this will lead to 500 errors indicating a missing validation in the web resource) + +The following generic exceptions will be used: + +- `NotFoundException`, +- `AlreadyExistsException`, +- `ConcurrentModificationException` + +Technical errors, for example io errors or other exceptions during the low level repository access are wrapped +in runtime exceptions like `RepositoryException` and will lead to internal server errors (http status 500). + +For simple objects like users and groups we don't think that we will need more exceptions. + +# Logging + +Logging can be cucial when it comes to identify bugs in test or production environments. At implementation time one cannot foresee all possible error cases and therefore cannot determine with full certanty what informations will be needed and what can be neglected. Logging only crucial errors leaves the developer with no idea what events might have lead to the error. On the other hand logging too much will overburden the log, making it harder to handle and maybe hiding interesting steps. + +Therefore it is best practice to be able to select the detail level of informations to log (called the "log level"). To support this feature SCM-Manager uses [slf4j](https://www.slf4j.org/). Using this library one can log informations with the following log levels: + +* ERROR +* WARN +* INFO +* DEBUG +* TRACE + +As a default the log level for SCM-Manager is INFO, so that by default all logs with the levels ERROR, WARN and INFO are stored. Finer levels can be enabled manually. + +## Log levels to use + +We have agreed to apply to the following guidelines regarding log levels: + +- ERROR should be used for fatal errors that could not be handled by the program and therefore leads to failures for the user, for example + - IO errors reading a database file + - IO errors accessing repositories +- WARN should be used for errors that could be handled somewhat graceful, but that should be inspected, for example + - timeouts +- INFO should be used for "major" events like + - creation of new users, groups and repositories + - changed plugins +- DEBUG should be used for key events or events desturbing the "happy path", like + - calling an external tool + - read/write to a database + - login failures + - requests for missing resources + - concurrent modifications + - validation errors +- TRACE should be used for normal steps that might be of interest, like + - calling functions \ No newline at end of file diff --git a/docs/v2/Extension-Points.md b/docs/v2/Extension-Points.md new file mode 100644 index 0000000000..20e19fbc60 --- /dev/null +++ b/docs/v2/Extension-Points.md @@ -0,0 +1,108 @@ +# Extension Points + +The following extension points are provided for the frontend: + +### admin.navigation +### admin.route +### admin.setting +### changeset.description +### changeset.right +### changesets.author.suffix +### group.navigation +### group.route +### group.setting +### main.route +- Add a new Route to the main Route (scm/) +- Props: authenticated?: boolean, links: Links + +### plugins.plugin-avatar +### primary-navigation +### primary-navigation.first-menu +- A placeholder for the first navigation menu. +- A PrimaryNavigationLink Component can be used here +- Actually this Extension Point is used from the Activity Plugin to display the activities at the first Main Navigation menu. + +### primary-navigation.logout +### profile.route +### profile.setting +### repo-config.route +### repos.branch-details.information +### repos.content.metadata +- Location: At meta data view for file +- can be used to render additional meta data line +- Props: file: string, repository: Repository, revision: string + +### repos.create.namespace +### repos.sources.content.actionbar +### repository.navigation +### repository.navigation.topLevel +### repositoryRole.role-details.information +### repository.setting +### repos.repository-avatar +- Location: At each repository in repository overview +- can be used to add avatar for each repository (e.g., to mark repository type) + +### repos.repository-details.information +- Location: At bottom of a single repository view +- can be used to show detailed information about the repository (how to clone, e.g.) + +### repos.sources.view +### roles.route +### user.route +### user.setting + + +# Deprecated + +### changeset.avatar-factory +- Location: At every changeset (detailed view as well as changeset overview) +- can be used to add avatar (such as gravatar) for each changeset +- expects a function: `(Changeset) => void` + +### repos.sources.view +- Location: At sources viewer +- can be used to render a special source that is not an image or a source code + +### main.redirect +- Extension Point for a link factory that provide the Redirect Link +- Actually used from the activity plugin: binder.bind("main.redirect", () => "/activity"); + +### markdown-renderer-factory +- A Factory function to create markdown [renderer](https://github.com/rexxars/react-markdown#node-types) +- The factory function will be called with a renderContext parameter of type Object. this parameter is given as a prop for the MarkdownView component. + +**example:** + + +``` +#!javascript + + + +let MarkdownFactory = (renderContext) => { + + let Heading= (props) => { + return React.createElement(`h${props.level}`, + props['data-sourcepos'] ? {'data-sourcepos': props['data-sourcepos']} : {}, + props.children); + }; + return {heading : Heading}; +}; + + + +binder.bind("markdown-renderer-factory", MarkdownFactory); +``` + + +``` +#!javascript + + + + +``` \ No newline at end of file diff --git a/docs/v2/Known Issues.md b/docs/v2/Known Issues.md new file mode 100644 index 0000000000..02ef7113d5 --- /dev/null +++ b/docs/v2/Known Issues.md @@ -0,0 +1,59 @@ +## Asnychronous PreReceiveRepositoryHooks do not work with subversion + +The following example will fail to log the changesets. + +```java +import com.github.legman.Subscribe; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sonia.scm.plugin.Extension; +import sonia.scm.repository.Changeset; +import sonia.scm.repository.PreReceiveRepositoryHookEvent; +import sonia.scm.repository.api.HookChangesetBuilder; + +@Extension +@EagerSingleton +public class DemoHook { + + private static final Logger LOG = LoggerFactory.getLogger(DemoHook.class); + + @Subscribe + public void handleEvent(PreReceiveRepositoryHookEvent event) { + HookChangesetBuilder changesetProvider = event.getContext().getChangesetProvider(); + for (Changeset c : changesetProvider.getChangesets()) { + LOG.warn("received {} hook for changeset: {}", event.getType(), c.getId()); + } + } + +} + +``` + +This is because of the transaction management of subversion. The scm-manager subversion provider becomes a transaction id for the changes of the current push, but the transaction has finished before scm-manager can resolve the incoming commit. To solve the issue, we could use a synchronous subscription instead e.g.: + +```java +import com.github.legman.Subscribe; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sonia.scm.plugin.Extension; +import sonia.scm.repository.Changeset; +import sonia.scm.repository.PreReceiveRepositoryHookEvent; +import sonia.scm.repository.api.HookChangesetBuilder; + +@Extension +@EagerSingleton +public class DemoHook { + + private static final Logger LOG = LoggerFactory.getLogger(DemoHook.class); + + @Subscribe(async = false) + public void handleEvent(PreReceiveRepositoryHookEvent event) { + HookChangesetBuilder changesetProvider = event.getContext().getChangesetProvider(); + for (Changeset c : changesetProvider.getChangesets()) { + LOG.warn("received {} hook for changeset: {}", event.getType(), c.getId()); + } + } + +} + +``` \ No newline at end of file diff --git a/docs/v2/Migrate Plugin from v1.md b/docs/v2/Migrate Plugin from v1.md new file mode 100644 index 0000000000..511d2df0b7 --- /dev/null +++ b/docs/v2/Migrate Plugin from v1.md @@ -0,0 +1,172 @@ +# Migrate an v1 plugin + +Before starting, make sure to read the [[v2/Plugin Development|Plugin Development]] + +**NOTE**: until there is no release the current version of scm-manager has to be cloned and build on the machine +of the plugin developer. + +```bash +hg clone https://bitnucket.org/sdorra/scm-manager +cd scm-manager +hg update 2.0.0-m3 +./mvnw clean install +``` + +To migrate an existing SCM-Manager 1.x Plugin, you have to do the following steps: + +### Maven (pom.xml): + +* create a separate branch for the new version +* It might be helpful to start and review the old version of the plugin via `mvn scmp:run` for later reference. +* Import .hgignore & .editorconfig from SCMM +* You might run the build once and review and fix SCMMv1 deprecation warnings. SCMMv2 gets rids of all deprecated classes. +* update the version of the parent artifact (sonia.scm.plugins:scm-plugins) to the minimum version of SCM-Manager 2 you are planning for your plugin +* change the packaging type of your plugin to smp +* remove the sonia.scm.maven:scm-maven-plugin from the pom +* remove servlet-api from the list of dependencies (not always the case) + + +```diff +diff -r a988f4cfb7ab pom.xml +--- a/pom.xml Thu Dec 10 20:32:26 2015 +0100 ++++ b/pom.xml Tue Oct 30 11:49:35 2018 +0100 +@@ -6,13 +6,14 @@ + + scm-plugins + sonia.scm.plugins +- 1.15 ++ 2.0.0-SNAPSHOT + + + sonia.scm.plugins + scm-mail-plugin + 1.6-SNAPSHOT + scm-mail-plugin ++ smp + https://bitbucket.org/sdorra/scm-mail-plugin + + The mail plugin provides an api for sending e-mails. +@@ -28,13 +29,6 @@ + + +- +- javax.servlet +- servlet-api +- ${servlet.version} +- provided +- + + + org.codemonkey.simplejavamail + simple-java-mail + 2.4 +@@ -52,18 +46,6 @@ + 1.4.7 + + +- +- +- +- +- sonia.scm.maven +- scm-maven-plugin +- 1.22 +- +- +- +- + + + + +``` + +### Plugin Descriptor (src/main/resources/META-INF/scm/plugin.xml): + +* add the following dtd to the top of the plugin.xml: `` +* add an scm-version element with the value 2 to the plugin.xml +* remove resources and packages from plugin.xml + +```diff +diff -r a988f4cfb7ab src/main/resources/META-INF/scm/plugin.xml +--- a/src/main/resources/META-INF/scm/plugin.xml Thu Dec 10 20:32:26 2015 +0100 ++++ b/src/main/resources/META-INF/scm/plugin.xml Tue Oct 30 11:55:15 2018 +0100 +@@ -1,4 +1,5 @@ + ++ + + + org.eclipse.jetty.servlet.Default.dirAllowed + false + + + /work/scm + + + 1000000 + 5000 + +``` + +The value for `maxFormKeys` should be the count of your repositories * 3 + 10. The `maxFormContentSize` depends on the length of your repository namespace and name, but you should be safe with repository count * 100. diff --git a/docs/v2/Permission concept.md b/docs/v2/Permission concept.md new file mode 100644 index 0000000000..981237f194 --- /dev/null +++ b/docs/v2/Permission concept.md @@ -0,0 +1,545 @@ +This documents describes a concept for a fine-grained permission managing via the SCMMv2 UI. + +[TOC] + +# Requirements + +* Provide at least the features of SCMMv1 including the scm-groupmanager and scm-userrepo plugins. +* In addition, the permissions on repositories should be more fine-grained, for example a user that does not have the + permission to check out a repository, but read its meta data. +* An ideal solution would be generic. That is, not implementing explicit features such as the groupmanager or userrepo. + SCMMv2 already evaluates fine-grained permissions, so why not allow our users to assign them? + +# Technical Foundations + +## Status Quo SCMv1 + +[SCMMv1 's permissions](../Permissions) are only related to Repositories: + +* Users can either have the Permission READ, WRITER or OWNER +* globally (for all repositories) or +* per Repository. + +All other permissions are handled by distinguishing administrators from ordinary users. +Admins can do everything, users nothing except for their repository permissions. + +Some more permission-related features are added by plugins: + +* [scm-groupmanager-plugin](https://bitbucket.org/triologygmbh/scm-groupmanager-plugin/): Allows users to administer groups +* [scm-userrepo-plugin](https://bitbucket.org/sdorra/scm-userrepo-plugin/): Allows users to create repositories + +## SCMMv2 Permission fundamentals + +SCMMv2 introduces much more fine-grained permission checks under the hood. +In the code permissions for all kinds of operations are designed as follows: + +* convention: `subject:verb:item`, +* for example: `configuration:read:git` +* or `repository:write:42`, +* where item is the technical ID of the subject. + +In addition, there are permissions that do not relate to an item, which are called "global permissions", for example +`configuration:list`. + +The challenge solved by this document is to provide a concept that allows SCMMv2 users to manage these permissions. +That is, to assign those permissions to users and groups via the UI or REST API. + +## SCMMv2 implementation details + +This is not a core part of the concept but might be interesting when implementing it. + +SCMM uses the Apache Shiro security framework that allows for assigning permission strings (such as `subject:verb:item`) +to users. These can also contain wildcards (`*`). For example + +* the permission `*` realizes the administrator, +* `user:read:*` means reading is allowed on all users, +* `user:*:arthur` means all operations are allowed on a specific user. + +Then the application can check if a user has a permission. +For example: + +* Does user admin have the permission for reading repository 42? +* Admin has permission `*` +* So: does he have permission `user:read:*`? Yes! + +In order to get a little more type safe, SCM-Manager uses the +[Shiro-static-permissions (ssp) library](https://github.com/sdorra/Shiro-static-permissions) that scans the classpath for +annotations such as the following + +```java + @StaticPermissions( + value = "user", + globalPermissions = {"create", "list", "autocomplete"}, + permissions = {"read", "modify", "delete", "changePassword"}) +``` +and creates `*Permissions` classes that contain methods for checking each permission, for example like so + +```java +UserPermissions.read().check(id); +``` + +When a user logs in, all different kinds of permissions (`*` if admin, permissions for repositories, +from groups, some additional technical permissions such as `autocomplete`, etc.) are collected and added to the Shiro +subject in the `DefaultAuthorizationCollector` class. + +## SCMMv2 Core permissions + +Here are some more examples of permissions existing in SCMMv2 core, at the time of writing. +Look for `@StaticPermissions` and note that there the annotation also declares defaults for `permissions` and `globalPermissions`. + +* Configuration + * Global: list + * Permissions: read,write + * Items are global (core), git, hg, config (core plugins) and will be extended by further plugins. +* Plugin + * Global: read, manage +* Group + * Global: create, list, autocomplete + * Permission: read, modify, delete +* User + * Global: create, list, autocomplete + * Permissions: read, modify, delete, changePassword + * Items are the user name of dynamically added users +* Repository + * Global: create + * Permissions: read, modify, delete, healthCheck, pull, push, permissionRead, permissionWrite + * Items are the technical ID of dynamically added repositories + +# Repository and global permissions + +In order to fulfill the requirements, this concept describes + +* how to extend the existing repository permissions to be more fine-grained +* a new dialog to assign global permissions on user or group level + +# UI / UX + +## Global permissions + +The global permission component can be reached from **either user and groups** components navigations. The following mockup +shows this in the user component: + +![Permissions-mockup-user](Permissions-mockup-user.jpg). + +The layout of the permission component UI could look like this: + +![Permissions-mockup-global-permissions](Permissions-mockup-global-permissions.jpg). + +The UI +* queries all available global permissions from the REST API (shiro strings), +* gets the display name and descriptions using the shiro strings as keys (see i18n), +* displays descriptions as tooltips, +* and queries all user/group permissions to populate the check boxes. + +## Repository permissions + +The repository permission are already implemented and can be reached via Repositories | Permissions. Right now, it +allows for assigning the roles READ, WRITE, OWNER as in SCMMv1 (see above). Internally they are mapped to shiro +permissions (see `PermissionType`). + +The UI is extended like so: + +![Permissions-mockup-repository-permissions](Permissions-mockup-repository-permissions.jpg). + +### Existing repository dialog + +* queries all available repository permissions (shiro strings) and roles from the REST API, +* queries all user/group permissions of the repository (shiro strings) and aggregates them to roles to populate the + drop downs. +* Note that the permissions are always stored as shiro strings not roles. +* A new `Advanced` button per user or group entry opens a modal dialog + +### New modal dialog + +* The modal dialog shows all available repository permissions (shiro strings) +* via the shiro string the display name and descriptions are found (see i18n), +* displays descriptions as tooltips, +* the individual user/group permission of the repo are used to populate the check boxes + +# REST API + +Note that the examples here are not specified in HAL/HATEOAS for brevity. + +## Global permissions + +Assigning global permissions must be implemented for **either user and groups**! +Both use the same available permissions. + +The following shows user as an example. + +### Available global permissions + +* URL: `/globalPermissions` +* HTTP Method: GET +* Payload example: + +```json +{ + "permissions": [ + "configuration:read:git", + "configuration:write:git", + "configuration:read", + "configuration:write", + "plugin:read", + "plugin:manage", + "group:read", + "user:read", + "repository:read" + ] +} +``` + +### Assigned global permissions + +* URL: `/users/{id}/permissions/` +* HTTP Method: GET/PUT +* Payload example: + +```json +{ + "permissions": [ + "configuration:read:git", + "configuration:write:git", + "configuration:read", + "configuration:write", + "plugin:read", + "plugin:manage", + "group:read", + "user:read", + "repository:read" + ] +} +``` + +## Repository permissions + +### Available repository permissions + +* URL: `/repositoryPermissions` (similar to `/repositoryTypes`) +* HTTP Method: GET +* Payload example: + +```json +{ + "roles": [ + { + "name": "Reader", + "verbs": [ "read", "pull" ] + }, + { + "name": "Owner", + "verbs": [ "*" ] + } + ], + "verbs": [ "read", "pull", "push", "..", "*" ] +} +``` + +### Assigned repository permissions + +Already implemented in `PermissionRootResource`. Needs to be adpated from roles (`WRITE`) to shiro permissions +(`repository:read:42`). + +* URL: `/repositories/{namespace}/{name}/permissions` +* HTTP Method: GET +* Payload example: + +```json +{ + "permissions": [ + { + "name": "trillian", + "permissions": [ "read", "pull" ], + "groupPermission": false + }, + { + "name": "owners", + "permissions": [ "*" ], + "groupPermission": true + } + ] +} +``` + +This example shows the user `trillian` having the `READER` role and the group `owners` having the `OWNER` role. +Note that +* the `*` permission also implies all new permissions (e.g. defined by plugins or added in future versions) + and therefore has different semantics as listing all currently available permissions. +* the permissions passed to the REST API correspond to the verbs of the repository permission. It is stored as + `repositories::`. +* GET also returns links to individual URIs (e.g. `/repositories/{namespace}/{name}/permissions/trillian`) that can be + used for updating permissions via PUT requests. +* On PUT, the REST API needs to **validate** that each entry in `permissions` does not contain `:`! + Otherwise we might allow for "permission injection", allowing to set permissions on other or all repositories. + +# Java API + +The biggest technical challenges for this concept are the questions: + +* Where do we get the available permission from? +* How do we assign these permissions? +* How are these permissions evaluated? + +Where each questions needs to be answered for + +* global and +* repository + +permissions. + +## Global permissions + + +In order to implement this for global permissions an existing mechanism of SCM-Manager can be used: +The `SecuritySystem`, implemented by the `DefaultSecuritySystem`. + +### List available permissions + +The `DefaultSecuritySystem` reads all `permissions.xml` files from classpath, which also works for plugins (see +[Proof Of Concept](https://bitbucket.org/sdorra/scm-manager/commits/4ed74bf266106c48db77d21558452b0c968884cb?at=feature/global_permissions#chg-scm-plugins/scm-git-plugin/src/main/resources/META-INF/scm/permissions.xml)). + +These can be queried using `securitySystem.getAvailablePermissions()`. + +For SCMMv2 we could extend this mechanism by + +* simplifying the `permissions.xml` to contain only ``, because `` and `` + need to be internationalized, see i18n. +* extend the `ssp library` to generate `permissions.xml` files from `@StaticPermissions` annotations. + The annotations should be extended to support a list of permissions that are not written to `permissions.xml` + (e.g. `user:autocomplete`) + +### Assign permissions + +The `SecuritySystem` also provides means to assign, store and load permissions to users or groups using Shiro string + permissions like so: + +```java +AssignedPermission groupPermission = new AssignedPermission("configurers", true,"configuration:*"); +securitySystem.addPermission(groupPermission); +AssignedPermission userPermission = new AssignedPermission("arthur", "group:*"); +securitySystem.addPermission(userPermission); +log.info("All permissions: {}", securitySystem.getAllPermissions()); // Contains the permissions just added +``` + +See also the [Proof Of Concept](https://bitbucket.org/sdorra/scm-manager/src/4a88315d8f3ce0ad9a7c428da1081fb7e4967fe3/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GlobalPermissionPocResource.java?at=feature/global_permissions). + +### Evaluating permissions + +The evaluation of permissions assigned via the `SecuritySystem` is already implemented in the +`DefaultAuthorizationCollector`. + +### Dynamically add new items to available permissions + +Adding items (e.g. new users) dynamically during runtime is not implemented by the `SecuritySystem` and in order to +keep this simple we do not plan to support it, yet. See considered alternatives. + +## Repository Permissions + +For repository permissions we need to implement a new mechanism for discovering available permissions . +Assigning is already implemented (on role level, e.g. `WRITE`), which needs to be adapted to shiro permission level +(e.g. `repository:read:42`). + +### List available permissions + +We need to implement a new mechanism for discovering available permssions. Let's call it `RepositoryPermissionResolver`. +It can work similar to the `DefaultSecuritySystem` (see global permissions). It reads all `repository-permissions.xml` + files from classpath, which makes it extensible for plugins. + +This obsoletes the `PermissionType` enum. + +```xml + + + read + write + + + WRITER + read + pull + push + + +``` + +### Assign permissions + +This is already implemented in `RepositoryManager`s. Needs to be adapted from roles (`WRITE`) to shiro permissions +(`repository:read:42`). + +### Evaluating permissions + +Same here: Already implemented in `DefaultAuthorizationCollector`. Needs to be adapted from roles to shiro permissions. + +## The Admin flag/role + +In addition to the fine-grained permission management described in this concept, we could just keep the admin flag +(or role) that add the permission `*` to a user. +It's already implemented and a well-known concept from SCMMv1. + +## Permission for managing permissions + +Once permissions can be managed, an additional permission is necessary that answers the question: Who is allowed to +manage permissions? + +This permission has to be checked before permissions are read or written. It should be implemented in the +`DefaultSecuritySystem`, instead of the `assertIsAdmin()` method. + +For now, it is sufficiently to create a `Permission` permission (using `@StaticPermissions`) with global verbs `read` +and write. That is, + +* `permission:read` +* `permission:write` + +# i18n + +Internationalization can be handled using the following conventions: + +* All permission i18n are described in `plugins.json` (also for core), see [i18n for Plugins](i18n for Plugins) +* That way the UI for users and groups can find all the translation in the same file +* Convention for i18n keys: `permissions.`, containing `displayName` and `description` each. + +Example: + +```json +{ + "permissions": { + "repository:read": { + "displayName": "All Repositories (read)", + "description": "Read access to all repositories" + } + } +} +``` + +# Group Manager Plugin + +One shortcoming of limiting the global permission concept to verbs (not items) is that the functionality of the +`scm-groupmanager-plugin` is not included. +That is, we need to migrate our implement it for SCMMv2. Most likely it's less effort to implement a new plugin, +because we need a new SCMMv2 UI and can use the SecuritySystem` to set the `group:*:`. + +The following needs to be implemented: + +* UI (core): Provide an extension point in the groups UI Navigation +* UI: Use the extension point to add link to new dialog for adding group managers +* UI: New Dialog similar to the repository permission dialog that allows for adding user as group managers +* REST API for CRUD of group admins +* Extend the available group plugins by a permission `group:manage` permission (`permission.xml`) including i18n in + `plugins.json`. +* Check if the user has this permission! Unfortunately this cannot be done with `GroupPermissions` (generated via ssp), + but via `SecurityUtils.getSubject().checkPermission(permission);` +* For storing the permission, make use of the `SecuritySystem` to set the `group:*:` permissions. + + +# Considered alternatives + +This chapter documents some other approaches that were considered but rejected and the reasons for rejecting them. + +* Manage subject, verbs *and* items. + This is the most flexible approach from a user perspective and SCMMv2 provides a mechanism for evaluating permissions + on the fine-grained `subject:verb:item` level, why not allow our users to make use of it? + The [first approach of this concept](https://bitbucket.org/sdorra/scm-manager/wiki/commits/4af3c47d7cce530e3707bb1915b7b269ebb692cc) + followed this approach, but it was considered to cause to much effort during implementation. So we decided to keep it + more simple, and skip the `item` part. This suffices most use cases. +* A global permissions page (not per user, similar to the Jenkins Matrix Authorization Strategy Plugin). + Leads to a crowded UI, when there are a lot of subjects and verbs (see Jenkins). When adding items would cause an + Microsoft Excel-like UX, which is not desirable. +* Manage only subjects and verbs, not items. + Would simplify the UI and reduce the effort but the also the features and would not fulfill our requirements in terms + of userrepo or groupmanager plugins. Those could still be implemented separately. Still, as SCMMv2 provides a + mechanism for evaluate permissions on the fine-grained `subject:verb:item` level, why not allow our users to make use of it? + +# Implemented Permissions + +This chapter documents the permissions implemented in SCM-Manager core and a lot of plugins that can be assigned to users and groups +using the GUI/API. +Be aware, that this is only a snapshot and may not track each change in a plugin or the core. To get the concrete list of permissions +for a concrete version of the core or a plugin, take a look at the corresponding `permissions.xml`, `repository-permissions.xml` and +`plugins.json` files. + +## Global Permissions + +| plugin | permission | description | +|-|-|-| +| core | `repository:read,pull:*` | read all repositories | +| core | `repository:read,pull,push:*` | write all repositories | +| core | `repository:*` | own all repositories | +| core | `repository:create` | Create repositories | +| core | `user:*` | administer users | +| core | `group:*` | administer groups | +| core | `configuration:list` | basic permission for all configuration permissions; needed to see config menu item | +| core | `configuration:read,write:global` | administer core configuration | +| core | `configuration:read,write:*` | administer overall configuration (including all plugins) | +| git | `configuration:read,write:git` | administer global git settings | +| git | `repository:git:*` | administer repository specific git settings | +| hg | `configuration:read,write:hg` | administer global mercurial settings | +| hg | `repository:hg:*` | administer repository specific mercurial settings | +| svn | `configuration:read,write:svn` | administer global subversion settings | +| svn | `repository:svn:*` | administer repository specific subversion settings | +| authormapping | `repository:authormapping:*` | read and modify author mappings for all repositories | +| auth-ldap | `configuration:read,write:ldap` | administer ldap server | +| cas | `configuration:read,write:cas` | administer cas server | +| statistic | `repository:computeStatistics:*` | recompute statistics for all repositories | +| jenkins | `configuration:read,write:jenkins` | administer global jenkins server | +| jenkins | `repository:jenkins:*` | administer repository specific jenkins servers | +| jira | `configuration:read,write:jira` | administer global jira server | +| jira | `repository:jira:*` | administer repository specific jira servers | +| pathwp | `repository:pathwp:*` | administer write protected paths for all repositories | +| branchwp | `repository:branchwp:*` | administer write protected paths for all repositories | +| tagprotection | `configuration:read,write:tagprotection` | administer globally protected tags | +| script | `script:read,modify,execute` | read, modify and execute scripts | +| webhook | `configuration:read,write:webhook` | administer web hooks | +| webhook | `repository:webhook:*` | administer web hooks for all repositories | +| redmine | `configuration:read,write:redmine` | administer global redmine server | +| redmine | `repository:redmine:*` | administer repository specific redmine servers | +| notify | `repository:notify:*` | administer notify settings for all repositories | +| support | `support:information` | read support relevant information | +| support | `support:information,logging` | read support relevant information and enable trace log | +| mail | `configuration:read,write:mail` | administer mail server | +| groupmanager | `group:manage:*` | assign group managers | +| ssh | `user:readAuthorizedKeys:*` | read authorization keys for all users | +| ssh | `user:readAuthorizedKeys,writeAuthorizedKeys:*` | configure authorization keys for all users | + +## Repository Permissions + +| plugin | verb | description | +|-|-|-| +| core | `read` | read metadata of repository | +| core | `modify` | modify metadata of repository | +| core | `delete` | delete repository | +| core | `pull` | pull/checkout repository | +| core | `push` | push/commit to repository | +| core | `permissionRead` | read permissions of repository | +| core | `permissionWrite` | modify permissions for repository | +| core | `*` | change everything for repository ("owner") | +| git | `git` | administer git settings for repository | +| hg | `hg` | administer mercurial settings for repository | +| svn | `svn` | administer subversion settings for repository | +| review | `createPullRequest` | create pull requests | +| review | `readPullRequest` | read pull requests | +| review | `commentPullRequest` | write comments in pull requests and delete/edit own comments | +| review | `modifyPullRequest` | edit/delete pull requests and comments | +| review | `mergePullRequest` | merge/reject pull requests | +| authormapping | `authormapping` | modify author mappings | +| jenkins | `jenkins` | administer jenkins server for repository | +| jira | `jira` | administer jira server for repository | +| pathwp | `pathwp` | administer write protected paths for repository | +| redmine | `redmine` | administer redmine server for repository | +| notify | `notify` | administer notify settings for repository | +| branchwp | `branchwp` | administer write protected paths for repository | +| webhook | `webhook` | administer web hools for repository | + +## Repository Roles + +The verbs for roles are merged internally, so that a resulting role will have all verbs specified by any plugin. +Mind that a `OWNER` has overall permissions, including all possible permissions for all plugins. + +| plugin | role | verbs | +|-|-|-| +| core | `READ` | `read`, `pull` | +| core | `WRITE` | `read`, `pull`, `push` | +| core | `OWNER` | `*` | +| review | `READ` | `readPullRequest` | +| review | `WRITE` | `createPullRequest`, `readPullRequest`, `commentPullRequest`, `mergePullRequest` | +| statistic | `READ` | `readStatistics` | diff --git a/docs/v2/Permissions-mockup-global-permissions.jpg b/docs/v2/Permissions-mockup-global-permissions.jpg new file mode 100644 index 0000000000..70c43ab347 Binary files /dev/null and b/docs/v2/Permissions-mockup-global-permissions.jpg differ diff --git a/docs/v2/Permissions-mockup-repository-permissions.jpg b/docs/v2/Permissions-mockup-repository-permissions.jpg new file mode 100644 index 0000000000..6701474945 Binary files /dev/null and b/docs/v2/Permissions-mockup-repository-permissions.jpg differ diff --git a/docs/v2/Permissions-mockup-user.jpg b/docs/v2/Permissions-mockup-user.jpg new file mode 100644 index 0000000000..6c0390f996 Binary files /dev/null and b/docs/v2/Permissions-mockup-user.jpg differ diff --git a/docs/v2/Plugin Development.md b/docs/v2/Plugin Development.md new file mode 100644 index 0000000000..e592f70e6c --- /dev/null +++ b/docs/v2/Plugin Development.md @@ -0,0 +1,97 @@ +# SCM-Manager v2 Plugin Development + +## Build and testing + +The plugin can be compiled and packaged with the normal maven lifecycle: + +* compile - `mvn compile` - compiles Java code and creates the ui bundle +* test - `mvn test` - executes test for Java and JavaScript +* package - `mvn package` - creates the final plugin bundle (smp package) in the target folder +* install - `mvn install` - installs the plugin (smp and jar) in the local maven repository +* deploy - `mvn deploy` - deploys the plugin (smp and jar) to the configured remote repository +* clean - `mvn clean` - removes the target directory + +For the development and testing the `serve` lifecycle of the plugin can be used: + +* run - `mvn run` - starts scm-manager with the plugin pre installed. + +If the plugin was started with `mvn run`, the default browser of the os should be automatically opened. +If the browser does not start automatically, start it manually and go to [http://localhost:8081/scm](http://localhost:8081/scm). + +In this mode each change to web files (src/main/js or src/main/webapp), should trigger a reload of the browser with the made changes. +If you compile a class (e.g.: with your íde from src/main/java to target/classes), +the SCM-Manager context will restart automatically. So you can see your changes without restarting the server. + +## Directory/File structure + +### Directories + +* src/main/java (contains the Java code) +* src/main/resources (contains the the classpath resources) +* src/main/webapp (contains static files, which are accessible by the web ui) +* src/main/js (contains the JavaScript code for the web ui, inclusive unit tests: suffixed with `.test.js`) +* src/test/java (contains the Java unit tests) +* src/test/resources (containers classpath resources for unit tests) +* target (build directory) + +### Files + +* pom.xml (Maven configuration) +* package.json (ui dependency/build configuration) +* yarn.lock (ui dependency configuration) +* .eslintrc (ui linter configuration) +* .flowconfig (ui typecheck configuration) +* .babelrc (ui javascript language level configuration) +* src/main/resource/locale/(de|en)/plugins.json (i18n configuration, see [i18n for plugins](https://bitbucket.org/sdorra/scm-manager/wiki/i18n%20for%20Plugins)) +* META-INF/scm/plugin.xml (plugin descriptor) + + +## UI Extensions + +Plugins are able to extend or modify the ui of SCM-Manager. +In order to extend the ui the plugin requires a `package.json` in the project root e.g: + +```json +{ + "name": "@scm-manager/scm-readme-plugin", + "main": "src/main/js/index.js", + "scripts": { + "build": "ui-bundler plugin" + }, + "dependencies": { + "@scm-manager/ui-extensions": "^0.0.6" + }, + "devDependencies": { + "@scm-manager/ui-bundler": "^0.0.3" + } +} + +``` + +The `main` field of the `package.json` describes the main entry point of the plugin. +The file specified at `main` should use the `binder` from the [@scm-manager/ui-extensions](https://bitbucket.org/scm-manager/ui-extensions) in oder to bind its extensions. +For more information of extensions, binder and extension points, please have a look at the [readme](https://bitbucket.org/scm-manager/ui-extensions/src/master/README.md) of [@scm-manager/ui-extensions](https://bitbucket.org/scm-manager/ui-extensions). + +If the plugins gets build (`mvn package` or `mvn install`), the [buildfrontend-maven-plugin](https://github.com/sdorra/buildfrontend-maven-plugin), will call the `build` script of `package.json`. +The build script triggers the `plugin` command of the [@scm-manager/ui-bundler](https://bitbucket.org/scm-manager/ui-bundler). +The `ui-bundler` will do the following steps: + +* traverses the import statements of the script specified at `main` +* transpiles flow/es@next to es5 +* creates a single bundle +* registers the bundle in the plugin.xml +* stores the bundle in the final scmp package + +At runtime the plugins are loaded by PluginLoader. The PluginLoader is a React component, which does the following steps: + +* fetches plugin metadata (name and registered bundles) from the rest service +* fetches each bundle of every plugin +* executes each bundle +* starts the rest of the application + +## Static web resources + +A plugin can also store static files in the `src/main/webapp` directory. +All files of the webapp directory can be resolved relative to the root of the application e.g. the file +`src/main/webapp/images/logo.jpg` of a plugin can be resolved at `http://localhost:8081/scm/images/logo.jpg` +assuming SCM-Manager is running at `http://localhost:8081/scm`. \ No newline at end of file diff --git a/docs/v2/Release process.md b/docs/v2/Release process.md new file mode 100644 index 0000000000..39c1e47298 --- /dev/null +++ b/docs/v2/Release process.md @@ -0,0 +1,134 @@ +# How to release SCM-Manager v2 core + +To release a new version of SCM-Manager v2 you have to do the following steps (replace placeholders `` and `` accordingly, eg. with `2.1.0` and `2.2.0-SNAPSHOT`): + +## Check out default branch + +`hg checkout default` + +## Set release version for maven artefacts: + +`mvn versions:set -DnewVersion= -DgenerateBackupPoms=false` + +## Set release version for Javascript artefacts: + +`yarn run set-version ` + +## Modify Changelog + +Change "Unreleased" header in `CHANGELOG.md` to ` - ` + +## Commit version changes + +`hg commit -m "Release version "` + +## Run last test locally + +`mvn clean install -Pit -DClassLoaderLeakPreventor.threadWaitMs=10` + +## Create tag + +`hg tag ""` + +## Push + +`hg push -b .` + +## Wait for Jenkins build + +## Deploy release version + +This only works with OpenJDK 8! + +`mvn clean deploy -DperformRelease` + +# Release docker image + +``` +docker build . -t scmmanager/scm-manager: +docker push scmmanager/scm-manager: +``` + +## Set next development version for maven artefacts: + +`mvn versions:set -DnewVersion= -DgenerateBackupPoms=false` + +## Set next development version for Javascript artefacts: + +`yarn run set-version ` + +## Commit version changes + +`hg commit -m "Prepare for next development iteration"` + +## Push + +`hg push -b .` + +## Make a party + +# How to release SCM-Manager v2 plugins + +To release a new version of a Plugin for SCM-Manager v2 you have to do the following steps (replace placeholder `` accordingly, eg. with `2.1.0`): + +## Set new version + +Edit `pom.xml`: + +- `version` and `scm.tag` have to be set to the new version. +- ensure that all dependencies to other scm resources have released versions + +Edit `package.json`: + +- `version` has to be set to the new version. +- ensure that all dependencies to other scm resources have released versions + +## Modify Changelog + +Change "Unreleased" header in `CHANGELOG.md` to ` - ` + +## Remove old dependencies + +`rm -rf node_modules yarn.lock` + +## Build + +`mvn clean install` + +## Commit and push release + +``` +git commit -am "Release version " +git push origin develop +``` + +## Merge with master branch + +``` +git checkout master +git pull +git merge develop +git push origin master +``` + +## Create and push tag + +``` +git tag -s -a -m "" +git push --tags origin +``` + +## Prepare next development version + +``` +git checkout develop +``` + +Edit `pom.xml`: `version` has to be set to the new development version, `tag` to `HEAD`. + +Edit `package.json`: `version` has to be set to the new development version. + +``` +git commit -am "Prepare for next development iteration" +git push origin develop +``` \ No newline at end of file diff --git a/docs/v2/SCMM-v2-Test-Cases.md b/docs/v2/SCMM-v2-Test-Cases.md new file mode 100644 index 0000000000..0610ed0bb3 --- /dev/null +++ b/docs/v2/SCMM-v2-Test-Cases.md @@ -0,0 +1,868 @@ +Describes the expected behaviour for SCMM v2 REST Resources using manual tests. + +[TOC] + +# Test Cases + +The following states general test cases per HTTP Method and en expected return code as well as exemplary curl calls. +Resource-specifics are stated + +## GET + +- Collection Resource (e.g. `/users`) + - Without parameters -> 200 + - Parameters + - `?pageSize=1` -> Only one embedded element, pageTotal reflects the correct number of pages, `last` link points to last page. + - `?pageSize=1&page=1` -> `next` link points to page 0 ; `prev` link points to page 2 + - `?sortBy=admin` -> Sorted by `admin` field of embedded objects + - `?sortBy=admin&desc=true` -> Invert sorting +- Individual Resource (e.g. `/users/scmadmin`) + - Exists -> 200 + - Not Existings -> 404 + - Known Field (e.g. `?fields=name`) returns only name field + - Unknown field (e.g. `?fields=nam`) returns empty object +- without permission (individual and collection (TODO)) -> 401 + +## POST + +- not existing -> 204 +- existing -> 409 +- without permission -> 401 + +## PUT + +- existing -> 204 + - lastModified is updated + - lastModified & creationDate cannot be overwritten by client +- not exist -> 404 +- Change ID / Name (the one from the URL in the body) -> 400 +- Partial PUT (Set only one field, for example) -> Set all other fields to null or return 400? +- without permission -> 401 +- Change unmodifiable fields + - ID/Name --> 400 + - creationDate, lastModified --> 200 is liberally ignored + - Additional unmodifiable fields per resource, see examples + +## DELETE + +- existing -> 204 +- not existing -> 204 +- without permission -> 401 + +# Exemplary calls & Resource specific test cases + +In order to extend those tests to other Resources, have a look at the rest docs. Note that the Content Type is specific to each resource as well. + +After calling `mvn -pl scm-webapp compile -P doc` the docs are available at `scm-webapp/target/restdocs/index.html`. + + +## Users + +### GET + +#### Collections + +``` +#!bash + +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/users?sortBy=admin&desc=true" +``` + +#### Individual + +``` +#!bash + +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/users/scmadmin?fields=name,_links" +``` + +### POST + +``` +#!bash + +curl -vu scmadmin:scmadmin --data '{ + "properties": null, + "active": true, + "admin": false, + "creationDate": 1527510477501, + "displayName": "xyz", + "lastModified": null, + "mail": "x@abcde.cd", + "name": "xyz", + "password": "pwd123", + "type": "xml" + }' \ + --header "Content-Type: application/vnd.scmm-user+json;v=2" http://localhost:8081/scm/api/v2/users/ +``` + +### PUT + +- Change unmodifiable fields + - type? -> can be overwritten right now + +``` +#!bash + +curl -X PUT -vu scmadmin:scmadmin --data '{ + "properties": null, + "active": true, + "admin": false, + "creationDate": 1527510477501, + "displayName": "xyz", + "lastModified": null, + "mail": "x@abcde.cd", + "name": "xyz", + "password": "pwd123", + "type": "xml" + }' \ + --header "Content-Type: application/vnd.scmm-user+json;v=2" http://localhost:8081/scm/api/v2/users/xyz +``` + +### DELETE + +``` +#!bash + +curl -X DELETE -vu scmadmin:scmadmin http://localhost:8081/scm/api/v2/users/xyz +``` + + + +## Groups + +### GET + +#### Collections + +``` +#!bash + +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/groups/?sortBy=name&desc=true" +``` + +#### Individual + +``` +#!bash +curl -vu scmadmin:scmadmin http://localhost:8081/scm/api/v2/groups/firstGroup + +``` + +### POST + +``` +#!bash +curl -vu scmadmin:scmadmin --data '{ + "creationDate": "2018-06-28T07:42:45.281Z", + "lastModified": "2018-06-28T07:42:45.281Z", + "description": "descr", + "name": "firstGroup", + "type": "admin", + "members": [ "scmadmin" ], + "properties": { + "pro1": "123", + "pro2": "abc" + }, + "links": { + "empty": true + } + }' \ + --header "Content-Type: application/vnd.scmm-group+json" http://localhost:8081/scm/api/v2/groups/ + +``` + +### PUT + +``` +#!bash + +curl -X PUT -vu scmadmin:scmadmin --data '{ + "creationDate": "2018-06-28T07:42:45.281Z", + "lastModified": "2018-06-28T07:42:45.281Z", + "description": "descr", + "name": "firstGroup", + "type": "admin", + "members": [ "scmadmin" ], + "properties": { + "pro1": "123", + "pro2": "abc" + }, + "links": { + "empty": true + } + }' \ + --header "Content-Type: application/vnd.scmm-group+json" http://localhost:8081/scm/api/v2/groups/firstGroup +``` + +### DELETE + +``` +#!bash + +curl -X DELETE -vu scmadmin:scmadmin http://localhost:8081/scm/api/v2/groups/firstGroup +``` + + +## Repositories + +### GET + +#### Collections + +``` +#!bash + +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/?sortBy=name&pageSize=1&desc=true" +``` + +#### Individual + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/42/arepo" + +``` + +### POST + +``` +#!bash + +curl -vu scmadmin:scmadmin --data '{ + "contact": "a@con.tact", + "creationDate": "2018-07-11T08:54:44.569Z", + "description": "Desc", + "name": "arepo", + "type": "git" + }' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories + +``` + +### PUT + +- Change unmodifiable fields + - type? -> Leads to 500 right now + +``` +#!bash + +curl -X PUT -vu scmadmin:scmadmin --data '{ + "contact": "anoter@con.tact", + "creationDate": "2017-04-11T08:54:45.569Z", + "description": "NEW", + "namespace": "42", + "name": "arepo", + "type": "git", + "archived": "true" + }' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories/42/arepo +``` + +### DELETE + +``` +#!bash + +curl -X DELETE -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/42/anSVNRepo" +``` + + +## Repository Permissions + +In this test we do not only test the REST endpoints themselves, but also the effect of the different permissions. + +### Prerequisites + +For these tests we assume that you have created + +- a git repository `scmadmin/git`, and +- a user named `user`. + +If your entities have other ids, change them according to your data. + +### GET + +This request should return an empty list of permissions: + +``` +#!bash + +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/" +``` + +### POST / READ permission + +``` +#!bash + +curl -X POST -vu scmadmin:scmadmin --data '{ + "name": "user", "type":"READ" + }' --header "Content-Type: application/vnd.scmm-permission+json" + "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/" +``` + +After this, you should be able to `GET` the repository with the user `user`: + +``` +#!bash + +curl -vu user:user "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/" +``` + +Trying to change the repository using `PUT` with the user `user` should result in `403`: + +``` +#!bash + +curl -vu user:user -X PUT --data '{ + "contact": "zaphod.beeblebrox@hitchhiker.com", + "namespace":"scmadmin", + "name": "git", + "archived": false, + "type": "git" +} +' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories/scmadmin/git +``` + +Reading the permissions of the repository with the user `user` should result in `403`: + +``` +#!bash + +curl -vu user:user "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/" +``` + +The user should be able to `clone` the repository: + +``` +#!bash + +git clone http://owner@localhost:8081/scm/git/scmadmin/git +``` + +The user should *not* be able to `push` to the repository: + +``` +#!bash + +cd git +touch a +git add a +git commit -m a +git push +``` + +### PUT / WRITE permission + +It should be possible to change the permission for a specific user: + +``` +#!bash + +curl -X PUT -vu scmadmin:scmadmin --data '{ + "name": "user", + "type":"WRITE" + }' --header "Content-Type: application/vnd.scmm-permission+json" "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/user" +``` + +After this the user `user` should now be able to `push` the repository created and modified beforehand. + +``` +#!bash + +cd git +git push +``` + +### OWNER permission + +``` +#!bash + +curl -X PUT -vu scmadmin:scmadmin --data '{ + "name": "user", + "type":"OWNER" + }' --header "Content-Type: application/vnd.scmm-permission+json" "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/user" +``` + +After this, the user should be able to `GET` the permissions: + +``` +#!bash + +curl -vu user:user "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/" +``` + +Additionally, the user should be able to change permissions: + +``` +#!bash + +curl -X PUT -vu scmadmin:scmadmin --data '{ + "name": "user", + "type":"OWNER" + }' --header "Content-Type: application/vnd.scmm-permission+json" "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/user" +``` + +### DELETE + +Finally, a user with the role `OWNER` should be able to delete permissions: + +``` +#!bash + +curl -X DELETE -vu user:user "http://localhost:8081/scm/api/v2/repositories/scmadmin/git/permissions/user" +``` + +## Branches + +* In advance: POST repo. +* Clone Repo, add Branches + +### GET + +#### Collections + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/branches" +``` + +#### Individual + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/branches/master" +``` + +## Configuration + +### GET + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config" +``` + +### PUT + +``` +#!bash + +curl -X PUT -vu scmadmin:scmadmin --data '{ + "proxyPassword": "pw", + "proxyPort": 8082, + "proxyServer": "proxy.mydomain.com", + "proxyUser": "trillian", + "enableProxy": false, + "realmDescription": "SONIA :: SCM Manager", + "enableRepositoryArchive": true, + "disableGroupingGrid": true, + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "anonymousAccessEnabled": false, + "adminGroups": [ "admin", "plebs" ], + "adminUsers": [ "trillian", "arthur" ], + "baseUrl": "http://localhost:8081/scm", + "forceBaseUrl": true, + "loginAttemptLimit": 1, + "proxyExcludes": [ "ex", "clude" ], + "skipFailedAuthenticators": true, + "pluginUrl": "url", + "loginAttemptLimitTimeout": 0, + "enabledXsrfProtection": false + }' --header "Content-Type: application/vnd.scmm-config+json" http://localhost:8081/scm/api/v2/config +``` + +## Git Plugin Configuration + +### GET + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/git" +``` + +### PUT + +``` +#!bash +curl -X PUT -vu scmadmin:scmadmin --data '{ + "gcExpression": "0 0 14-6 ? * FRI-MON", + "repositoryDirectory": "new", + "disabled": true + }' --header "Content-Type: application/vnd.scmm-gitConfig+json" http://localhost:8081/scm/api/v2/config/git +``` + +## Hg Plugin Configuration + +### GET + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg" +``` + +### PUT + +``` +#!bash +curl -X PUT -vu scmadmin:scmadmin --data '{ + "repositoryDirectory": "new", + "disabled": true, + "encoding": "UTF-16", + "hgBinary": "/hg", + "pythonBinary": "python3", + "pythonPath": "gf", + "useOptimizedBytecode": true, + "showRevisionInId": true + }' --header "Content-Type: application/vnd.scmm-hgConfig+json" http://localhost:8081/scm/api/v2/config/hg + +``` + +### Auto Config + +#### Default + +``` +#!bash +curl -v -X PUT -u scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/auto-configuration" +``` + +#### Specific config + +``` +#!bash +curl -v -X PUT -u scmadmin:scmadmin --data '{ + "repositoryDirectory": "new", + "disabled": true, + "encoding": "UTF-16", + "hgBinary": "/hg", + "pythonBinary": "python3", + "pythonPath": "gf", + "useOptimizedBytecode": true, + "showRevisionInId": true + }' --header "Content-Type: application/vnd.scmm-hgConfig+json" "http://localhost:8081/scm/api/v2/config/hg/auto-configuration" +``` + +### Installations + +#### Hg + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/installations/hg" +``` + +#### Python + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/installations/python" +``` + +### Packages + +#### GET + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/packages" +``` + +#### PUT + +See [here](https://download.scm-manager.org/pkg/mercurial/packages.xml) for available packages. Will only work on Windows! + +``` +#!bash +curl -X PUT -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/hg/packages/4338c4_x64" +``` + +## Svn Plugin Configuration + + +### GET + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/config/svn" +``` + +### PUT + +``` +#!bash +curl -X PUT -vu scmadmin:scmadmin --data '{ + "repositoryDirectory": "new", + "disabled": true, + "enabledGZip": true, + "compatibility": "PRE15" + }' --header "Content-Type: application/vnd.scmm-svnConfig+json" http://localhost:8081/scm/api/v2/config/svn + +``` + +## Repository Types + +### GET + +#### Collections + +``` +#!bash + +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repository-types" +``` + +#### Individual + +``` +#!bash + +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repository-types/hg" +``` + +## Tags + +### GET + +Pre-conditions: the git repository "HeartOfGold-git" exists and contains tags example v1.0 and v1.1 + +#### Collections + +``` +#!bash + +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/HeartOfGold-git/tags/" +``` + +#### Individual + +``` +#!bash +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/HeartOfGold-git/tags/v1.1" + +``` + +## Content + +### git + +#### Prepare + +``` +#!bash +curl -vu scmadmin:scmadmin --data '{ + "contact": "a@con.tact", + "creationDate": "2018-07-11T08:54:44.569Z", + "description": "Desc", + "name": "arepo", + "type": "git" + }' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories + +cd /tmp +git clone http://scmadmin:scmadmin@localhost:8081/scm/git/scmadmin/arepo +cd arepo +echo "aaaa" > a +echo "bbb" > b.txt +wget https://bitbucket.org/sdorra/scm-manager/raw/f87655df229a94556aecf7d6b408ec0dcedb4e2a/scm-webapp/src/main/java/sonia/scm/api/RestActionResult.java +git add . +git commit -m 'Msg' +git push +``` +#### Query and assert + +``` +#!bash +# Assert Content type text plain +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/b.txt" 2>&1 | grep Content-Type +# Assert file content "bbb" +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/b.txt" + +# Assert Content type octet stream +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/a" 2>&1 | grep Content-Type +# Assert file content "aaa" +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/a" + +# Assert content type text/x-java-source & Language Header JAVA +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/RestActionResult.java" 2>&1 | grep -E 'Content-Type|Language' +# Assert java file content +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/arepo/content/$(git rev-parse HEAD)/RestActionResult.java" +``` + +### hg + +#### Prepare + +``` +#!bash +curl -vu scmadmin:scmadmin --data '{ + "contact": "a@con.tact", + "creationDate": "2018-07-11T08:54:44.569Z", + "description": "Desc", + "name": "hgrepo", + "type": "hg" + }' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories + +hg clone http://scmadmin:scmadmin@localhost:8081/scm/hg/scmadmin/hgrepo +cd hgrepo +echo "aaaa" > a +echo "bbb" > b.txt +wget https://bitbucket.org/sdorra/scm-manager/raw/f87655df229a94556aecf7d6b408ec0dcedb4e2a/scm-webapp/src/main/java/sonia/scm/api/RestActionResult.java +hg add +hg commit -m 'msg' +hg push +``` + +#### Query and assert + +``` +#!bash + +# Assert Content type text plain +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/b.txt" 2>&1 | grep Content-Type +# Assert file content "bbb" +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/b.txt" + +# Assert Content type octet stream +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/a" 2>&1 | grep Content-Type +# Assert file content "aaa" +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/a" + +# Assert content type text/x-java-source & Language Header JAVA +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/RestActionResult.java" 2>&1 | grep -E 'Content-Type|Language' +# Assert java file content +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/hgrepo/content/$(hg identify --id)/RestActionResult.java" +``` + +### svn + +#### Prepare + +``` +#!bash +curl -vu scmadmin:scmadmin --data '{ + "contact": "a@con.tact", + "creationDate": "2018-07-11T08:54:44.569Z", + "description": "Desc", + "name": "svnrepo", + "type": "svn" + }' --header "Content-Type: application/vnd.scmm-repository+json" http://localhost:8081/scm/api/v2/repositories + +svn co --non-interactive --no-auth-cache --username scmadmin --password scmadmin http://localhost:8081/scm/svn/scmadmin/svnrepo +cd svnrepo +echo "aaaa" > a +echo "bbb" > b.txt +wget https://bitbucket.org/sdorra/scm-manager/raw/f87655df229a94556aecf7d6b408ec0dcedb4e2a/scm-webapp/src/main/java/sonia/scm/api/RestActionResult.java +svn add ./* +svn commit --non-interactive --no-auth-cache --username scmadmin --password scmadmin -m 'msg' +``` + +#### Query and assert + +``` +#!bash +REVISION=$(svn --non-interactive --no-auth-cache --username scmadmin --password scmadmin info -r 'HEAD' --show-item revision | xargs echo -n) +# Assert Content type text plain +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/b.txt" 2>&1 | grep Content-Type +# Assert file content "bbb" +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/b.txt" + +# Assert Content type octet stream +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/a" 2>&1 | grep Content-Type +# Assert file content "aaa" +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/a" + +# Assert content type text/x-java-source & Language Header JAVA +curl -X HEAD -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/RestActionResult.java" 2>&1 | grep -E 'Content-Type|Language' +# Assert java file content +curl -vu scmadmin:scmadmin "http://localhost:8081/scm/api/v2/repositories/scmadmin/svnrepo/content/${REVISION}/RestActionResult.java" +``` + +## Access Token + +### Admin + +#### Output all links of index resource + +``` +#!bash +TOKEN=$(curl -s 'http://localhost:8081/scm/api/v2/auth/access_token' -H 'content-type: application/json' --data '{ + "cookie": false, + "grant_type": "password", + "username": "scmadmin", + "password": "scmadmin" +}') +curl -s http://localhost:8081/scm/api/v2/ -H "Authorization: Bearer ${TOKEN}" | jq +``` + +#### Output only "config" and default logged in links + +default logged in links = self, uiPlugins, me, logout + +``` +#!bash +TOKEN=$(curl -s 'http://localhost:8081/scm/api/v2/auth/access_token' -H 'content-type: application/json' --data '{ + "cookie": false, + "grant_type": "password", + "username": "scmadmin", + "password": "scmadmin", + "scope": [ + "configuration:*" + ] +}') +curl -s http://localhost:8081/scm/api/v2/ -H "Authorization: Bearer ${TOKEN}" | jq +``` + +### non-Admin + +Create non-admin user + +``` +#!bash + +curl -vu scmadmin:scmadmin --data '{ + "active": true, + "admin": false, + "displayName": "xyz", + "mail": "x@abcde.cd", + "name": "xyz", + "password": "pwd123", + "type": "xml" + }' \ + --header "Content-Type: application/vnd.scmm-user+json;v=2" http://localhost:8081/scm/api/v2/users/ +``` + +#### Standard permissions of a logged in user without additional permissions + +Standard links of a logged in user = self, uiPlugins, me, logout, autocomplete, repositories + +``` +#!bash +TOKEN=$(curl -s 'http://localhost:8081/scm/api/v2/auth/access_token' -H 'content-type: application/json' --data '{ + "cookie": false, + "grant_type": "password", + "username": "xyz", + "password": "pwd123" +}') +curl -s http://localhost:8081/scm/api/v2/ -H "Authorization: Bearer ${TOKEN}" | jq +``` + +#### Scope requests permission the user doesn't have + +This should not retrun `configuration` links, even though this scope was requested, because the user does not have the configuration permission. Otherwise this would be a major security flaw! +Compare to admin tests above. + +``` +#!bash + +TOKEN=$(curl -s 'http://localhost:8081/scm/api/v2/auth/access_token' -H 'content-type: application/json' --data '{ + "cookie": false, + "grant_type": "password", + "username": "xyz", + "password": "pwd123", + "scope": [ + "configuration:*" + ] +}') +curl -s http://localhost:8081/scm/api/v2/ -H "Authorization: Bearer ${TOKEN}" | jq +``` \ No newline at end of file diff --git a/docs/v2/State of SCM-Manager 2 development.md b/docs/v2/State of SCM-Manager 2 development.md new file mode 100644 index 0000000000..318f3513cc --- /dev/null +++ b/docs/v2/State of SCM-Manager 2 development.md @@ -0,0 +1,36 @@ +The development of SCM-Manager 2.0.0 is organised in [Trello Boards](https://trello.com/scmmanager). + +## [Milestone 1](https://trello.com/b/oit1MD92/scm-manager-2-0-0-milestone-1) ## + +### Main goals ### +* remove deprecated and unused stuff +* remove old style listeners +* replace [guava eventbus](https://code.google.com/p/guava-libraries/wiki/EventBusExplained) with [legman](https://github.com/sdorra/legman) +* introduce new plugin structure +* offline plugin installation/updates/deinstallation +* use java 7 as default +* use of [annotation processors](http://docs.oracle.com/javase/7/docs/api/javax/annotation/processing/Processor.html) instead of classpath scanning +* move non core modules (plugin-backend, maven plugins, etc.) to separate repositories + +## [Milestone 2](https://trello.com/b/Afb3hoJ9/scm-manager-2-0-0-milestone-2) ## + +### Main goals ### +* use [apache shiro](http://shiro.apache.org/) everywhere +* improve authentication +* improve user and group management +* use permission instead of roles + +## [Milestone 3](https://trello.com/b/eLvqTGGe/scm-manager-2-0-0-milestone-3) ## + +### Main goals ### +* completely new designed rest api + +## Milestone 4 ## + +### Main goals ### +* completely new user interface + +## Milestone 5 ## + +### Main goals ### +* improve repository api \ No newline at end of file diff --git a/docs/v2/UI: Additions or Changes to ui-components or ui-types.md b/docs/v2/UI: Additions or Changes to ui-components or ui-types.md new file mode 100644 index 0000000000..4d6ab24cae --- /dev/null +++ b/docs/v2/UI: Additions or Changes to ui-components or ui-types.md @@ -0,0 +1,10 @@ +# Changes to `ui-components`/`ui-types` # +## Dev ## +If you want (or need) to add components to the `ui-components`-Packages (or types to the `ui-types`-Package) and use them in `scm-ui`; you have to link the packages using yarn link (since your changes will not have been pushed to npm.js). To do so, cd to the `scm-ui` directory and type + +```yarn link @scm-manager/ui-components``` +resp. +```yarn linl @scm-manager/ui-types```. + +## Releasing changes to npm.js ## +**TODO** \ No newline at end of file diff --git a/docs/v2/UI_DOD.md b/docs/v2/UI_DOD.md new file mode 100644 index 0000000000..f987c171c6 --- /dev/null +++ b/docs/v2/UI_DOD.md @@ -0,0 +1,13 @@ +# DOD for UI development + +Use this as a kind of a checklist whenever you develop something in the UI of SCM-Manager 2.x., regardless whether you are developing core features or plugins. + +| | Don't forget to | +|-|-| +| ☐ | use imports with `@scm-manager`, eg. `@scm-manager/ui-components` | +| ☐ | let buttons have whitespace | +| ☐ | update german translation | +| ☐ | add help icons to input components | +| ☐ | not use colors directly, but refer to `is-primary` or `is-warning` | +| ☐ | make sure your view works on mobile devices | +| ☐ | document extension points here: https://bitbucket.org/sdorra/scm-manager/wiki/v2/Extension-Points | diff --git a/docs/v2/error-handling.md b/docs/v2/error-handling.md new file mode 100644 index 0000000000..38acd67211 --- /dev/null +++ b/docs/v2/error-handling.md @@ -0,0 +1,188 @@ +# Error Handling + +As a highly extensible product, SCM-Manager offers at least three ways to interact with: + +- the GUI, +- the REST API, and +- the Java API + +Having these three layers, the error handling should be consistent among these. That is, as a developer I would not like to have custom made error codes in the REST layer that I cannot find in the Java API. Furthermore it is essential to get precise error messages with hints how to find a way out (if possible), not only for a programmer making interactive calls, but also for other programs. Last but not least it should be easy for plugin developers to adapt the error handling. + +On the GUI layer, these information have to be translated into messages that can be easily handled. + +Here are some example error cases: + +*Use case*: Read the metadata for a branch + +*Possible errors:* + + - The repository is missing + - There is no such branch + - The user is not authorized to read the metadata + - The repository is corrupt on file system level + + --- + + *Use case:* Create a new user + + *Possible errors:* + + - Invalid characters in name + - Missing mandatory property + - Conflict with an existing user + - Insufficient priviliges + +--- + +*Use case:* Update the e-mail of a repository + +*Possible errors:* + + - The repository does not exist + - The repository was modified concurrently + - Invalid e-mail address + +## Java API + +In SCM-Manager we make heavy use of Java `Exception`s, not only for technical exceptions in the program flow like reading corrupt file systems, but also for "user errors" like illegal values or requests for missing data. + +These exceptions are handled by JEE [`ExceptionMapper`](https://docs.oracle.com/javaee/7/api/javax/ws/rs/ext/ExceptionMapper.html)s. Doing so, it is possible to concentrate on implementing the "happy path" without the need to explicitly handle error cases everywhere (for example you do not have to check whether got `null` as a result). Nonetheless we still had to decide whether to use checked or unchecked exceptions. We have chosen to use unchecked exceptions due to the following reasons: + + - Checked exceptions would have had to be declared everywhere. + - A checked exception can somehow trigger a "I have to handle this though I don't know how" feeling that would be wrong, because we do have mappers for these exceptions. + +Therefore handling such an exception has to be a concious decision. + +In the following we will introduce the exceptions we are using: + +### Used exceptions + +#### `NotFoundException` + +A `NotFoundException` is thrown, whenever "things" where requested but were not found. + +#### `AlreadyExistsException` + +This exception is thrown whenever an entity cannot be created, because another entity with the same key identifyer exists. + +#### `ConcurrentModificationException` + +When you try to modify an entity based on an outdated version, this exception is thrown. For entities like user, group or repository the "last modified" timestamp of `ModelObject` is used to check this. + +#### `NativeRepositoryAccessException` + +Failures while accessing native repositories (most of the time) result in `java.io.IOException`s. To distinguish these exceptions from other I/O errors like network exceptions and to make them unchecked, we wrap them in `NativeRepositoryAccessException`. + +#### `ResteasyViolationException` + +Input validation is handled using [RESTEasy's validation support](https://docs.jboss.org/resteasy/docs/3.0.0.Final/userguide/html/Validation.html). Constraint violations result in `ResteasyViolationException`s. + +#### All other runtime exceptions + +All other `java.lang.RuntimeException`s can be treated as unexpected errors, that either hint to severe problems (eg. disk access failures) or implementation errors. It is unlikely that these can be handled by the program gracefully. They will be caught by a generic exception handler which will wrap them in a new exception providing further SCM specific information. + +#### Checked exceptions + +Above we mentioned, that we want to use unchecked exceptions only. Therefore we have to wrap checked exceptions for example created by libraries or frarmeworks to make them unchecked. Normally it is sufficiant to wrap them in a RuntimeException using a proper message, except you plan to handle them somewhere else than at resource level (then it would be appropriate to introduce a new exception class extending `RuntimeException`). + +### Enrichment of exceptions + +#### Context + +Most of these exceptions must provide information about _what_ could not have been found, updated, whatsoever. This is necessary, because otherwise it may not be clear at what step of a potentionally complex process this exception occured. Though this sounds easy, it has some complexity because for example the access of a file in a repository can fail on many levels (the file is missing in the given revision, the revision is missing, or the repository itself is missing). In these cases you have to know the complete access path (what file in what revision of what changeset in what repository). + +To ensure that this is done in a reproducable and consistent way, SCM-Manager will provide utility functions to creaate such exceptions. + +#### Transaction IDs + +To be able to retrace the cause for exceptions, it is helpful to link log messages to these exceptions. To do so, SCM-Manager introduces transaction ids that are generated for single requests or other related actions like the processing of hooks or cron jobs. This transaction id will be part of every log message and every API response. + +For http requests, this can be done using MDC filter. + +#### Identification of exceptions + +To be able to identify different types of exceptions even outside of the java ecosystem, each SCM-Manager exception class will get a unique type id that will be created using the `DefaultKeyGenerator` during development. We chose to generate these ids and not "human readable" ones to prevent collisions between plugins. + +### Logging of exceptions + +To be able to retrace errors a proper logging is indispensible. So we decided to use the following rules for logging exceptions: + + - Native SCM manager exceptions will be logged at log level `INFO` with their message, only. The complete stacktrace will be logged at log level `DEBUG`. + - All other exceptions will be logged on level `WARN` with the complete stacktrace, because they indicate something going wrong on a fundamental level. + +## REST API + +### Status codes + +SCM-Manager uses [http status codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) to identify types of errors (and successes, that is) and doing so provides a first hint, what may have gone wrong: + +| Status code | Principal error cause | +|-|-| +| 200 | No error, everything is fine | +| 201 | The item has been created without an error | +| 204 | The request has been processed without an error | +| 400 | Something is not valid with the data provided | +| 401 | Missing authentication (not logged in?) | +| 403 | Missing authorization | +| 404 | The thing you are looking does not exist | +| 409 | Your update was rejected because you relate to an outdated version (maybe this item was changed in the meantime) _or_ the item could not be created because the key already exists | +| 500 | The "You are not to blame" error; something unexpected went wrong while processing the request | + +### Further information + +Whenever possible, an error response contains useful details about the error in a simple json format. These information are _not_ translated, so this is the responsibility of the frontend. + +| key | content | availability | +|-|-|-| +| transactionId | A unique id to link your request to log messages | always | +| errorCode | A code that can be used for translated error messages. To prevent the usage of the same codes in different exceptions we decided to use generated ids. | always | +| context | (repo/key, branch/key, ...) | optional | +| message | An english error message (not necessarily for end users) | always | +| url | A URL to a site providing further information about the error | optional | + +Error objects will contain no stack traces. + +For SCM exceptions, the message will be created from the message of the java exception. For other exceptions this will be a generic message in most cases. + +Here is an example, how a concrete exception may look like in a json response: + +```json +{ + "transactionId": "7D82atGf3", + "errorCode": "H823fFAt", + "context": [ + {"type": "repository", "id": "scmmanager/test"}, + {"type": "branch", "id": "master"}, + {"type": "file", "id": ".gitignore"} + ], + "message": "file not found", + "url": "https://www.scm-manager.org/errors/H823fFAt" +} +``` + +### Missing resources (404) + +The http status code 404 is a special case, because it is a fundamental status code that can be created on a lot of events: + +- Your proxy has a misconfiguration and you are talking with a static website instead of SCM-Manager +- You are using a path without a valid endpoint in SCM-Manager +- You are requesting a entity that does not exists + +Some say, that you should not try to interpret the body of a 404 response, because the origin of the response cannot be taken for granted. Nonetheless we decided to use this http status code to indicate requests for missing resources, because in our view this is what most people would expect. + +### Internal errors (500) + +Internal errors boil down to the following message: An error occured, that could not be handled in a reasonable way by the program. In these cases often only an administrator can help. Examples are out-of-memory errors, failing disk I/O, timeouts accessing other services, or (to be honest) simple programming errors that have to be fixed in further releases. To be able to trace these errors in the logs one can use the transaction ids. + +## GUI + +As an end user of the SCM-Manager I would not like to see confusing internals, but rather have a meaningful message in my language of choice. Therefore it is necessary to identify error types on a fine level. This can be done using the errorCode provided in each error object. + +Basically we have to differentiate between errors the user can handle ("user errors") and technical exceptions. For user errors a meaningful message can be generated giving hints to what the user has done "wrong". All other exceptions can be handled by displaying a "sorry, this did not work as expected" message with the transaction id. + +## Resources / Best Practices + +While creating this concepts we tried to adhere to best practices considering APIs of Twitter, Facebook, Bing, Spotify and others, as summarized in the following articles: + +* https://apigee.com/about/blog/technology/restful-api-design-what-about-errors +* https://nordicapis.com/best-practices-api-error-handling/ \ No newline at end of file diff --git a/docs/v2/i18n for Plugins.md b/docs/v2/i18n for Plugins.md new file mode 100644 index 0000000000..5d5699db4d --- /dev/null +++ b/docs/v2/i18n for Plugins.md @@ -0,0 +1,35 @@ +How to internationalize your own plugin +--------------------------------------- + +### Create the plugins.json file + +The translation file for plugins should be stored in the resources path +locales/{lang}/plugins.json + +All translation keys are parts of a \*\*unique root key\*\*. It is +recommended to \*\*use the maven artifactId of the plugin as root +key\*\* to avoid conflicts with other plugin. All translation files +would be collected and merged to a single file containing all +translations. Therefore it is \*\*necessary to use a unique root key\*\* +for the translations. + +//\*\*example:\*\*// + +the translation file of the svn plugin is stored in +locales/en/plugins.json + +### Usage in the own React components + +SCM-Manager use react-i18next to render translations. + +The following steps are needed to use react-i18next in the own +components + +- import react-i18next + +- declare the translation method as property + +- wrap the react component with the translate method and give the json + translation file name \"plugins\" + +- use the translation keys like this: diff --git a/docs/v2/intellij-idea-configuration.md b/docs/v2/intellij-idea-configuration.md new file mode 100644 index 0000000000..a1f9977862 --- /dev/null +++ b/docs/v2/intellij-idea-configuration.md @@ -0,0 +1,67 @@ +# Intellij IDEA Configuration + +## Backend + +### Plugins + +* Lombok Plugin +* MapStruct Support + +### Settings + +* Run Configurations / Edit Configuration + * Add Maven + * Name: run-backend + * Working directory: ../scm-webapp + * Command line: -DskipTests package jetty:run-war +* Editor / Code Style / Java + * Tab Imports + * Class count to use import with '*': + * Names count to use static import with '*': + +## Frontend + +### Plugins + +* Prettier +* File Watchers + +### Settings + +* Languages & Frameworks / Node.js and NPM + * Package Manager: yarn + +* Languages & Frameworks / Javascript + * JavaScript language version: Flow + * Flow package or executable: .../scm-ui/node_modules/flow-bin + +* Languages & Frameworks / Javascript / Code Quality Tools / ESLint + * Enable + * ESLint package: .../scm-ui/node_modules/eslint + * -OR- Automatic ESLint configuration + +* Languages & Frameworks / Javascript / Prettier + * Prettier package: .../scm-ui/node_modules/prettier + +* Tools / File Watchers + * Add Prettier + * Deselect: Track only root files + * Scope: Current File + * Program: $ProjectFileDir$/scm-ui/node_modules/.bin/prettier + * Working Directory: $ProjectFileDir$/scm-ui + +* Run Configurations / Edit Configuration + * Templates / Jest + * Jest package: .../scm-ui/node_modules/jest + * Jest options: --config node_modules/@scm-manager/ui-bundler/src/jest.ide.config.js + +* Run Configurations / Edit Configuration + * Add npm + * Name: run-frontend + * package-json: .../scm-ui/package.json + * Command: run + * Scripts: start + +## Both + +* EditorConfig \ No newline at end of file diff --git a/docs/v2/style-guide.md b/docs/v2/style-guide.md new file mode 100644 index 0000000000..dc72dae1cb --- /dev/null +++ b/docs/v2/style-guide.md @@ -0,0 +1,27 @@ +# Style Guide + +Starting with version 2 of SCM-Manager we have decided to change the code style and conform to more common rules. Furthermore we abandon the rule, that everything needs to have a javadoc description. Nonetheless we have decided against a "big bang" adaption of the new rule, because this would have lead to enourmous problems for merges from 1.x to 2.x. + +So whenever touching 1.x code you have to make the decision, whether it is appropriate to migrate some of the code you touch to the new style. Always keep in mind, that even slight changes may be dangerous becaus old code might not have a good test coverage. + +Also it is a good guide line to adapt Postel's law: *Be conservative in what you do, be liberal in what you accept from others.* So do not be the wise guy changing everything that does not fit to the rules below just because. + +## Java + +Please mind the [EditorConfig](https://editorconfig.org/) file `.editorconf` in the root of the SCM-Manager and the [configuration guide](intellij-idea-configuration) for IntelliJ IDEA. There are plugins for a lot of IDEs and text editors. + +- Indentation with 2 spaces and no tabs (we have kept this rule from 1.x) +- Order of members: + - public static fields + - private static fields + - public instant fields + - private instant fields + - constructors + - methods +- No "star imports", that is no `import java.util.*` +- One empty line between functions +- No separate lines for opening curly braces +- Though we will not define a maximum line length, you should break lines when they go beyond 120 characters or so. + +## JavaScript +Take a look at our styleguide using `yarn serve` in ui-styles directory. \ No newline at end of file diff --git a/docs/v2/vulnerabilities.md b/docs/v2/vulnerabilities.md new file mode 100644 index 0000000000..28c6b06e1f --- /dev/null +++ b/docs/v2/vulnerabilities.md @@ -0,0 +1,6 @@ +# Vulnerabilities + +## Not applicable + +* **CVE-2014-0114**: BeanUtils is transitive dependency of Apache Shiro. It is only used to wire shiro components. +* **SONATYPE-2016-0026**: We disabled the "remember me" feature completly. \ No newline at end of file diff --git a/docs/webhook-plugin.md b/docs/webhook-plugin.md new file mode 100644 index 0000000000..7ac6e56e9b --- /dev/null +++ b/docs/webhook-plugin.md @@ -0,0 +1,42 @@ +WebHook Plugin +-------------- + +### Installation + +- Login in as administrator +- Open Plugins +- Install scm-webhook-plugin +- Restart your applicationserver + +### Usage + +After the restart you should see a \"Webhooks\" tab for each repository. +You could now insert a new webhook for a repository. The url pattern is +the url of the remote webserver. It is possible to use placeholders in +the url: + +- \${repository.id} - the id of the current repository +- \${repository.name} - the name of the current repository +- \${first.id} - the if of the first changeset in the push +- \${last.author.name} - the name of the author of the last changeset + in the commit + +If you enable the \"Execute on every commit\" checkbox the last and +first patterns are not available, but you could use the commit pattern +e.g: + +- \${changeset.id} - The id of the current changeset +- \${changeset.author.name} - The name of the author of the current + changeset + +If you need more informations about the available patterns have a look +at the javadoc. Ever method which starts with a get could be used in a +pattern (Repository.getName() would be \${repository.name}): + +- [repository](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/Repository.html "wikilink") +- [changeset, first and + last](http://docs.scm-manager.org/apidocs/latest/sonia/scm/repository/Changeset.html "wikilink") + +Since version 1.4 of the webhook-plugin there is also a global +configuration at \"Config-\>General\". Global WebHooks are executed for +every repository.