Version 43 (modified by 14 years ago) (diff) | ,
---|
Git Plugin for Trac
Description
This is yet another plugin for Trac 0.10/0.11 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
- ...
Requirements
0.10 Plugin | 0.11 Plugin/0.11-py2.4 Plugin | 0.12 Plugin | |
Trac | 0.10.x | 0.11.x | 0.12dev (trunk) |
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+ |
Example Sites
- nanosleep.org's GitPlugin branch (using trac 0.10)
Sites that were previously using GitPlugin
- The GIT repositories at Fedora Hosted
- GNU Parted
- ReductiveLabs Puppet
- Ohloh Labs
Bugs/Feature Requests
As this is for now just a proof of concept implementation, it has quite some deficiencies, some of which exist as tickets already:
No results
...and other potential issues/todos which aren't ticket-tracked yet:
does not highlight sha1sums automatically- issues with filenames containing newlines (seems to be a Trac bug)
- ...
Existing bugs and feature requests for GitPlugin are here (all including closed ones are here).
If you have any issues, create a new ticket.
Download, Source
Download the [download:gitplugin zipped source], check out GitPlugin from Subversion, or browse the source.
(An experimental branch of this plugin with a hacky caching feature and some bug fixes is available from here.)
Install
See also generic instructions at trac:TracPlugins
If you have a recent setuptools version installed, you can directly install GitPlugin from the Subversion repository.
For Trac 0.11:
easy_install http://trac-hacks.org/svn/gitplugin/0.11
or alternatively the Python 2.4 backport:
easy_install http://trac-hacks.org/svn/gitplugin/0.11-py2.4
For Trac 0.12
easy_install http://trac-hacks.org/svn/gitplugin/0.12
Configuration
Simply point your Trac instance to a local git repository:
[trac] repository_dir = /var/git/Test.git repository_type = git ## the following is only for the 0.11 branch [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 ## executable file name (optionally with path) of git binary; default: 'git' git_bin = /usr/src/git-dev/git
/!\ NOTE: the Test.git
above needs to be the .git
repository directory (i.e. the one containing the file HEAD
and config
), not the working tree directory that holds the .git/
folder.
/!\ NOTE: 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
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
, and call trac-admin TRAC_ENV changeset added <commitid(s)>
, e.g. by using a post-receive
script along the lines of:
#!/usr/bin/env python import sys from subprocess import Popen, PIPE, call GIT_PATH = '/usr/bin/git' BRANCHES = ['master'] TRAC_ENV = '/srv/trac/myproj' REPO_NAME = '(default)' def call_git(command, args): return Popen([GIT_PATH, command] + args, stdout=PIPE).communicate()[0] def handle_ref(old, new, ref): # If something else than the master branch (or whatever is contained by the # constant BRANCHES) was pushed, skip this ref. if not ref.startswith('refs/heads/') or ref[11:] not in BRANCHES: return # Get the list of hashs for commits in the changeset. args = (old == '0' * 40) and [new] or [new, '^' + old] pending_commits = call_git('rev-list', args).splitlines()[::-1] call(["trac-admin", TRAC_ENV, "changeset", "added", REPO_NAME] + pending_commits) if __name__ == '__main__': for line in sys.stdin: handle_ref(*line.split())
Help
12/13/2009 Anyone get this working in a shared hosting environment? I've tried with trac 0.11 and I get errors about it not finding the Git component (I did all the trac.ini stuff). If you have instructions please contact me, codecraig -at- gmail -dot- com ....thanks
Recent Changes
Author/Contributors
Author: Herbert Valerio Riedel
Contributors: Hans Petter Jansson
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 13 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 12 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 11 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