start => pootle

# Version control in Pootle

Pootle has abilities to integrate with a version control system such as CVS or Subversion (SVN) (also called revision control systems). For a general overview of what a version control system is, see http://en.wikipedia.org/wiki/Revision_control (available in several other languages as well).

All features described below are already implemented.

## Extra reading

Some more ideas about version control integration are mentioned here: version_control

Below there are references to assigning rights to users in Pootle. More information is here: permissions

## Supported systems

Pootle supports CVS and Subversion (SVN). It should be possible to add other systems fairly easily. Interested programmers can look at the file Pootle/versioncontrol.py.

## Preperation

To have any sort of integration with version control from within Pootle, it is necessary to check out the translation files into their correct places in their Pootle projects. The CVS or SVN meta files (CVS/ or .svn/) need to be there. This has to be done outside of Pootle.

Feature suggestions:

- automatically follow symlinked language files and check if the parent directory of the destination file is under version control (useful if the pootle administrator created symlinks to the language files of a project (spread across multiple directories) in a single pootle directory)

## Updating

If you want to update the Pootle copy of the translations with the version that is currently in version control, a contributor with the appropriate rights can click on the “Update” link for a file which will do the update process. The project administrator needs to assign the “update” right to people that will do this.

Since updating from version control leaves the possiblity that a third party could have been involved (another translator accessing the version control directly), we need to check carefully how we update. Those familiar with version control conflicts will understand that we can’t afford to have that as we won’t be able to resolve them. Therefore Pootle will be conservative and will consider the version control system to be the authority.

Feature suggestions:

- Any conflicts in the local file should be converted to suggestions that need to be reviewed.

## Commiting

There is the ability to commit the translation files from inside Pootle. In the case where authentication is required to submit the translation to version control (probably almost all relevant systems), there needs to be a non-blocking authentication method. Pootle will not be able to commit if a password is necessary to complete the action. This unfortunately means that it will probably not be realistic for Pootle to commit with the project admin’s credentials, as this will require his/her private key(s) to be on the Pootle server.

This usage scenario is more useful for people hosting their own Pootle server that are able to setup one commit account on the version control server, or perhaps one account for each team. A typical commit message will look something like this:

    Commit from GNOME Pootle by user Sipho.  80 of 100 messages translated (7 fuzzy).

So it is still possible to see who submitted what and when, and actually provides some useful statistics in the commit message. A user must be assigned commit privileges by the project administrator. If the user has the correct privileges, they will see a “submit” link next to each file.

Possible ways of configuring non-interactive authentication are described in configure version control authentication.

Feature suggestions:

- provide user interface for personal authentification (e.g. password or keyfile upload) for one-time use or permanent storage (attached to this specific pootle user)