{{wiki:dokuwiki-128.png?20}} **This is a working draft. It is here for guidelines. Upon posting final guidelines, please remove this caption.**{{wiki:dokuwiki-128.png?20}}
----
====== SVN Guide Lines (Working Draft) ======
====== 0. Definitions =====
**feature**: A feature is a new introduced distinguishing characteristic of a software item. It will be called feature as long as it is not part of the code base.
**trunk**: trunk is the main development branch for the project. It underlies several rules, stated in [[#the_main_development_branch_trunk|section 1]].
**branch**: A branch is a development part that is used for the creation of modified code (e.g. features). Rules for branches are [[#development_branches|section 2]].
**tag**: A tag is a final branch where a release version is stored. Everything related to tags is stored in [[#tags|section 3]].
====== 1. The main development branch (trunk) ======
===== 1.1 Commit =====
**a.** The CHANGELOG file should be updated on every commit. Changelog entries should look like this:
YYYY-MM-DD FIRSTNAME SURNAME
* [PART] Fixed #NUMBER: TEXT
Where PART is one of the following:
* CONFIGS
* DATABASE
* DISTS
* DOCS
* ENGINE
* GUI
* SETUP
Multiple entries should be ordered alphabetically. A line should not contain more than ~120 chars.
**b.** The date of commit must be the date in UTC.
**c.** Every commit should belong to a single change: Correction of a bug, addition of a new feature (//branch reintegration//) or any other task. This facilitates the work of the quality assurance tasks. Change reverts can be performed more easy if necessary.
Commits can be done with the following command:
$ svn WORKING_COPY
$ svn up
$ svn ci -m " * [PART] Fixed #NUMBER: TEXT"
$ svn up
but better is to use an IDE such as PhpStorm, NetBean, eclipse...
Note: If someone else is the author of a patch the name of the author should be added in round brackets.
===== 1.2 Merge =====
**a.** Developers should never perform partial merge of a branch into the trunk, only complete reintegrations.
Reintegration can be done with the following command:
$ svn WORKING_COPY
$ svn up
$ svn merge --reintegrate https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/trunk
$ svn up
====== 2. Development branches ======
===== 2.1 General =====
**a.** The branches should be used to develop of new features or to maintain a version already released.
**b.** The feature branch developer should keep their branch up to date. He/she has to perform regular synchronization with the trunk and need to resolve conflicts properly.
===== 2.2 Creation =====
**a.** A release branch must be named after a release and will be created with the following command, where x.y is the number of the release.:
$ svn copy https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/trunk https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/branches/mscp-x.y
**b.** Each feature should have its own branch and must be initialized from the trunk. Use the following command for this:
$ svn copy https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/trunk https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/branches/FEATURE-NAME-dev
===== 2.2 Commit =====
The same rules as for [[#commit|1.1]] are valid.
===== 2.3 Synchronizations =====
As specified in paragraph **[[#general1|2.1.c]]** developers must perform regular synchronization of their branch with the trunk. The Synchronization should be made with the following commands:
$ svn WORKING_COPY
$ svn merge https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/trunk
$ svn ci -m "Synchonization with main development branch"
$ svn up
===== 2.4 Merge from branch to trunk =====
Partial merges from one branch into the trunk are not permitted.
===== 2.5 Re-integration =====
**a.** After the development of a feature is completed, the branch developers need to ask the team for approval to re-integrate the branch into the trunk with the following commands:
$ svn WORKING_COPY
$ svn merge https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/trunk
$ svn ci -m "Synchonization with main development branch"
$ svn up
$ svn merge --reintegrate https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/trunk
**b.** After successful re-integration, the branch developer has to delete the branch. This can done by using the following command:
$ svn rm https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/branches/YOUR_BRANCH
====== 3. Tags ======
===== 3.1 General =====
**a.** Tags are the storage of releases. Once set, tags are immutable.
**b.** Tags should be only created by the **_person preparing the release_**
**c.** Every tag has to follow he name convention **i-mscp-x.y.z**, where x.y.z is the number of the release.
===== 3.2 Tagging =====
The tagging has to be done on the day of a new version with the following command:
$ svn move https://i-mscp.svn.sourceforge.net/svnroosvnroot/i-mscp/branches/mscp-x.y.z https://i-mscp.svn.sourceforge.net/svnroot/i-mscp/tags/mscp-x.y.z