Skip to content
review system for git, using a controlled fetch methodology
JavaScript CSS Python
Find file
Latest commit 08b3329 Oct 6, 2013 @dantman Add a todo.
Failed to load latest commit information.
gareth Replace stomp.py with stompest, implement reconnect, and more... Apr 5, 2013
garethgit
garethweb Replace stomp.py with stompest, implement reconnect, and more... Apr 6, 2013
.gitignore Fix up handling of css. Sep 2, 2012
.gitmodules Stop using bootstrap as a submodule and include the downloaded versio… Sep 2, 2012
AGPL Add license information to the Gareth repo. Apr 6, 2013
CONTRIBUTOR-PROJECTS Add list of projects contributors can take up. Apr 28, 2012
Makefile Stop using bootstrap as a submodule and include the downloaded versio… Sep 2, 2012
NOTICE.md Add license information to the Gareth repo. Apr 6, 2013
README.md Add license information to the Gareth repo. Apr 6, 2013
manage.py Initial commit of a bare Django project for the 2nd Gareth rewrite. Apr 14, 2012
requirements.txt Replace stomp.py with stompest, implement reconnect, and more... Apr 6, 2013
setupdev.py Add requirements.txt and automatic developer environment setup Sep 2, 2012
syntaxdiff plan Checkpoint commit the unfinished syntax highlighted diff code that's … Sep 2, 2012
todo Add a todo. Oct 6, 2013

README.md

Gareth Code Review

Gareth is a web based code review system intended to work with git repositories.

Gareth does not depend on any hacks requiring you to use verbose cli commands, custom programs that do not come with git (such as git review), or fragile commit message amendments (like Change-Id:).

Gareth is instead fundamentally based on the standard git practice of everyone pushing new commits to their own public repository and having project maintainers pull those changes into their own repository to review and then push them into the primary repository.

Under Gareth's model. Gareth takes the role of managing the primary repository. You push any changes you want into your own public repository — hosted anywhere you want. Commits are then pulled into a review area where other contributors and maintainers can review your code and test it out. When a maintainer has decided to accept your commit Gareth does the work of merging it into the primary repository.

Installation and development

Gareth requires some fairly heavy dependencies to function correctly. If you are not installing this in production the best way to run Gareth is to use Gareth Vagrant which will use Vagrant to setup a Virtual Machine and install Gareth and all of it's dependencies into that VM separate from the rest of your system.

Requirements

Gareth is written in Python using the Django framework and requires python, some other python libraries, a SQL database, and a STOMP server to function.

Python and libraries

Gareth is primarily run with Python 2.7 and has not been tested under Python 3. It also depends on gevent which does not currently have Python 3.

Gareth depends on these python libraries:

  • gevent
  • gevent-socketio
  • gunicorn # webserver
  • django
  • south
  • pytz
  • pygments
  • diff-match-patch
  • stompest

You can use pip install -r requirements.txt to install all the necessary modules.

If you wish to use MySQL as the database you will also need the mysql-python library.

Database

Gareth stores most of it's data inside of a SQL database. It should work fine with any type of database that Django supports. But has been primarily developed against SQLite and MySQL.

STOMP

Gareth uses a STOMP server to communicate events — such as repository fetch requests and progress updates — between web requests, extra processes like the taskrunner, and clients listening over socket.io connections.

Gareth is developed against the Apache Apollo STOMP server and hasn't been tested at all against any other STOMP server.

General setup

  1. Create a settings file at gareth/settings_user.py; There is a settings_user-sample.py you can use as a base.
  2. If using sqlite ensure the directory the database will live in exists. Otherwise make sure the database and db user exists and has the necessary permissions and you have the necessary python library for Django to talk to the database server.
  3. Run ./manage.py syncdb to initialize the database
  4. Run ./manage.py migrate to finish database setup
  5. You can run ./manage.py createuser -a {username} {password} to create an admin user to login with
  6. Startup the Gunicorn webserver
  7. Run ./manage.py taskrunner to startup the Gareth task runner

CSS

Editing of css files should not be done directly. Instead anyone modifying css should edit the .scss files and be running sass --watch garethweb/public.

License

Gareth code

Copyright © 2013 - Daniel Friesen

Gareth is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Gareth is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

A copy of the GNU Affero General Public License is available inside the AGPL file.

Additionally when turning isolated parts of the Gareth codebase into libraries separate from Gareth. The code that is turned into a library may be relicensed under the MIT License, the latest version of the Apache License, the LGPL, or dual-licensed under the GPL and the Apache License or MIT License.

Documentation

In addition to whatever other license it may be under. Documentation within the Gareth codebase whether in the form of standalone documentation or in the form of code comments may be used under the Creative Commons Attribution 3.0 license.

Other code

Gareth contains some 3rd party libraries inside of it's codebase. These libraries are under different license terms than the rest of the Gareth codebase. These libraries, their information, and license terms can be found inside the NOTICE.md file.

Something went wrong with that request. Please try again.