diff -ur redmine-1.1.0/app/controllers/repositories_controller.rb redmine-1.1.0-revision-update/app/controllers/repositories_controller.rb --- redmine-1.1.0/app/controllers/repositories_controller.rb 2011-01-09 17:05:00.000000000 -0700 +++ redmine-1.1.0-revision-update/app/controllers/repositories_controller.rb 2011-03-22 12:01:56.115467800 -0600 @@ -150,6 +150,37 @@ show_error_not_found end + def update #revision + @changeset = @repository.find_changeset_by_name(@rev) + raise ChangesetNotFound unless @changeset + + # update revision properties from repository + revision = @repository.scm.revision(@rev) + @changeset.committer = revision.author + @changeset.committed_on = revision.time + @changeset.comments = revision.message + + # report success or errors + if @changeset.save + flash[:notice] = l(:notice_successful_update) + # on success, rescan new comments for related issue ids + @changeset.scan_comment_for_issue_ids + else + # can't seem to bring in the helper method 'error_messages_for' + # and injecting it into show.rhtml doesn't seem to work, since + # the @changeset loses the errors on redirect (due to changeset reload) + flash[:error] = "" + end + + respond_to do |format| + format.html { redirect_to :action => 'revision', :id => @project, :rev => @rev } + format.api { render_validation_errors(@changeset) } + end + + rescue ChangesetNotFound + show_error_not_found + end + def diff if params[:format] == 'diff' @diff = @repository.diff(@path, @rev, @rev_to) diff -ur redmine-1.1.0/app/models/changeset.rb redmine-1.1.0-revision-update/app/models/changeset.rb --- redmine-1.1.0/app/models/changeset.rb 2011-01-09 17:05:00.000000000 -0700 +++ redmine-1.1.0-revision-update/app/models/changeset.rb 2011-03-22 12:03:22.319144500 -0600 @@ -125,8 +125,11 @@ issue, hours = find_referenced_issue_by_id(m[0].to_i), m[2] if issue referenced_issues << issue - fix_issue(issue) if fix_keywords.include?(action.to_s.downcase) - log_time(issue, hours) if hours && Setting.commit_logtime_enabled? + # don't update the issue if a relation already exists + if !self.issues.include?(issue) + fix_issue(issue) if fix_keywords.include?(action.to_s.downcase) + log_time(issue, hours) if hours && Setting.commit_logtime_enabled? + end end end end diff -ur redmine-1.1.0/app/views/repositories/revision.rhtml redmine-1.1.0-revision-update/app/views/repositories/revision.rhtml --- redmine-1.1.0/app/views/repositories/revision.rhtml 2011-01-09 17:05:00.000000000 -0700 +++ redmine-1.1.0-revision-update/app/views/repositories/revision.rhtml 2011-03-22 12:01:56.146718000 -0600 @@ -19,7 +19,10 @@ <% end %> -

<%= l(:label_revision) %> <%= format_revision(@changeset) %>

+

+ <%= l(:label_revision) %> <%= format_revision(@changeset) %> + <%= link_to(image_tag('reload.png'), {:controller => 'repositories', :action => 'update', :id => @project, :rev => @rev}, :method => :get, :title => l(:button_update)) %> +

<% if @changeset.scmid %>ID: <%= @changeset.scmid %>
<% end %> <%= authoring(@changeset.committed_on, @changeset.author) %>

@@ -45,7 +48,7 @@
  • <%= l(:label_deleted) %>
  • -

    <%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @changeset.identifier) if @changeset.changes.any? %>

    +

    <%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @rev) if @changeset.changes.any? %>

    <%= render_changeset_changes %> diff -ur redmine-1.1.0/lib/redmine/scm/adapters/abstract_adapter.rb redmine-1.1.0-revision-update/lib/redmine/scm/adapters/abstract_adapter.rb --- redmine-1.1.0/lib/redmine/scm/adapters/abstract_adapter.rb 2011-01-09 17:05:00.000000000 -0700 +++ redmine-1.1.0-revision-update/lib/redmine/scm/adapters/abstract_adapter.rb 2011-03-22 12:01:56.146718000 -0600 @@ -117,6 +117,12 @@ return nil end + def revision(identifier) + revisions = revisions(nil, identifier, identifier, {}) + return nil unless revisions + return revisions.first + end + def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}) return nil end diff -ur redmine-1.1.0/lib/redmine.rb redmine-1.1.0-revision-update/lib/redmine.rb --- redmine-1.1.0/lib/redmine.rb 2011-02-11 17:24:46.508692400 -0700 +++ redmine-1.1.0-revision-update/lib/redmine.rb 2011-03-22 12:01:56.162343100 -0600 @@ -120,7 +120,7 @@ end map.project_module :repository do |map| - map.permission :manage_repository, {:repositories => [:edit, :committers, :destroy]}, :require => :member + map.permission :manage_repository, {:repositories => [:edit, :committers, :destroy, :update]}, :require => :member map.permission :browse_repository, :repositories => [:show, :browse, :entry, :annotate, :changes, :diff, :stats, :graph] map.permission :view_changesets, :repositories => [:show, :revisions, :revision] map.permission :commit_access, {}