Class: RepositoriesController

Inherits:
ApplicationController show all
Defined in:
app/controllers/repositories_controller.rb

Overview

Since:

  • 0.4.0

Instance Method Summary collapse

Methods inherited from ApplicationController

#_include_layout?, accept_api_auth, #accept_api_auth?, accept_rss_auth, #accept_rss_auth?, #api_key_from_request, #api_offset_and_limit, #api_request?, #api_switch_user_from_request, #authorize, #authorize_global, #autologin_cookie_name, #back_url, #check_if_login_required, #check_password_change, #check_project_privacy, #deny_access, #filename_for_content_disposition, #find_attachments, #find_current_user, #find_issue, #find_issues, #find_model_object, #find_optional_project, #find_project, #find_project_by_project_id, #find_project_from_association, #handle_unverified_request, #logged_user=, #logout_user, #missing_template, model_object, #parse_params_for_bulk_update, #parse_qvalues, #per_page_option, #query_statement_invalid, #redirect_back_or_default, #redirect_to_referer_or, #render_403, #render_404, #render_api_errors, #render_api_head, #render_api_ok, #render_attachment_warning_if_needed, #render_error, #render_feed, #render_validation_errors, #require_admin, #require_admin_or_api_request, #require_login, #session_expiration, #session_expired?, #set_localization, #start_user_session, #try_to_autologin, #use_layout, #user_setup, #verify_authenticity_token

Methods included from Redmine::SudoMode::Controller

#process_sudo_form, #render_sudo_form, #require_sudo_mode, #sudo_mode, #sudo_timestamp_valid?, #update_sudo_timestamp!

Methods included from Redmine::MenuManager::MenuController

#current_menu_item, #menu_items, #redirect_to_project_menu_item

Methods included from Redmine::Search::Controller

#default_search_scope, #default_search_scopes

Methods included from RoutesHelper

#_new_project_issue_path, #_new_time_entry_path, #_project_calendar_path, #_project_gantt_path, #_project_issues_path, #_report_time_entries_path, #_time_entries_path, #board_path

Methods included from Redmine::Hook::Helper

#call_hook

Methods included from Redmine::Pagination

#deprecated_paginate, #paginate, #paginator

Methods included from Redmine::I18n

#current_language, #day_letter, #day_name, #find_language, #format_date, #format_time, #l, #l_hours, #l_hours_short, #l_or_humanize, #languages_options, #ll, #lu, #month_name, #set_language_if_valid, #valid_languages

Instance Method Details

Adds a related issue to a changeset POST /projects/:project_id/repository/(:repository_id/)revisions/:rev/issues

Since:

  • 1.4.0



235
236
237
238
239
240
241
242
243
244
245
# File 'app/controllers/repositories_controller.rb', line 235

def add_related_issue
  issue_id = params[:issue_id].to_s.sub(/^#/,'')
  @issue = @changeset.find_referenced_issue_by_id(issue_id)
  if @issue && (!@issue.visible? || @changeset.issues.include?(@issue))
    @issue = nil
  end

  if @issue
    @changeset.issues << @issue
  end
end

#annotateObject

Since:

  • 0.6.1



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# File 'app/controllers/repositories_controller.rb', line 208

def annotate
  @entry = @repository.entry(@path, @rev)
  (show_error_not_found; return) unless @entry

  @annotate = @repository.scm.annotate(@path, @rev)
  if @annotate.nil? || @annotate.empty?
    (render_error l(:error_scm_annotate); return)
  end
  ann_buf_size = 0
  @annotate.lines.each do |buf|
    ann_buf_size += buf.size
  end
  if ann_buf_size > Setting.file_max_size_displayed.to_i.kilobyte
    (render_error l(:error_scm_annotate_big_text_file); return)
  end
  @changeset = @repository.find_changeset_by_name(@rev)
end

#changesObject

Since:

  • 0.5.1



131
132
133
134
135
136
137
# File 'app/controllers/repositories_controller.rb', line 131

def changes
  @entry = @repository.entry(@path, @rev)
  (show_error_not_found; return) unless @entry
  @changesets = @repository.latest_changesets(@path, @rev, Setting.repository_log_display_limit.to_i)
  @properties = @repository.properties(@path, @rev)
  @changeset = @repository.find_changeset_by_name(@rev)
end

#committersObject

Since:

  • 0.8.0



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'app/controllers/repositories_controller.rb', line 93

def committers
  @committers = @repository.committers
  @users = @project.users.to_a
  additional_user_ids = @committers.collect(&:last).collect(&:to_i) - @users.collect(&:id)
  @users += User.where(:id => additional_user_ids).to_a unless additional_user_ids.empty?
  @users.compact!
  @users.sort!
  if request.post? && params[:committers].is_a?(Hash)
    # Build a hash with repository usernames as keys and corresponding user ids as values
    @repository.committer_ids = params[:committers].values.inject({}) {|h, c| h[c.first] = c.last; h}
    flash[:notice] = l(:notice_successful_update)
    redirect_to settings_project_path(@project, :tab => 'repositories')
  end
end

#createObject

Since:

  • 1.4.0



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/controllers/repositories_controller.rb', line 47

def create
  attrs = pickup_extra_info
  @repository = Repository.factory(params[:repository_scm])
  @repository.safe_attributes = params[:repository]
  if attrs[:attrs_extra].keys.any?
    @repository.merge_extra_info(attrs[:attrs_extra])
  end
  @repository.project = @project
  if request.post? && @repository.save
    redirect_to settings_project_path(@project, :tab => 'repositories')
  else
    render :action => 'new'
  end
end

#destroyObject

Since:

  • 0.6.0



108
109
110
111
# File 'app/controllers/repositories_controller.rb', line 108

def destroy
  @repository.destroy if request.delete?
  redirect_to settings_project_path(@project, :tab => 'repositories')
end

#diffObject



256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'app/controllers/repositories_controller.rb', line 256

def diff
  if params[:format] == 'diff'
    @diff = @repository.diff(@path, @rev, @rev_to)
    (show_error_not_found; return) unless @diff
    filename = "changeset_r#{@rev}"
    filename << "_r#{@rev_to}" if @rev_to
    send_data @diff.join, :filename => "#{filename}.diff",
                          :type => 'text/x-patch',
                          :disposition => 'attachment'
  else
    @diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
    @diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)

    # Save diff type as user preference
    if User.current.logged? && @diff_type != User.current.pref[:diff_type]
      User.current.pref[:diff_type] = @diff_type
      User.current.preference.save
    end
    @cache_key = "repositories/diff/#{@repository.id}/" +
                    Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}-#{current_language}")
    unless read_fragment(@cache_key)
      @diff = @repository.diff(@path, @rev, @rev_to)
      show_error_not_found unless @diff
    end

    @changeset = @repository.find_changeset_by_name(@rev)
    @changeset_to = @rev_to ? @repository.find_changeset_by_name(@rev_to) : nil
    @diff_format_revisions = @repository.diff_format_revisions(@changeset, @changeset_to)
  end
end

#editObject

Since:

  • 0.6.0



62
63
# File 'app/controllers/repositories_controller.rb', line 62

def edit
end

#entryObject



160
161
162
# File 'app/controllers/repositories_controller.rb', line 160

def entry
  entry_and_raw(false)
end

#graphObject

Since:

  • 0.5.0



290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
# File 'app/controllers/repositories_controller.rb', line 290

def graph
  data = nil
  case params[:graph]
  when "commits_per_month"
    data = graph_commits_per_month(@repository)
  when "commits_per_author"
    data = graph_commits_per_author(@repository)
  end
  if data
    headers["Content-Type"] = "image/svg+xml"
    send_data(data, :type => "image/svg+xml", :disposition => "inline")
  else
    render_404
  end
end

#newObject

Since:

  • 1.4.0



40
41
42
43
44
45
# File 'app/controllers/repositories_controller.rb', line 40

def new
  scm = params[:repository_scm] || (Redmine::Scm::Base.all & Setting.enabled_scm).first
  @repository = Repository.factory(scm)
  @repository.is_default = @project.repository.nil?
  @repository.project = @project
end

#rawObject

Since:

  • 2.0.0



156
157
158
# File 'app/controllers/repositories_controller.rb', line 156

def raw
  entry_and_raw(true)
end

Removes a related issue from a changeset DELETE /projects/:project_id/repository/(:repository_id/)revisions/:rev/issues/:issue_id

Since:

  • 1.4.0



249
250
251
252
253
254
# File 'app/controllers/repositories_controller.rb', line 249

def remove_related_issue
  @issue = Issue.visible.find_by_id(params[:issue_id])
  if @issue
    @changeset.issues.delete(@issue)
  end
end

#revisionObject



226
227
228
229
230
231
# File 'app/controllers/repositories_controller.rb', line 226

def revision
  respond_to do |format|
    format.html
    format.js {render :layout => false}
  end
end

#revisionsObject



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'app/controllers/repositories_controller.rb', line 139

def revisions
  @changeset_count = @repository.changesets.count
  @changeset_pages = Paginator.new @changeset_count,
                                   per_page_option,
                                   params['page']
  @changesets = @repository.changesets.
    limit(@changeset_pages.per_page).
    offset(@changeset_pages.offset).
    includes(:user, :repository, :parents).
    to_a

  respond_to do |format|
    format.html { render :layout => false if request.xhr? }
    format.atom { render_feed(@changesets, :title => "#{@project.name}: #{l(:label_revision_plural)}") }
  end
end

#showObject Also known as: browse



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'app/controllers/repositories_controller.rb', line 113

def show
  @repository.fetch_changesets if @project.active? && Setting.autofetch_changesets? && @path.empty?

  @entries = @repository.entries(@path, @rev)
  @changeset = @repository.find_changeset_by_name(@rev)
  if request.xhr?
    @entries ? render(:partial => 'dir_list_content') : render(:nothing => true)
  else
    (show_error_not_found; return) unless @entries
    @changesets = @repository.latest_changesets(@path, @rev)
    @properties = @repository.properties(@path, @rev)
    @repositories = @project.repositories
    render :action => 'show'
  end
end

#statsObject

Since:

  • 0.5.0



287
288
# File 'app/controllers/repositories_controller.rb', line 287

def stats
end

#updateObject

Since:

  • 1.4.0



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/controllers/repositories_controller.rb', line 65

def update
  attrs = pickup_extra_info
  @repository.safe_attributes = attrs[:attrs]
  if attrs[:attrs_extra].keys.any?
    @repository.merge_extra_info(attrs[:attrs_extra])
  end
  @repository.project = @project
  if @repository.save
    redirect_to settings_project_path(@project, :tab => 'repositories')
  else
    render :action => 'edit'
  end
end