public
Description: Gitorious aims to provide a great way of doing distributed opensource code collaboration.
Homepage: http://gitorious.org/projects/gitorious
Clone URL: git://github.com/dysinger/gitorious.git
Search Repo:
Merge commit 'johan/master'

* commit 'johan/master': (70 commits)
  updated todo
  FIXED: order events desc
  color code various events just a tiny bit
  Smaller more matching feed icon
  html escape commits in events
  Made the user feed a member action, since usernames can contain dots
  output less from rebuild_events
  Updated TODO
  commits-by-author graph should use gitorious username (if found)
  Disabling readme rendering until we decided on the specifics
  Fixed event display of commit message. TODO updated
  atom feed for /events.
  simple_format for event body
  Fixed formatted user path, Make (more) visible the atom feed for 
  activities
  Sanitize the README content
  Added method to link file path to blob
  Render README for repositories
  fix submenu positioning in webkit
  Simplify rounded corners css, and add webkit support
  Print less from *-receive hooks
  ...
dysinger (author)
Tue Apr 29 17:29:28 -0700 2008
commit  8c930210231c6383bb5c40fbf3b69a3676b3a5e0
tree    b00466e3649ba91e9e9c0b773fd6f9a7d4ab5a06
parent  1015c9e63e990cc98199b5b301cac03db41dfcc9 parent  25177c88703dcc6146d0d67afc937e8240c3c4be
...
 
 
 
 
 
 
 
 
 
 
 
1
2
3
...
6
7
8
9
10
11
12
13
...
16
17
18
19
20
21
22
...
32
33
34
35
36
37
38
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
17
18
19
 
 
20
21
22
...
25
26
27
 
28
29
30
...
40
41
42
 
43
44
45
0
@@ -1,3 +1,14 @@
0
+events:
0
+* need to create user-less events even we don't find matching users, otherwise it gets weird whenever there's commits from non-registered gitorious users (or users commit from another email).
0
+- maybe save name+email in events table in that case, so we can hook them up to a user later if needed.
0
+
0
+new-ui:
0
+* mandatory project descriptions, at least a sentence or two
0
+* tweak fonts-sizes and line-heights
0
+* Clone stats graph on repositories#index
0
+* popular & active projects on frontpage
0
+* make the top-header smaller (move gitorious logo to footer?)
0
+
0
 (in no particular order)
0
 
0
 two from Yurii:
0
@@ -6,8 +17,6 @@
0
 
0
 * tree browser: deal better with funny characters: http://gitorious.org/projects/avara/repos/mainline/trees/master
0
 * if you comment on a specific commit, you should get redirected back there
0
-* graphs should show username (if we have it) for avoiding confusion and for consistency
0
-** Repository#commit_graph_data_by_author should just use git-shortlog summary instead of jumping through hoops about it
0
 
0
 > If you do `git archive --format=tar --prefix=myproject/ HEAD | gzip >
0
 > myproject.tar.gz`, when .gitattributes specifies files that have
0
@@ -16,7 +25,6 @@
0
 > it'd be pretty nice if it did.
0
 
0
 * Deal gracefully with markdown errors (and/or look into using the other markdown libary instead)
0
-* Don't generate graphs with big "No Data", text even if there's no data
0
 * Markdownify atom feed body for projects.atom
0
 * Make the fact that you _can_ clone/fork any repo more visible, maybe reword it since people confuse it with local cloning
0
 * Show the most recent mergerequests on users dashboard so they can track them
0
@@ -32,7 +40,6 @@
0
 * Nicer diff stats
0
 * more interesting project stats on frontpage
0
 * parse git submodule data and link to project if submodule is in gitorious
0
-* link to users in gitorious in commmits if email match
0
 * add mainline as a remote branch in clones
0
 * timezone support
0
 * Email source_repository owner about merge_request changes
...
29
30
31
 
32
33
34
...
29
30
31
32
33
34
35
0
@@ -29,6 +29,7 @@
0
     @comment.project = @project
0
     respond_to do |format|
0
       if @comment.save
0
+ @project.create_event(Action::COMMENT, @comment, current_user)
0
         format.html do
0
           flash[:success] = "Your comment was added"
0
           redirect_to project_repository_comments_path(@project, @repository)
...
21
22
23
 
 
24
25
26
...
38
39
40
 
41
42
43
...
21
22
23
24
25
26
27
28
...
40
41
42
43
44
45
46
0
@@ -21,6 +21,8 @@
0
 
0
     respond_to do |format|
0
       if @repository.add_committer(@committer)
0
+ @committership = @repository.committerships.find_by_user_id(@committer.id)
0
+ @project.create_event(Action::ADD_COMMITTER, @committership, current_user)
0
         format.html { redirect_to([@repository.project, @repository]) }
0
         format.xml do
0
           render :xml => @committer
0
@@ -38,6 +40,7 @@
0
     
0
     respond_to do |format|
0
       if @committership.destroy
0
+ @project.create_event(Action::REMOVE_COMMITTER, @repository, current_user, params[:id])
0
         flash[:success] = "User removed from repository"
0
         format.html { redirect_to [@repository.project, @repository] }
0
         format.xml { render :nothing, :status => :ok }
...
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
0
@@ -1 +1,14 @@
0
+class EventsController < ApplicationController
0
+ def index
0
+ @events = Event.paginate(:all, :order => "events.created_at desc",
0
+ :page => params[:page], :include => [:user])
0
+ @atom_auto_discovery_url = formatted_events_path(:atom)
0
+
0
+ respond_to do |if_format_is|
0
+ if_format_is.html {}
0
+ if_format_is.atom {}
0
+ end
0
+ end
0
+
0
+end
...
31
32
33
 
34
35
36
...
50
51
52
 
53
54
55
...
62
63
64
 
65
66
67
...
72
73
74
 
75
76
77
...
31
32
33
34
35
36
37
...
51
52
53
54
55
56
57
...
64
65
66
67
68
69
70
...
75
76
77
78
79
80
81
0
@@ -31,6 +31,7 @@
0
     @merge_request.user = current_user
0
     respond_to do |format|
0
       if @merge_request.save
0
+ @project.create_event(Action::REQUEST_MERGE, @merge_request, current_user)
0
         format.html {
0
           flash[:success] = %Q{You sent a merge request to "#{@merge_request.target_repository.name}"}
0
           redirect_to project_repository_path(@project, @repository) and return
0
@@ -50,6 +51,7 @@
0
     # TODO: put to change status
0
     @merge_request.status = params[:merge_request][:status]
0
     if @merge_request.save
0
+ @project.create_event(Action::RESOLVE_MERGE_REQUEST, @merge_request, current_user)
0
       flash[:notice] = "The merge request was marked as #{@merge_request.status_string}"
0
     end
0
     redirect_to [@project, @repository, @merge_request]
0
@@ -62,6 +64,7 @@
0
   def update
0
     @merge_request.attributes = params[:merge_request]
0
     if @merge_request.save
0
+ @project.create_event(Action::UPDATE_MERGE_REQUEST, @merge_request, current_user)
0
       flash[:success] = "Merge request was updated"
0
       redirect_to [@project, @repository, @merge_request]
0
     else
0
@@ -72,6 +75,7 @@
0
   
0
   def destroy
0
     @merge_request.destroy
0
+ @project.create_event(Action::DELETE_MERGE_REQUEST, @repository, current_user)
0
     flash[:success] = "Merge request was retracted"
0
     redirect_to project_repository_path(@project, @repository)
0
   end
...
31
32
33
34
 
 
 
 
 
35
36
37
38
 
 
39
40
41
...
46
47
48
 
49
50
51
...
64
65
66
 
67
68
69
70
...
77
78
79
 
80
 
81
82
83
...
31
32
33
 
34
35
36
37
38
39
40
41
 
42
43
44
45
46
...
51
52
53
54
55
56
57
...
70
71
72
73
74
75
76
77
...
84
85
86
87
88
89
90
91
92
0
@@ -31,11 +31,16 @@
0
   
0
   def show
0
     @project = Project.find_by_slug!(params[:id], :include => [:repositories])
0
- @repositories = @project.repositories
0
+ @mainline_repository = @project.mainline_repository
0
+ @repositories = @project.repository_clones
0
+ @events = @project.events.paginate(:all, :page => params[:page],
0
+ :order => "created_at desc", :include => [:user, :project])
0
+ @atom_auto_discovery_url = formatted_project_path(@project, :atom)
0
     
0
     respond_to do |format|
0
       format.html
0
- format.xml { render :xml => @project }
0
+ format.xml { render :xml => @project }
0
+ format.atom { }
0
     end
0
   end
0
   
0
@@ -46,6 +51,7 @@
0
     @project = Project.new(params[:project])
0
     @project.user = current_user
0
     if @project.save
0
+ @project.create_event(Action::CREATE_PROJECT, @project, current_user)
0
       redirect_to projects_path
0
     else
0
       render :action => 'new'
0
@@ -64,6 +70,7 @@
0
     end
0
     @project.attributes = params[:project]
0
     if @project.save
0
+ @project.create_event(Action::UPDATE_PROJECT, @project, current_user)
0
       redirect_to project_path(@project)
0
     else
0
       render :action => 'new'
0
0
@@ -77,7 +84,9 @@
0
   def destroy
0
     @project = Project.find_by_slug!(params[:id])
0
     if @project.can_be_deleted_by?(current_user)
0
+ project_title = @project.title
0
       @project.destroy
0
+ #current_user.create_event(Action::DELETE_PROJECT, nil, project_title)
0
     else
0
       flash[:error] = "You're not the owner of this project, or the project has clones"
0
     end
...
6
7
8
9
 
10
11
12
13
14
15
16
17
18
19
20
 
 
21
22
23
24
25
26
 
27
28
29
...
61
62
63
 
 
64
65
66
67
...
89
90
91
 
92
93
 
94
95
96
...
6
7
8
 
9
10
11
12
13
 
 
 
 
 
 
 
14
15
16
17
18
19
20
 
21
22
23
24
...
56
57
58
59
60
61
62
63
64
...
86
87
88
89
90
91
92
93
94
95
0
@@ -6,24 +6,19 @@
0
   session :off, :only => [:writable_by]
0
   
0
   def index
0
- redirect_to(project_path(@project))
0
+ @repositories = @project.repositories.find(:all, :include => [:user, :events, :project])
0
   end
0
     
0
   def show
0
     @repository = @project.repositories.find_by_name!(params[:id])
0
- @comment_count = @repository.comments.count
0
- @merge_request_count = @repository.merge_requests.count_open
0
- if @repository.has_commits?
0
- @commits = @repository.paginated_commits(@repository.head_candidate.name, page=1)
0
- else
0
- @commits = []
0
- end
0
+ @events = @repository.events.paginate(:all, :page => params[:page],
0
+ :order => "created_at desc")
0
     
0
     @atom_auto_discovery_url = formatted_project_repository_path(@project, @repository, :atom)
0
     respond_to do |format|
0
       format.html
0
       format.xml { render :xml => @repository }
0
- format.atom { render :template => "logs/feed.atom.builder" }
0
+ format.atom { }
0
     end
0
   end
0
   
0
@@ -61,6 +56,8 @@
0
     
0
     respond_to do |format|
0
       if @repository.save
0
+ @project.create_event(Action::CLONE_REPOSITORY, @repository, current_user, @repository_to_clone.id)
0
+
0
         location = project_repository_path(@project, @repository)
0
         format.html { redirect_to location }
0
         format.xml { render :xml => @repository, :status => :created, :location => location }
0
0
@@ -89,8 +86,10 @@
0
   def destroy
0
     @repository = @project.repositories.find_by_name!(params[:id])
0
     if @repository.can_be_deleted_by?(current_user)
0
+ repo_name = @repository.name
0
       flash[:notice] = "The repository was deleted"
0
       @repository.destroy
0
+ @project.create_event(Action::DELETE_REPOSITORY, @project, current_user, repo_name)
0
     else
0
       flash[:error] = "You're not the owner of this repository"
0
     end
...
7
8
9
10
11
12
13
14
15
16
17
 
 
 
 
 
 
 
 
18
19
20
...
7
8
9
 
 
 
 
 
 
 
 
10
11
12
13
14
15
16
17
18
19
20
0
@@ -7,14 +7,14 @@
0
   
0
   def dashboard
0
     @projects = current_user.projects
0
- project_ids = @projects.map(&:id)
0
- @recent_comments = Comment.find(:all, :limit => 10,
0
- :conditions => ["comments.project_id in (?)", project_ids],
0
- :order => "comments.created_at desc", :include => [:user, :repository])
0
- @repository_clones = Repository.find(:all, :order => "created_at desc",
0
- :conditions => ["project_id in (?) and mainline = ?", project_ids, false])
0
-
0
- @repositories = current_user.repositories.find(:all, :conditions => ["mainline = ?", false])
0
+ @repositories = current_user.repositories.find(:all,
0
+ :conditions => ["mainline = ?", false])
0
+ event_project_ids = (@projects.map(&:id) + @repositories.map(&:project_id)).uniq
0
+ @events = Event.paginate(:all,
0
+ :page => params[:page],
0
+ :conditions => ["events.project_id in (?)", event_project_ids],
0
+ :order => "events.created_at desc",
0
+ :include => [:user, :project])
0
   end
0
   
0
   def about
...
7
8
9
 
 
 
 
10
11
12
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
15
16
...
7
8
9
10
11
12
13
14
 
 
 
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
0
@@ -7,10 +7,28 @@
0
     @user = User.find_by_login!(params[:id])
0
     @projects = @user.projects.find(:all, :include => [:tags, { :repositories => :project }])
0
     @repositories = @user.repositories.find(:all, :conditions => ["mainline = ?", false])
0
+ @events = @user.events.paginate(:all,
0
+ :page => params[:page],
0
+ :order => "events.created_at desc",
0
+ :include => [:user, :project])
0
     
0
- @commits_last_week = 0
0
- @projects.map{|p| p.repositories.first }.concat(@repositories).each do |repo|
0
- @commits_last_week += repo.count_commits_from_last_week_by_user(@user)
0
+ @commits_last_week = @user.events.count(:all,
0
+ :conditions => ["created_at > ? AND action = ?", 7.days.ago, Action::COMMIT])
0
+ @atom_auto_discovery_url = formatted_feed_user_path(@user, :atom)
0
+
0
+ respond_to do |format|
0
+ format.html { }
0
+ format.atom { redirect_to formatted_feed_user_path(@user, :atom) }
0
+ end
0
+ end
0
+
0
+ def feed
0
+ @user = User.find_by_login!(params[:id])
0
+ @events = @user.events.find(:all, :order => "events.created_at desc",
0
+ :include => [:user, :project], :limit => 30)
0
+ respond_to do |format|
0
+ format.html { redirect_to user_path(@user) }
0
+ format.atom { }
0
     end
0
   end
0
 
...
2
3
4
 
 
 
 
 
5
6
7
...
38
39
40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
42
43
...
100
101
102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
104
...
2
3
4
5
6
7
8
9
10
11
12
...
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
...
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
0
@@ -2,6 +2,11 @@
0
 module ApplicationHelper
0
   include TagsHelper
0
   
0
+ def feed_icon(url, alt_title = "Atom feed", size = :small)
0
+ link_to image_tag("feed_12.png", :class => "feed_icon"), url,
0
+ :alt => alt_title, :title => alt_title
0
+ end
0
+
0
   def default_css_tag_sizes
0
     %w(tag_size_1 tag_size_2 tag_size_3 tag_size_4)
0
   end
0
@@ -38,6 +43,20 @@
0
     end
0
   end
0
   
0
+ def submenu_selected_class_if_current?(section)
0
+ case section
0
+ when :overview
0
+ if %w[projects].include?(controller.controller_name )
0
+ return "selected"
0
+ end
0
+ when :repositories
0
+ if %w[repositories trees logs commits comitters comments merge_requests
0
+ blobs committers].include?(controller.controller_name )
0
+ return "selected"
0
+ end
0
+ end
0
+ end
0
+
0
   def link_to_with_selected(name, options = {}, html_options = nil)
0
     html_options = current_page?(options) ? {:class => "selected"} : nil
0
     link_to(name, options = {}, html_options)
0
@@ -100,6 +119,130 @@
0
     if File.exist?(File.join(Gitorious::Graphs::Builder.graph_dir, filename))
0
       image_tag("graphs/#{filename}")
0
     end
0
+ end
0
+
0
+ def action_and_body_for_event(event)
0
+ target = event.target
0
+ action = ""
0
+ body = ""
0
+ category = ""
0
+ case event.action
0
+ when Action::CREATE_PROJECT
0
+ action = "<strong>created project</strong> #{link_to h(target.title), project_path(target)}"
0
+ body = truncate(target.stripped_description, 100)
0
+ category = "project"
0
+ when Action::DELETE_PROJECT
0
+ action = "<strong>deleted project</strong> #{h(event.data)}"
0
+ category = "project"
0
+ when Action::UPDATE_PROJECT
0
+ action = "<strong>updated project</strong> #{link_to h(target.title), project_path(target)}"
0
+ category = "project"
0
+ when Action::CLONE_REPOSITORY
0
+ original_repo = Repository.find_by_id(event.data.to_i)
0
+ next if original_repo.nil?
0
+
0
+ project = target.project
0
+
0
+ action = "<strong>forked</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(original_repo.name), project_repository_url(project, original_repo)} in #{link_to h(target.name), project_repository_url(project, target)}"
0
+ category = "repository"
0
+ when Action::DELETE_REPOSITORY
0
+ action = "<strong>deleted repository</strong> #{link_to h(target.title), project_path(target)}/#{event.data}"
0
+ category = "project"
0
+ when Action::COMMIT
0
+ project = event.project
0
+ action = "<strong>committed</strong> #{link_to event.data[0,8], project_repository_commit_path(project, target, event.data)} to #{link_to h(project.slug), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
0
+ body = link_to(h(truncate(event.body, 150)), project_repository_commit_path(project, target, event.data))
0
+ category = "commit"
0
+ when Action::CREATE_BRANCH
0
+ project = target.project
0
+ if event.data == "master"
0
+ action = "<strong>started development</strong> of #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
0
+ body = event.body
0
+ else
0
+ action = "<strong>created branch</strong> #{link_to h(event.data), project_repository_tree_path(project, target, event.data)} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
0
+ end
0
+ category = "commit"
0
+ when Action::DELETE_BRANCH
0
+ project = target.project
0
+ action = "<strong>deleted branch</strong> #{event.data} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
0
+ category = "commit"
0
+ when Action::CREATE_TAG
0
+ project = target.project
0
+ action = "<strong>tagged</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
0
+ body = "#{link_to event.data, project_repository_commit_path(project, target, event.data)}<br/>#{event.body}"
0
+ category = "commit"
0
+ when Action::DELETE_TAG
0
+ project = target.project
0
+ action = "<strong>deleted tag</strong> #{event.data} on #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
0
+ category = "commit"
0
+ when Action::ADD_COMMITTER
0
+ user = target.user
0
+ repo = target.repository
0
+ action = "<strong>added committer</strong> #{link_to user.login, user_path(user)} to #{link_to h(repo.project.title), project_path(repo.project)}/#{link_to h(repo.name), project_repository_url(repo.project, repo)}"
0
+ category = "repository"
0
+ when Action::REMOVE_COMMITTER
0
+ user = User.find_by_id(event.data.to_i)
0
+ next unless user
0
+
0
+ project = target.project
0
+ action = "<strong>removed committer</strong> #{link_to user.login, user_path(user)} from #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
0
+ category = "repository"
0
+ when Action::COMMENT
0
+ project = target.project
0
+ repo = target.repository
0
+
0
+ action = "<strong>commented</strong> on #{link_to h(project.title), project_path(project)}/#{link_to h(repo.name), project_repository_url(project, repo)}"
0
+ body = truncate(h(target.body), 150)
0
+ category = "comment"
0
+ when Action::REQUEST_MERGE
0
+ source_repository = target.source_repository
0
+ project = source_repository.project
0
+ target_repository = target.target_repository
0
+
0
+ action = "<strong>requested merge</strong> #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)} to #{link_to h(project.title), project_path(project)}/#{link_to h(target_repository.name)}"
0
+ body = "#{link_to "review", [project, target_repository, target]}<br/>#{truncate(h(target.proposal), 100)}"
0
+ category = "merge request"
0
+ when Action::RESOLVE_MERGE_REQUEST
0
+ source_repository = target.source_repository
0
+ project = source_repository.project
0
+ target_repository = target.target_repository
0
+
0
+ action = "<strong>resolved merge request </strong>to [#{target.status_string}] from #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)}"
0
+ category = "merge_request"
0
+ when Action::UPDATE_MERGE_REQUEST
0
+ source_repository = target.source_repository
0
+ project = source_repository.project
0
+ target_repository = target.target_repository
0
+
0
+ action = "<strong>updated merge request</strong> from #{link_to h(project.title), project_path(project)}/#{link_to h(source_repository.name), project_repository_url(project, source_repository)}"
0
+ category = "merge_request"
0
+ when Action::DELETE_MERGE_REQUEST
0
+ project = target.project
0
+
0
+ action = "<strong>deleted merge request</strong> from #{link_to h(project.title), project_path(project)}/#{link_to h(target.name), project_repository_url(project, target)}"
0
+ category = "merge_request"
0
+ end
0
+
0
+ [action, body, category]
0
+ end
0
+
0
+ def sidebar_content?
0
+ !@content_for_sidebar.blank?
0
+ end
0
+
0
+ def render_readme(repository)
0
+ possibilities = []
0
+ repository.git.git.ls_tree({:name_only => true}, "master").each do |line|
0
+ possibilities << line[0, line.length-1] if line =~ /README.*/
0
+ end
0
+
0
+ return "" if possibilities.empty?
0
+ text = repository.git.git.show({}, "master:#{possibilities.first}")
0
+ markdown(text) rescue simple_format(sanitize(text))
0
+ end
0
+
0
+ def file_path(repository, filename, head = "master")
0
+ project_repository_blob_path(repository.project, repository, head, filename)
0
   end
0
 end
...
 
 
...
1
2
0
@@ -1 +1,3 @@
0
+module EventsHelper
0
+end
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
0
@@ -1 +1,59 @@
0
+class Action
0
+ CREATE_PROJECT = 0
0
+ DELETE_PROJECT = 1
0
+ UPDATE_PROJECT = 2
0
+ CLONE_REPOSITORY = 3
0
+ DELETE_REPOSITORY = 4
0
+ COMMIT = 5
0
+ CREATE_BRANCH = 6
0
+ DELETE_BRANCH = 7
0
+ CREATE_TAG = 8
0
+ DELETE_TAG = 9
0
+ ADD_COMMITTER = 10
0
+ REMOVE_COMMITTER = 11
0
+ COMMENT = 12
0
+ REQUEST_MERGE = 13
0
+ RESOLVE_MERGE_REQUEST = 14
0
+ UPDATE_MERGE_REQUEST = 15
0
+ DELETE_MERGE_REQUEST = 16
0
+
0
+ def self.name(action_id)
0
+ case action_id
0
+ when CREATE_PROJECT
0
+ "create project"
0
+ when DELETE_PROJECT
0
+ "delete project"
0
+ when UPDATE_PROJECT
0
+ "update project"
0
+ when CLONE_REPOSITORY
0
+ "clone repository"
0
+ when DELETE_REPOSITORY
0
+ "delete repository"
0
+ when COMMIT
0
+ "commit"
0
+ when CREATE_BRANCH
0
+ "create branch"
0
+ when DELETE_BRANCH
0
+ "delete branch"
0
+ when CREATE_TAG
0
+ "create tag"
0
+ when DELETE_TAG
0
+ "delete tag"
0
+ when ADD_COMMITTER
0
+ "add committer"
0
+ when REMOVE_COMMITTER
0
+ "remove committer"
0
+ when COMMENT
0
+ "comment"
0
+ when REQUEST_MERGE
0
+ "request merge"
0
+ when RESOLVE_MERGE_REQUEST
0
+ "resolve merge request"
0
+ when UPDATE_MERGE_REQUEST
0
+ "update merge request"
0
+ when DELETE_MERGE_REQUEST
0
+ "delete merge request"
0
+ end
0
+ end
0
+end
...
2
3
4
 
5
6
7
...
2
3
4
5
6
7
8
0
@@ -2,6 +2,7 @@
0
   belongs_to :user
0
   belongs_to :repository
0
   belongs_to :project
0
+ has_many :events, :as => :target, :dependent => :destroy
0
   
0
   is_indexed :fields => ["body"], :include => [{
0
       :association_name => "user",
...
1
2
3
 
4
5
6
...
1
2
3
4
5
6
7
0
@@ -1,6 +1,7 @@
0
 class Committership < ActiveRecord::Base
0
   belongs_to :user
0
   belongs_to :repository
0
+ has_many :events, :as => :target, :dependent => :destroy
0
   
0
   KIND_ACCESS_NONE = 0
0
   KIND_ACCESS_READ = 1
...
 
 
 
 
 
...
1
2
3
4
5
0
@@ -1 +1,6 @@
0
+class Event < ActiveRecord::Base
0
+ belongs_to :user
0
+ belongs_to :project
0
+ belongs_to :target, :polymorphic => true
0
+end
...
2
3
4
 
5
6
7
...
2
3
4
5
6
7
8
0
@@ -2,6 +2,7 @@
0
   belongs_to :user
0
   belongs_to :source_repository, :class_name => 'Repository'
0
   belongs_to :target_repository, :class_name => 'Repository'
0
+ has_many :events, :as => :target, :dependent => :destroy
0
   
0
   is_indexed :fields => ["proposal"], :include => [{
0
       :association_name => "user",