Bugfix: make sure to require yaml in bin/setup
[gitorious:bclow-gitorious.git] / HACKING
1 == Guide to Hacking Gitorious
2
3 === Dependencies
4
5 Ruby libraries/bindings/gems
6
7 * BlueCloth (http://rubyforge.org/projects/bluecloth/)
8 * mime-types (http://rubyforge.org/projects/mime-types)
9 * oniguruma (http://rubyforge.org/projects/oniguruma)
10 * textpow (http://rubyforge.org/projects/textpow)
11 * chronic (http://rubyforge.org/projects/chronic)
12 * rmagick (http://rubyforge.org/projects/rmagick)
13
14 Libraries/applications:
15
16 * Git (http://git-scm.org)
17 * Oniguruma C library (http://www.geocities.jp/kosako3/oniguruma/)
18 * Sphinx (http://sphinxsearch.com/)
19
20 (App is deployed on mysql, although source should be free of mysql-isms/quirks)
21
22
23 === The Hackers digest guide:
24
25 1. Do the normal rails app stuff (database.yml etc.)
26
27 2. Rename the config/gitorious.sample.yml file to gitorious.yml, and update it with your changes.
28
29 3a. If you want real project data, find a project, set the 'ready' status to true, create a bare git repository (git --bare init) in the directory GitoriousConfig['repository_base_path']/#{project.slug}/#{repository.name}.git, and push something to that repository (cd to a git repository with commits and do "git push path/to/the/bare/repository/you/just/created master").
30
31 3b. OR run the script/task_performer and let it create the repository for you (remember to do step 2 first)
32
33 4. Get your git on!
34
35 Consult the mailinglist (http://groups.google.com/group/gitorious) or drop in
36 by #gitorious on irc.freenode.net if you have questions.
37
38
39 === Tasks and other scripts
40
41 * rake db:setup creates the initial database tables
42 * script/task_performer runs any tasks in the queue (creating repositories etc)
43 * script/graph_generator generates graph.
44 * rake ultrasphinx:configure configures sphinx
45 * rake ultrasphinx:index runs the search indexer
46 * rake ultrasphinx:daemon:start and ultrasphinx:daemon:stop manage the sphinx daemon
47
48
49 === PostgreSQL
50
51 * Install the functions in vendor/plugins/ultrasphinx/lib/ultrasphinx/postgresql/
52 * After running "rake ultrasphinx:configure" you'll have to replace all instances of user with "user" in ultrasphinx's config file (user is a keyword in PostgreSQL).
53
54   perl -p -i -e 's/ user([^s]{1})/ "user"$1/g' config/ultrasphinx/*.conf
55
56
57 === Coding style
58
59 * Two spaces, no tabs, for indention
60 * Don't use and and or for boolean tests, instead always use && and ||
61 * MyClass.my_method(my_arg) -- not my_method( my_arg ) or my_method my_arg
62 * Unless precedence is an issue; do .. end for multi-line blocks, braces for single line blocks
63 * Follow the conventions you see used in the source already
64
65 (copied mostly verbatim from dev.rubyonrails.org)
66
67 === Branching model
68
69 Gitorious uses
70 [the git-flow branching model](http://nvie.com/posts/a-successful-git-branching-model/)
71 for branching. This means that the master branch is stable, and is
72 only merged to once a feature has been completed.
73
74 New features are created in feature branches (named `feature/$name`)
75 and then merged into the `next` branch once finished. Such features
76 arrive in `master` as new releases.
77
78 When contributing new features into Gitorious as merge requests, these
79 should be started the `next` branch, and marked as such when proposed.
80
81 The exception to this is hotfixes, which may be started from and
82 proposed merged into `master`. Please note that hotfixes should not
83 implement new functionality.