From 6c02413d2d0407535084623daeebe18329a81160 Mon Sep 17 00:00:00 2001 From: y.kokubo Date: Thu, 14 Oct 2010 17:23:03 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=E8=A4=87=E6=95=B0=E3=83=AA=E3=83=9D=E3=82=B8=E3=83=88=E3=83=AA=E3=82=92=E7=99=BB=E9=8C=B2=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 19 ++++++++------ app/helpers/application_helper.rb | 2 +- app/helpers/repositories_helper.rb | 13 ++++++--- app/models/changeset.rb | 7 +++++ app/models/project.rb | 2 +- app/views/issues/_changesets.rhtml | 2 +- app/views/projects/settings/_repository.rhtml | 32 +++++++++++++++++------ app/views/repositories/_dir_list_content.rhtml | 6 ++-- app/views/repositories/_navigation.rhtml | 2 + app/views/repositories/show.rhtml | 6 ++++ lib/redmine.rb | 2 +- 11 files changed, 64 insertions(+), 29 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index b6dcc31..14da3b7 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -36,13 +36,14 @@ class RepositoriesController < ApplicationController def edit @repository = @project.repository - if !@repository - @repository = Repository.factory(params[:repository_scm]) - @repository.project = @project if @repository + rid = params[:rid] ? params[:rid].to_i : 0 + if !@repository[rid] + @repository[rid] = Repository.factory(params[:repository_scm]) + @repository[rid].project = @project if @repository[rid] end - if request.post? && @repository - @repository.attributes = params[:repository] - @repository.save + if request.post? && @repository[rid] + @repository[rid].attributes = params[:repository] + @repository[rid].save end render(:update) do |page| page.replace_html "tab-content-repository", :partial => 'projects/settings/repository' @@ -139,7 +140,8 @@ class RepositoriesController < ApplicationController end def revision - @changeset = @repository.find_changeset_by_name(@rev) + rid = params[:rid] ? params[:rid].to_i : 0 + @changeset = @project.repository[rid].find_changeset_by_name(@rev) raise ChangesetNotFound unless @changeset respond_to do |format| @@ -199,7 +201,8 @@ class RepositoriesController < ApplicationController private def find_repository @project = Project.find(params[:id]) - @repository = @project.repository + rid = params[:rid] ? params[:rid].to_i : 0 + @repository = @project.repository[rid] (render_404; return false) unless @repository @path = params[:path].join('/') unless params[:path].nil? @path ||= '' diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 38d43e5..6d05c39 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -105,7 +105,7 @@ module ApplicationHelper def link_to_revision(revision, project, options={}) text = options.delete(:text) || format_revision(revision) - link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision)) + link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision, :rid => params[:rid]}, :title => l(:label_revision_id, revision)) end # Generates a link to a project if active diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 9596287..1b1cce0 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -87,7 +87,8 @@ module RepositoriesHelper :action => 'show', :id => @project, :path => path_param, - :rev => @changeset.revision) + :rev => @changeset.revision, + :rid => params[:rid]) output << "
  • #{text}
  • " output << render_changes_tree(s) elsif c = tree[file][:c] @@ -97,13 +98,15 @@ module RepositoriesHelper :action => 'entry', :id => @project, :path => path_param, - :rev => @changeset.revision) unless c.action == 'D' + :rev => @changeset.revision, + :rid => params[:rid]) unless c.action == 'D' text << " - #{c.revision}" unless c.revision.blank? text << ' (' + link_to('diff', :controller => 'repositories', :action => 'diff', :id => @project, :path => path_param, - :rev => @changeset.revision) + ') ' if c.action == 'M' + :rev => @changeset.revision, + :rid => params[:rid]) + ') ' if c.action == 'M' text << ' ' + content_tag('span', c.from_path, :class => 'copied-from') unless c.from_path.blank? output << "
  • #{text}
  • " end @@ -130,7 +133,7 @@ module RepositoriesHelper send(method, form, repository) if repository.is_a?(Repository) && respond_to?(method) && method != 'repository_field_tags' end - def scm_select_tag(repository) + def scm_select_tag(repository, rid) scm_options = [["--- #{l(:actionview_instancetag_blank_option)} ---", '']] Redmine::Scm::Base.all.each do |scm| scm_options << ["Repository::#{scm}".constantize.scm_name, scm] if Setting.enabled_scm.include?(scm) || (repository && repository.class.name.demodulize == scm) @@ -139,7 +142,7 @@ module RepositoriesHelper select_tag('repository_scm', options_for_select(scm_options, repository.class.name.demodulize), :disabled => (repository && !repository.new_record?), - :onchange => remote_function(:url => { :controller => 'repositories', :action => 'edit', :id => @project }, :method => :get, :with => "Form.serialize(this.form)") + :onchange => remote_function(:url => { :controller => 'repositories', :action => 'edit', :id => @project, :rid => rid }, :method => :get, :with => "Form.serialize(this.form)") ) end diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 063a4a4..4e9abbe 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -161,6 +161,13 @@ class Changeset < ActiveRecord::Base :from_revision => change[:from_revision]) end + def rid + project.repository.each_with_index do |r, i| + return i if r.id == repository.id + end + -1 + end + private # Finds issues that can be referenced by the commit message diff --git a/app/models/project.rb b/app/models/project.rb index be15151..4050701 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -41,7 +41,7 @@ class Project < ActiveRecord::Base has_many :news, :dependent => :delete_all, :include => :author has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name" has_many :boards, :dependent => :destroy, :order => "position ASC" - has_one :repository, :dependent => :destroy + has_many :repository, :dependent => :destroy has_many :changesets, :through => :repository has_one :wiki, :dependent => :destroy # Custom field for the project issues diff --git a/app/views/issues/_changesets.rhtml b/app/views/issues/_changesets.rhtml index 52cd60f..aa04216 100644 --- a/app/views/issues/_changesets.rhtml +++ b/app/views/issues/_changesets.rhtml @@ -1,7 +1,7 @@ <% changesets.each do |changeset| %>

    <%= link_to("#{l(:label_revision)} #{changeset.revision}", - :controller => 'repositories', :action => 'revision', :id => changeset.project, :rev => changeset.revision) %>
    + :controller => 'repositories', :action => 'revision', :id => changeset.project, :rev => changeset.revision, :rid => changeset.rid) %>
    <%= authoring(changeset.committed_on, changeset.author) %>

    <%= textilizable(changeset, :comments) %> diff --git a/app/views/projects/settings/_repository.rhtml b/app/views/projects/settings/_repository.rhtml index 18bb2cd..a5fd994 100644 --- a/app/views/projects/settings/_repository.rhtml +++ b/app/views/projects/settings/_repository.rhtml @@ -1,24 +1,38 @@ -<% remote_form_for :repository, @repository, - :url => { :controller => 'repositories', :action => 'edit', :id => @project }, +<% @repository.each_with_index do |r, rid| %> +<% remote_form_for :repository, r, + :url => { :controller => 'repositories', :action => 'edit', :id => @project, :rid => rid }, :builder => TabularFormBuilder, :lang => current_language do |f| %> -<%= error_messages_for 'repository' %> +<%= error_messages_for 'r' %>
    -

    <%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(@repository) %>

    -<%= repository_field_tags(f, @repository) if @repository %> +

    <%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(r, rid) %>

    +<%= repository_field_tags(f, r) if r %>
    -<% if @repository && !@repository.new_record? %> -<%= link_to(l(:label_user_plural), {:controller => 'repositories', :action => 'committers', :id => @project}, :class => 'icon icon-user') %> -<%= link_to(l(:button_delete), {:controller => 'repositories', :action => 'destroy', :id => @project}, +<% if @repository[0] && !r.new_record? %> +<%= link_to(l(:label_user_plural), {:controller => 'repositories', :action => 'committers', :id => @project, :rid => rid}, :class => 'icon icon-user') %> +<%= link_to(l(:button_delete), {:controller => 'repositories', :action => 'destroy', :id => @project, :rid => rid}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del') %> <% end %>
    -<%= submit_tag((@repository.nil? || @repository.new_record?) ? l(:button_create) : l(:button_save), :disabled => @repository.nil?) %> +<%= submit_tag((r.nil? || r.new_record?) ? l(:button_create) : l(:button_save), :disabled => r.nil?) %> +<% end %> +<% end %> + +<% rid = @repository.size + remote_form_for :repository, @repository[rid], + :url => { :controller => 'repositories', :action => 'edit', :id => @project, :rid => rid }, + :builder => TabularFormBuilder, + :lang => current_language do |f| %> +
    +

    <%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(@repository[rid], rid) %>

    +<%= repository_field_tags(f, @repository[rid]) if @repository[rid] %> +
    +<%= submit_tag((@repository[rid].nil? || @repository[rid].new_record?) ? l(:button_create) : l(:button_save), :disabled => @repository[rid].nil?) %> <% end %> diff --git a/app/views/repositories/_dir_list_content.rhtml b/app/views/repositories/_dir_list_content.rhtml index c5bd53e..639f113 100644 --- a/app/views/repositories/_dir_list_content.rhtml +++ b/app/views/repositories/_dir_list_content.rhtml @@ -4,7 +4,7 @@ <% if entry.is_dir? %> -">  <% end %> <%= link_to h(entry.name), - {:action => (entry.is_dir? ? 'show' : 'changes'), :id => @project, :path => to_path_param(entry.path), :rev => @rev}, + {:action => (entry.is_dir? ? 'show' : 'changes'), :id => @project, :path => to_path_param(entry.path), :rev => @rev, :rid => params[:rid]}, :class => (entry.is_dir? ? 'icon icon-folder' : "icon icon-file #{Redmine::MimeType.css_class_of(entry.name)}")%> <%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %> -<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %> +<% changeset = @project.repository[params[:rid].to_i].changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %> <%= link_to_revision(changeset.revision, @project) if changeset %> <%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %> <%= changeset.nil? ? h(entry.lastrev.author.to_s.split('<').first) : changeset.author if entry.lastrev %> diff --git a/app/views/repositories/_navigation.rhtml b/app/views/repositories/_navigation.rhtml index 5671e29..124a01e 100644 --- a/app/views/repositories/_navigation.rhtml +++ b/app/views/repositories/_navigation.rhtml @@ -16,6 +16,8 @@ <%= select_tag :tag, options_for_select([''] + @repository.tags,@rev), :id => 'tag' %> <% end -%> + <%= hidden_field_tag :rid, params[:rid] %> + | <%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %> <% end -%> diff --git a/app/views/repositories/show.rhtml b/app/views/repositories/show.rhtml index 35106fe..b03712c 100644 --- a/app/views/repositories/show.rhtml +++ b/app/views/repositories/show.rhtml @@ -4,6 +4,12 @@ <%= render :partial => 'navigation' %>
    + +

    <%= render :partial => 'breadcrumbs', :locals => { :path => @path, :kind => 'dir', :revision => @rev } %>

    <% if !@entries.nil? && authorize_for('repositories', 'browse') %> diff --git a/lib/redmine.rb b/lib/redmine.rb index 1a4b581..fb21ccc 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -201,7 +201,7 @@ Redmine::MenuManager.map :project_menu do |menu| :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural menu.push :files, { :controller => 'files', :action => 'index' }, :caption => :label_file_plural, :param => :project_id menu.push :repository, { :controller => 'repositories', :action => 'show' }, - :if => Proc.new { |p| p.repository && !p.repository.new_record? } + :if => Proc.new { |p| p.repository && p.repository[0] && !p.repository[0].new_record? } menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true end -- 1.6.5.1.1367.gcd48