Actions
Defect #5374
closedrepositories_controller queries SCM adapter even when all changes are cached in db
Status:
Closed
Priority:
Normal
Assignee:
-
Category:
SCM
Target version:
-
Start date:
2010-04-22
Due date:
% Done:
0%
Estimated time:
Resolution:
Invalid
Affected version:
Description
Latest/head version of redmine synced from edavis' Git mirror this morning, running on Windows Vista 64-bit, ruby 1.8.6 (2008-08-11 patchlevel 287), rails 2.3.5, sqlite3.
I have a remote repository which I access using a custom Perforce adapter I wrote for Redmine which is patterned on the Subversion adapter. Access to this repository is slow, and the repo has many changes/files, so local caching is important. However I've found that Redmine goes out to the repo even when auto-fetching is disabled. I put a breakpoint in my adapter's entries method and this is some of the relevant tidbits from the rdebug session:
(rdb:97) l
[74, 83] in D:/redmine/app/controllers/repositories_controller.rb
74 end
75
76 def show
77 @repository.fetch_changesets if Setting.autofetch_changesets? && @path.empty?
78
=> 79 @entries = @repository.entries(@path, @rev)
80 if request.xhr?
81 @entries ? render(:partial => 'dir_list_content') : render(:nothing => true)
82 else
83 (show_error_not_found; return) unless @entries
(rdb:97) p Setting.autofetch_changesets?
false
(rdb:97) bt
#0 Redmine::Scm::Adapters::PerforceAdapter.entries(path#String, identifier#NilClass,...)
at line D:/redmine/lib/redmine/scm/adapters/perforce_adapter.rb:68
#1 Repository.entries(path#String, identifier#NilClass)
at line D:/redmine/app/models/repository.rb:63
#2 Kernel.send(method#Symbol, args#Array)
at line C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_proxy.rb:217
#3 ActiveRecord::Associations::AssociationProxy.method_missing
at line C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_proxy.rb:217
--> #4 RepositoriesController.show
at line D:/redmine/app/controllers/repositories_controller.rb:79
[etc.]
The slightly wonky thing (to me) is that the model (eg app/models/repository/perforce.rb in my case, but again patterned off of the svn adapter which does the same thing) in fetch_changesets does its own caching; it checks latest scm vs db revision and only grabs more if its been updated (and this works properly). But the repositories_controller invokes the scm adapter directly from what I can tell. So my question is, am I missing something obvious in my adapter implementation (doesn't seem likely, I've basically mirrored the svn implementation), or is this a defect in the general relationship between the controller/model/and adapters? I've also attached a snippet from the log file that shows the output in development. Thanks!
Files
Actions