Git Plugin for Trac
Notice: GitPlugin is deprecated. It has been included as an (optional) plugin in the Trac 1.0 distribution. It is now maintained and developed at trac:TracGit.
Description
This is yet another plugin for Trac 0.10/0.11/0.12/0.13dev which enables GIT to be used instead of Subversion for the trac:VersioningSystemBackend
Features
- Browsing source code in a Git repository via the TracBrowser
- Viewing the change history of a file or directory using TracRevisionLog
- Performing diffs between any two files or two directories
- Displaying submitted changes in the TracTimeline (0.11)
- (Optionally) caching TracChangeset information in Trac's database (0.11)
- Caching Git commit relation graph in memory (0.11)
- Using the TracSearch page to search change descriptions (0.11)
- Annotation support, also known as "blame" operation (0.11)
- Interpretation of 40-character wide hex-strings as sha1 commit checksums
- ...
Example Sites
- nanosleep.org's GitPlugin branch (using trac 0.10)
- Flumotion project (using trac 0.12)
Requirements
Branch | trac-0.10 | trac-0.11/trac-0.11-py24 | master |
Trac | 0.10.x | 0.11.x | 0.12.x/1.0dev |
Python | 2.4+ | 2.5+/2.4+ | 2.5+ |
GIT | 1.4.4+ | 1.5.2+ (for plugin v0.11.0.1) 1.5.6+ (for plugin v0.11.0.2+) | 1.5.6+ |
Bugs/Feature Requests/Contributions
As this is for now just a proof of concept implementation, it has quite some deficiencies. Existing old bugs and feature requests for GitPlugin can be found here (pre 1.0) and/or here (1.0+)
If you have any issues, create a new ticket (1.0+).
Source Code
The source code is hosted at GitHub
(An experimental branch of this plugin with a hacky caching feature and some bug fixes is available from here.)
Installation
To install GitPlugin, grab a copy of it, and then follow the generic instructions at trac:TracPlugins
If you have a recent setuptools version installed, you can directly install GitPlugin from the Github repository.
For Trac 0.11:
easy_install http://github.com/hvr/trac-git-plugin/tarball/trac-0.11
or alternatively the Python 2.4 backport:
easy_install http://github.com/hvr/trac-git-plugin/tarball/trac-0.11-py24
For Trac 0.12
easy_install http://github.com/hvr/trac-git-plugin/tarball/master
Note
This is a rare case where pip is probably more of a hassle than easy_install. pip, by design, does not generate the .egg file for you, which Trac needs.
Configuration
See also wiki:TracIni#git-section
of your current Trac installation (if GitPlugin is enabled), for an up-to-date list of customizable [git]
settings.
Simply point your Trac instance to a local git repository, and configure your TracIni:
[trac] # simple single-repository configuration repository_dir = /var/git/Test.git repository_type = git ## the following settings are only supported for plugin version 0.11 or later [git] ## let Trac cache meta-data via CachedRepository wrapper; default: false cached_repository = true ## disable automatic garbage collection for in-memory commit-tree cache; default: false persistent_cache = true ## length revision sha-sums should be tried to be abbreviated to (must be >= 4 and <= 40); default: 7 shortrev_len = 6 ## (0.12.0.3+) minimum length for which hex-strings will be interpreted as commit ids in wiki context; default: 40 wiki_shortrev_len = 7 ## executable file name (in case of doubt use absolute path!) of git binary; default: 'git' git_bin = /usr/src/git-dev/git ## (0.12.0.5+) define charset encoding of paths stored within git repository; default: 'utf-8' git_fs_encoding = latin1 ## (0.12.0.3+) enable reverse mapping of git email addresses to trac user ids; default: false trac_user_rlookup = true ## (0.12.0.3+) use git-committer id instead of git-author id as changeset owner; default: true use_committer_id = false ## (0.12.0.3+) use git-committer timestamp instead of git-author timestamp as changeset time; default: true use_committer_time = false
Multi-Repository Configuration
Starting with Trac 0.12, GitPlugin gained support for multi-repository configuration (see also T:TracRepositoryAdmin for generic instructions)
TODO write about current issues wrt GitPlugin and how to workaround them
post-receive hook scripts
For Trac 0.11 see attachments below.
With Trac 0.12 a VC independent plugin approach to handling ticket references in commit messages has been put into place.
Thus for 0.12 in you basically need to enable the CommitTicketUpdater component in trac.ini
or via the webinterface under 'Admin/Plugins'. Additionally you have to call trac-admin TRAC_ENV changeset added <commitid(s)>
, e.g. by putting a post-receive
script into your_repository.git/hooks/
. Won't work as intended before #7301 is fixed.
Two examples are available as attachments.
trac-post-receive-hook-0.12-only-master.py - example that adds to Trac only commits to the master (or other specified) branch
trac-post-receive-hook-0.12-new-commits-from-all-branches.py - example that adds to Trac all commits, ensuring that every commit is added only once.
trac-post-receive-hook-0.12-new-commits-from-all-branches-with-logfile.py - the previous one, but with a little change in the REPO_NAME, and adding a log file to detect error. I have not tested it with other repositories different to the default one. I suggest that to use one of the two post-receive files, take in consideration the user's permission for exec (I suggest in debian use the user git that belongs to the group www-data):
To test post-receive
/srv/git/myrepo/.git/hooks/trac-post-receive-hook-0.12-new-commits-from-all-branches-with-logfile.py &>> /tmp/tracgitplugin.log
Definitive post-receive
/srv/git/myrepo/.git/hooks/trac-post-receive-hook-0.12-new-commits-from-all-branches-with-logfile.py &> /dev/null
Its is important that your git user have access to read the trac.ini and his directory, and also modify access to the trac.db file and his directory as well. This is made by adding the git to the apache2 group (in debian www-data group). If you use log file configured in your trac.ini, it is important that the user have the modify permission also, and the directory as well.
If you are using Gitorious, there is a CGI script, you can configure as WebHook.
Enabling the Component
You will also need to change your trac.ini file accordingly. Thus repository_sync_per_request under the trac section is to be unset, and tracopt.ticket.commit_updater.* under component are to be set to enabled. e.g. :
[trac] repository_dir = /path/to/git/repos.git/ repository_sync_per_request = ... [components] tracext.git.* = enabled tracopt.ticket.commit_updater.committicketreferencemacro = enabled tracopt.ticket.commit_updater.committicketupdater = enabled ...
Also make sure that the user executing the trac-admin command has read access to your TRAC_ENV and write access to your trac.log as well as to your trac database.
Troubleshooting
/!\ NOTES :
- the
Test.git
in the configuration section above needs to be the.git
repository directory (i.e. the one containing the fileHEAD
andconfig
), not the working tree directory that holds the.git/
folder.
- Wrong permissions may also be the cause of the error
!GitError: GIT control files not found, maybe wrong directory?
. Make sure therepository_dir
argument is accessible viagit
by thetracd
process.
- If you are noticing a slow down in trac with a repository above 500 commits, try disabling the caching. It seems to bog things down as a repo grows.
- If installed globally, don't forget to enable the plugin:
[components] # for plugin version 0.10 gitplugin.* = enabled # for plugin version 0.11.0.1+ tracext.git.* = enabled
- If on Trac 0.12 you don't see the shortrev and commit branch, you probably have caching enabled (cached_repository = true, persistent_cache = true). Set those to false.
Recent Changes
Author/Contributors
Author: Herbert Valerio Riedel
Maintainer: none (deprecated)
Contributors: Hans Petter Jansson, Juan Fernando Jaramillo
Attachments (7)
-
trac-post-receive-hook.py (7.2 KB) - added by 15 years ago.
post-receive hook for closing and referencing tickets
-
trac-post-receive-hook.2.py (7.3 KB) - added by 15 years ago.
post-receive hook for closing and referencing tickets
-
trac-post-receive-hook.3.py (7.5 KB) - added by 15 years ago.
post-receive hook for closing and referencing tickets - now auto-creating git_seen table
-
trac-post-receive-hook-0.12-only-master.py (895 bytes) - added by 14 years ago.
Old example from main site
-
trac-post-receive-hook-0.12-new-commits-from-all-branches.py (2.2 KB) - added by 13 years ago.
Add commits from all branches, but only those that are new to the repository. Properly handles many branches in one push. Added version number.
-
trac-post-receive-hook-0.12-new-commits-from-all-branches-with-logfile.py (2.5 KB) - added by 13 years ago.
Correction of the previous version, and add log file to detect errors.
-
trac-post-receive-hook.4.py (7.5 KB) - added by 12 years ago.
post-receive hook for closing and referencing tickets - updated to trac 1.0; fixed syntax; removed unused imports
Download all attachments as: .zip