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] = "
" + @changeset.errors.full_messages.map {|msg| "- " + ERB::Util.html_escape(msg) + "
"}.join + "
"
+ 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, {}