]> source.dussan.org Git - redmine.git/commitdiff
scm: darcs: fix Darcs adapter recognizes new files as modified files above Darcs...
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Sun, 23 Jan 2011 04:17:26 +0000 (04:17 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Sun, 23 Jan 2011 04:17:26 +0000 (04:17 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4749 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/scm/adapters/darcs_adapter.rb

index 1b78f77a88d0b6ccb8e27309c517db73e5cfb300..69805a360325bf5fb1195486ff41040f07aa012a 100644 (file)
@@ -167,9 +167,38 @@ module Redmine
                        })
                      })        
         end
+
+        def get_paths_for_patch(hash)
+          paths = get_paths_for_patch_raw(hash)
+          if self.class.client_version_above?([2, 4])
+            orig_paths = paths
+            paths = []
+            add_paths = []
+            add_paths_name = []
+            mod_paths = []
+            other_paths = []
+            orig_paths.each do |path|
+              if path[:action] == 'A'
+                add_paths << path
+                add_paths_name << path[:path]
+              elsif path[:action] == 'M'
+                mod_paths << path
+              else
+                other_paths << path
+              end
+            end
+            add_paths_name.each do |add_path|
+              mod_paths.delete_if { |m| m[:path] == add_path }
+            end
+            paths.concat add_paths
+            paths.concat mod_paths
+            paths.concat other_paths
+          end
+          paths
+        end
         
         # Retrieve changed paths for a single patch
-        def get_paths_for_patch(hash)
+        def get_paths_for_patch_raw(hash)
           cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --summary --xml-output"
           cmd << " --match #{shell_quote("hash #{hash}")} "
           paths = []