Zmiany w Redmine:
authorŁukasz Rekucki <lrekucki@gmail.com>
Tue, 29 Sep 2009 20:35:35 +0000 (22:35 +0200)
committerŁukasz Rekucki <lrekucki@gmail.com>
Tue, 29 Sep 2009 20:35:35 +0000 (22:35 +0200)
* rozróżnianie po projektach, a nie trackerze;
* skanowanie tylko repozytorium wybranego projektu;
* skanowanie zmian, a nie working directory;

app/controllers/publications_controller.rb
app/views/publications/refresh.erb
app/views/settings/_publications_settings.html.erb
init.rb
lib/issue_publication_hook.rb
lib/redmine_publications/change_patch.rb

index ebf735b..fd623b9 100644 (file)
@@ -13,34 +13,31 @@ class PublicationsController < ApplicationController
   end
 
   def refresh
-    @match_status = []
-
     regexp = Regexp.new(Setting.plugin_redmine_publications[:pattern])
     Publication.delete_all()
-    repos = Repository.all
-    if repos
-      repos.each do |repo|
-        repo_status = []
-        if repo.entries
-          repo.entries.each do |entry|
-            match = entry.path.match(regexp)
-            if match
-              Publication.find_or_create_by_name(:name => match[1],
-                :source_file => entry.path, :repository_id => repo.id)
-              repo_status += [{:path => entry.path, :match => match[1], :matched => true}]
-            else
-              repo_status += [{:path => entry.path, :match =>nil, :matched => false}]
-            end
-          end
-          @match_status += [{:repo => repo, :status => repo_status}]
+
+    repo = Repository.find(:first, :conditions => ['project_id = ?', Setting.plugin_redmine_publications[:project]] )
+
+    Rails.logger.info('[INFO] Importing changes from ' << repo.url)
+    Rails.logger.info('[INFO] Change list: ' << repo.changes.find(:all).inspect )
+
+    @repo_status = []
+    repo.changes.find(:all).each do |change|
+        Rails.logger.info('[INFO] Importing change ' << change.path)
+        match = change.path.match(regexp)
+        if match
+            Publication.find_or_create_by_name(:name => match[1],
+                :source_file => change.path, :repository_id => repo.id)
+              @repo_status += [{:path => change.path, :match => match[1], :matched => true}]
+        else
+              @repo_status += [{:path => change.path, :match => nil, :matched => false}]
         end
-      end
+    end
        
-      respond_to do |format|
+    respond_to do |format|
         format.html
-        format.xml { render :xml => @match_status}
-        format.json { render :json => @match_status }
-      end
+        format.xml { render :xml => @repo_status}
+        format.json { render :json => @repo_status }
     end
   end
 
index 1968a92..311ed33 100644 (file)
@@ -1,9 +1,6 @@
-<% @match_status.each do |repo_status| %>
-<h2>Repozytorium: <%= repo_status[:repo].url %></h2>
 <table>
 <tr><th>Ścieżka zasobu</th><th>Rozpoznano</th><th>ID zasobu</th></tr>
-
-<% repo_status[:status].each do |status| %>
+<% @repo_status.each do |status| %>
 <tr>
 <td><%= status[:path] %></td>
 <td><%= (status[:matched] && 'Tak') || 'Nie' %></td>
@@ -11,4 +8,3 @@
 </tr>
 <% end %>
 </table>
-<% end %>
index 8ab2a7b..255460e 100644 (file)
@@ -1,9 +1,8 @@
-<% @tracker = Tracker.find(@settings[:tracker] || 1) %>
-
+<% @project = Project.find(:first, :conditions => ["id = ?", @settings[:project]]) %>
 <fieldset>
 <p>
-  <label for="settings[tracker]">Typ zagadnienia: </label>
-  <%= collection_select(:tracker, :id, Tracker.all, :id, :name, {}, {:name => "settings[tracker]"}) %>
+  <label for="settings[project]">Użyj w projektcie: </label>
+  <%= collection_select(:project, :id, Project.all, :id, :name, {}, {:name => "settings[project]"}) %>
 </p>
 
 <p>
diff --git a/init.rb b/init.rb
index 4298f60..01afeab 100644 (file)
--- a/init.rb
+++ b/init.rb
@@ -28,7 +28,7 @@ Redmine::Plugin.register :redmine_publications do
   # permission :view_issues_for_publication, :publications => :issues 
 
   settings :partial => 'settings/publications_settings',
-      :default => { :tracker => '1', :pattern => '.*/[a-z_].xml', :editorurl => 'http://localhost/:pubid'}
+      :default => { :project => '0', :pattern => '[^\$].xml', :editorurl => 'http://localhost/:pubid'}
 
   menu :application_menu, :publications, { :controller => 'publications', :action => 'index' }, :caption => 'Publikacje'
 
index 6d2101c..788a72f 100644 (file)
@@ -21,7 +21,7 @@ class IssuesPublicationHook < Redmine::Hook::ViewListener
   end
 
   def is_pticket?(context)
-    context[:issue].tracker_id == Setting.plugin_redmine_publications[:tracker].to_i
+    context[:issue].project_id == Setting.plugin_redmine_publications[:project].to_i
   end
 
   public
index 41ea959..b8e5c4b 100644 (file)
@@ -21,12 +21,14 @@ module RedminePublications
     module InstanceMethods
 
       def update_publication
-        if self.action == 'A'
+        if (self.action == 'A') and (self.changeset.repository.project_id == Setting.plugin_redmine_publications[:project].to_i)
           regexp = Regexp.new(Setting.plugin_redmine_publications[:pattern])
           match = self.path.match(regexp)
-          Rails.logger.info('[INFO] Adding publication: "' << match[1])
-          Publication.find_or_create_by_name(:name => match[1],
-            :source_file => self.path, :repository_id => self.changeset.repository.id )
+          if match
+            Rails.logger.info('[INFO] Adding publication: "' << match[1])
+            Publication.find_or_create_by_name(:name => match[1],
+              :source_file => self.path, :repository_id => self.changeset.repository.id )
+          end
         end      
       end