Revision 442:753f1380d6bc vendor/plugins/engines

View differences:

vendor/plugins/engines/.svn/all-wcprops
1
K 25
2
svn:wc:ra_dav:version-url
3
V 61
4
/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/engines
5
END
vendor/plugins/engines/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
9 9

  
10
2010-11-14T16:24:21.989522Z
11
4406
10
2011-03-24T18:46:12.279245Z
11
5216
12 12
jplang
13 13

  
14 14

  
......
35 35

  
36 36

  
37 37

  
38
2011-03-03T11:05:12.000000Z
38
2011-06-06T13:15:00.000000Z
39 39
b8328004b1bb94c84d90c0839cd7d41d
40 40
2009-09-13T17:14:35.707881Z
41 41
2887
......
63 63

  
64 64
8492
65 65

66
tasks
67
dir
68

69 66
.gitignore
70 67
file
71 68

  
72 69

  
73 70

  
74 71

  
75
2011-03-03T11:05:12.000000Z
72
2011-06-06T13:15:00.000000Z
76 73
a523ea1465a566ae38fba96a99506ff3
77 74
2008-07-12T10:17:14.809831Z
78 75
1654
......
106 103

  
107 104

  
108 105

  
109
2011-03-03T11:05:12.000000Z
106
2011-06-06T13:15:00.000000Z
110 107
f653a768811758cee11e21d4de00b381
111 108
2009-10-07T16:43:50.656336Z
112 109
2904
......
140 137

  
141 138

  
142 139

  
143
2011-03-03T11:05:12.000000Z
140
2011-06-06T13:15:00.000000Z
144 141
e4f81ba26f0b10a838b3336ba263aaa5
145 142
2009-09-13T17:14:35.707881Z
146 143
2887
......
177 174

  
178 175

  
179 176

  
180
2011-03-03T11:05:12.000000Z
177
2011-06-06T13:15:00.000000Z
181 178
41bb5eeb2864cd46438eefb1cb048c4d
182 179
2009-02-21T11:04:50.579477Z
183 180
2493
......
214 211

  
215 212

  
216 213

  
217
2011-03-03T11:05:12.000000Z
214
2011-06-06T13:15:00.000000Z
218 215
6e112fd6d07885bef3fd5bd537fc1409
219 216
2008-07-12T10:17:14.809831Z
220 217
1654
......
248 245

  
249 246

  
250 247

  
251
2011-03-03T11:05:12.000000Z
248
2011-06-06T13:15:00.000000Z
252 249
18cc761cb69b7735ecf0cdb0d9b6d640
253 250
2009-09-13T17:14:35.707881Z
254 251
2887
......
282 279

  
283 280

  
284 281

  
285
2011-03-03T11:05:12.000000Z
282
2011-06-06T13:15:00.000000Z
286 283
7e25f2cbded59c24735a20510040bb74
287 284
2008-07-12T10:17:14.809831Z
288 285
1654
vendor/plugins/engines/generators/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
vendor/plugins/engines/generators/plugin_migration/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators/plugin_migration
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
3f4805cb1e4a8b8a3ed180f22d81c285
37 37
2010-11-14T16:24:21.989522Z
38 38
4406
......
66 66

  
67 67

  
68 68

  
69
2011-03-03T11:05:12.000000Z
69
2011-06-06T13:15:00.000000Z
70 70
d796f61555b36ef9941ea049c94df06b
71 71
2008-07-12T10:17:14.809831Z
72 72
1654
vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration/templates
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/generators/plugin_migration/templates
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
0b30f95c4244242093ded274caf9e4a8
37 37
2008-07-12T10:17:14.809831Z
38 38
1654
vendor/plugins/engines/lib/.svn/all-wcprops
1
K 25
2
svn:wc:ra_dav:version-url
3
V 65
4
/svn/!svn/ver/5878/branches/1.2-stable/vendor/plugins/engines/lib
5
END
vendor/plugins/engines/lib/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
9 9

  
10
2010-09-17T04:06:40.671348Z
11
4094
12
edavis10
10
2011-03-24T18:46:12.279245Z
11
5216
12
jplang
13 13

  
14 14

  
15 15

  
......
26 26

  
27 27
e93f8b46-1217-0410-a6f0-8f06a7374b81
28 28

29
tasks
30
dir
31

29 32
engines
30 33
dir
31 34

......
35 38

  
36 39

  
37 40

  
38
2011-03-03T11:05:12.000000Z
41
2011-06-06T13:15:00.000000Z
39 42
b9128ad79c06e8c2eb2474a7f9edf60d
40 43
2009-09-13T17:14:35.707881Z
41 44
2887
vendor/plugins/engines/lib/engines/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
f5e61f1312a19bdac20f06b7529eaa98
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
......
66 66

  
67 67

  
68 68

  
69
2011-03-03T11:05:12.000000Z
69
2011-06-06T13:15:00.000000Z
70 70
d084e8ccb3edfb9f481f2626ee9e57e1
71 71
2009-09-13T17:14:35.707881Z
72 72
2887
......
100 100

  
101 101

  
102 102

  
103
2011-03-03T11:05:12.000000Z
103
2011-06-06T13:15:00.000000Z
104 104
a2cb2f3c517fbe62ab1277e44b0a05ed
105 105
2009-02-21T11:04:50.579477Z
106 106
2493
vendor/plugins/engines/lib/engines/plugin/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/plugin
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines/plugin
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
2adca63e7c7d7c38a91953458e893bb2
37 37
2008-07-12T10:17:14.809831Z
38 38
1654
......
66 66

  
67 67

  
68 68

  
69
2011-03-03T11:05:12.000000Z
69
2011-06-06T13:15:00.000000Z
70 70
21ac938bcf4f86e62ec21e9803cfd76e
71 71
2009-02-21T11:04:50.579477Z
72 72
2493
......
100 100

  
101 101

  
102 102

  
103
2011-03-03T11:05:12.000000Z
103
2011-06-06T13:15:00.000000Z
104 104
38eaf6e3b113f74daa0669c67261cc72
105 105
2009-09-13T17:14:35.707881Z
106 106
2887
......
134 134

  
135 135

  
136 136

  
137
2011-03-03T11:05:12.000000Z
137
2011-06-06T13:15:00.000000Z
138 138
d68941171066743dd63a174b5f270f66
139 139
2008-07-12T10:17:14.809831Z
140 140
1654
vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/rails_extensions
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/lib/engines/rails_extensions
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
3e26c9fe2cd009cb5e81f6ccea3f012c
37 37
2009-02-21T11:04:50.579477Z
38 38
2493
......
66 66

  
67 67

  
68 68

  
69
2011-03-03T11:05:12.000000Z
69
2011-06-06T13:15:00.000000Z
70 70
c5a5e8b469c1e3fefcc5bedca9f4ac82
71 71
2010-09-17T04:06:40.671348Z
72 72
4094
......
100 100

  
101 101

  
102 102

  
103
2011-03-03T11:05:12.000000Z
103
2011-06-06T13:15:00.000000Z
104 104
6e29697f02c187c9033624422365044a
105 105
2009-02-21T11:04:50.579477Z
106 106
2493
......
134 134

  
135 135

  
136 136

  
137
2011-03-03T11:05:12.000000Z
137
2011-06-06T13:15:00.000000Z
138 138
f26da6a18ffcc7b846838f038a0abea4
139 139
2008-07-12T10:17:14.809831Z
140 140
1654
......
168 168

  
169 169

  
170 170

  
171
2011-03-03T11:05:12.000000Z
171
2011-06-06T13:15:00.000000Z
172 172
8f8e408b9f1a72af1cc5232ddb888266
173 173
2009-02-21T11:04:50.579477Z
174 174
2493
vendor/plugins/engines/lib/tasks/engines.rake
1
# This code lets us redefine existing Rake tasks, which is extremely
2
# handy for modifying existing Rails rake tasks.
3
# Credit for the original snippet of code goes to Jeremy Kemper
4
# http://pastie.caboo.se/9620
5
unless Rake::TaskManager.methods.include?('redefine_task')
6
  module Rake
7
    module TaskManager
8
      def redefine_task(task_class, args, &block)
9
        task_name, arg_names, deps = resolve_args([args])
10
        task_name = task_class.scope_name(@scope, task_name)
11
        deps = [deps] unless deps.respond_to?(:to_ary)
12
        deps = deps.collect {|d| d.to_s }
13
        task = @tasks[task_name.to_s] = task_class.new(task_name, self)
14
        task.application = self
15
        task.add_description(@last_description)
16
        @last_description = nil
17
        task.enhance(deps, &block)
18
        task
19
      end
20
      
21
    end
22
    class Task
23
      class << self
24
        def redefine_task(args, &block)
25
          Rake.application.redefine_task(self, [args], &block)
26
        end
27
      end
28
    end
29
  end
30
end
31

  
32
namespace :db do
33
  namespace :migrate do
34
    desc 'Migrate database and plugins to current status.'
35
    task :all => [ 'db:migrate', 'db:migrate:plugins' ]
36
    
37
    desc 'Migrate plugins to current status.'
38
    task :plugins => :environment do
39
      Engines.plugins.each do |plugin|
40
        next unless plugin.respond_to?(:migration_directory)
41
        next unless File.exists? plugin.migration_directory
42
        puts "Migrating plugin #{plugin.name} ..."
43
        plugin.migrate
44
      end
45
    end
46

  
47
    desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table'
48
    task :upgrade_plugin_migrations => :environment do
49
      svens_fork_table_name = 'plugin_schema_migrations'
50
      
51
      # Check if app was previously using Sven's fork
52
      if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name)
53
        old_sm_table = svens_fork_table_name
54
      else
55
        old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table)
56
      end
57
      
58
      unless ActiveRecord::Base.connection.table_exists?(old_sm_table)
59
        abort "Cannot find old migration table - assuming nothing needs to be done"
60
      end
61
      
62
      # There are two forms of the engines schema info - pre-fix_plugin_migrations and post
63
      # We need to figure this out before we continue.
64
      
65
      results = ActiveRecord::Base.connection.select_rows(
66
        "SELECT version, plugin_name FROM #{old_sm_table}"
67
      ).uniq
68
      
69
      def insert_new_version(plugin_name, version)
70
        version_string = "#{version}-#{plugin_name}"
71
        new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name
72
        
73
        # Check if the row already exists for some reason - maybe run this task more than once.
74
        return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0
75
        
76
        puts "Inserting new version #{version} for plugin #{plugin_name}.."
77
        ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})")
78
      end
79
      
80
      # We need to figure out if they already used "fix_plugin_migrations"
81
      versions = {}
82
      results.each do |r|
83
        versions[r[1]] ||= []
84
        versions[r[1]] << r[0].to_i
85
      end
86
      
87
      if versions.values.find{ |v| v.size > 1 } == nil
88
        puts "Fixing migration info"
89
        # We only have one listed migration per plugin - this is pre-fix_plugin_migrations,
90
        # so we build all versions required. In this case, all migrations should 
91
        versions.each do |plugin_name, version|
92
          version = version[0] # There is only one version
93
          
94
          # We have to make an assumption that numeric migrations won't get this long..
95
          # I'm not sure if there is a better assumption, it should work in all
96
          # current cases.. (touch wood..)
97
          if version.to_s.size < "YYYYMMDDHHMMSS".size
98
            # Insert version records for each migration
99
            (1..version).each do |v|
100
             insert_new_version(plugin_name, v)
101
            end
102
          else
103
            # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... 
104
            # The case in which this occurs is very rare..
105
            insert_new_version(plugin_name, version)
106
          end
107
        end
108
      else
109
        puts "Moving migration info"
110
        # We have multiple migrations listed per plugin - thus we can assume they have
111
        # already applied fix_plugin_migrations - we just copy it across verbatim
112
        versions.each do |plugin_name, version|
113
          version.each { |v| insert_new_version(plugin_name, v) }
114
        end
115
      end
116
      
117
      puts "Migration info successfully migrated - removing old schema info table"
118
      ActiveRecord::Base.connection.drop_table(old_sm_table)
119
    end
120
    
121
    desc 'Migrate a specified plugin.'
122
    task(:plugin => :environment) do
123
      name = ENV['NAME']
124
      if plugin = Engines.plugins[name]
125
        version = ENV['VERSION']
126
        puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..."
127
        plugin.migrate(version ? version.to_i : nil)
128
      else
129
        puts "Plugin #{name} does not exist."
130
      end
131
    end
132
  end
133
end
134

  
135

  
136
namespace :db do  
137
  namespace :fixtures do
138
    namespace :plugins do
139
      
140
      desc "Load plugin fixtures into the current environment's database."
141
      task :load => :environment do
142
        require 'active_record/fixtures'
143
        ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
144
        Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', 
145
                 'test', 'fixtures', '*.yml')).each do |fixture_file|
146
          Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
147
        end
148
      end
149
      
150
    end
151
  end
152
end
153

  
154
# this is just a modification of the original task in railties/lib/tasks/documentation.rake, 
155
# because the default task doesn't support subdirectories like <plugin>/app or
156
# <plugin>/component. These tasks now include every file under a plugin's load paths (see
157
# Plugin#load_paths).
158
namespace :doc do
159

  
160
  plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
161

  
162
  namespace :plugins do
163

  
164
    # Define doc tasks for each plugin
165
    plugins.each do |plugin|
166
      desc "Create plugin documentation for '#{plugin}'"
167
      Rake::Task.redefine_task(plugin => :environment) do
168
        plugin_base   = RAILS_ROOT + "/vendor/plugins/#{plugin}"
169
        options       = []
170
        files         = Rake::FileList.new
171
        options << "-o doc/plugins/#{plugin}"
172
        options << "--title '#{plugin.titlecase} Plugin Documentation'"
173
        options << '--line-numbers' << '--inline-source'
174
        options << '-T html'
175

  
176
        # Include every file in the plugin's load_paths (see Plugin#load_paths)
177
        if Engines.plugins[plugin]
178
          files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb")
179
        end
180
        if File.exists?("#{plugin_base}/README")
181
          files.include("#{plugin_base}/README")    
182
          options << "--main '#{plugin_base}/README'"
183
        end
184
        files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG")
185

  
186
        if files.empty?
187
          puts "No source files found in #{plugin_base}. No documentation will be generated."
188
        else
189
          options << files.to_s
190
          sh %(rdoc #{options * ' '})
191
        end
192
      end
193
    end
194
  end
195
end
196

  
197

  
198

  
199
namespace :test do
200
  task :warn_about_multiple_plugin_testing_with_engines do
201
    puts %{-~============== A Moste Polite Warninge ===========================~-
202

  
203
You may experience issues testing multiple plugins at once when using
204
the code-mixing features that the engines plugin provides. If you do
205
experience any problems, please test plugins individually, i.e.
206

  
207
  $ rake test:plugins PLUGIN=my_plugin
208

  
209
or use the per-type plugin test tasks:
210

  
211
  $ rake test:plugins:units
212
  $ rake test:plugins:functionals
213
  $ rake test:plugins:integration
214
  $ rake test:plugins:all
215

  
216
Report any issues on http://dev.rails-engines.org. Thanks!
217

  
218
-~===============( ... as you were ... )============================~-}
219
  end
220
  
221
  namespace :engines do
222
    
223
    def engine_plugins
224
      Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",")
225
    end
226
    
227
    desc "Run tests from within engines plugins (plugins with an 'app' directory)"
228
    task :all => [:units, :functionals, :integration]
229
    
230
    desc "Run unit tests from within engines plugins (plugins with an 'app' directory)"
231
    Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t|
232
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb"
233
      t.verbose = true
234
    end
235

  
236
    desc "Run functional tests from within engines plugins (plugins with an 'app' directory)"
237
    Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t|
238
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb"
239
      t.verbose = true
240
    end
241

  
242
    desc "Run integration tests from within engines plugins (plugins with an 'app' directory)"
243
    Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t|
244
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb"
245
      t.verbose = true
246
    end
247
  end
248
  
249
  namespace :plugins do
250

  
251
    desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
252
    task :all => [:warn_about_multiple_plugin_testing_with_engines, 
253
                  :units, :functionals, :integration]
254
    
255
    desc "Run all plugin unit tests"
256
    Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t|
257
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb"
258
      t.verbose = true
259
    end
260
    
261
    desc "Run all plugin functional tests"
262
    Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t|
263
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb"
264
      t.verbose = true
265
    end
266
    
267
    desc "Integration test engines"
268
    Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t|
269
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb"
270
      t.verbose = true
271
    end
272

  
273
    desc "Mirrors plugin fixtures into a single location to help plugin tests"
274
    task :setup_plugin_fixtures => :environment do
275
      Engines::Testing.setup_plugin_fixtures
276
    end
277
    
278
    # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite
279
    Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures"
280
  end
281
end
vendor/plugins/engines/tasks/.svn/text-base/engines.rake.svn-base
1
# This code lets us redefine existing Rake tasks, which is extremely
2
# handy for modifying existing Rails rake tasks.
3
# Credit for the original snippet of code goes to Jeremy Kemper
4
# http://pastie.caboo.se/9620
5
unless Rake::TaskManager.methods.include?('redefine_task')
6
  module Rake
7
    module TaskManager
8
      def redefine_task(task_class, args, &block)
9
        task_name, arg_names, deps = resolve_args([args])
10
        task_name = task_class.scope_name(@scope, task_name)
11
        deps = [deps] unless deps.respond_to?(:to_ary)
12
        deps = deps.collect {|d| d.to_s }
13
        task = @tasks[task_name.to_s] = task_class.new(task_name, self)
14
        task.application = self
15
        task.add_description(@last_description)
16
        @last_description = nil
17
        task.enhance(deps, &block)
18
        task
19
      end
20
      
21
    end
22
    class Task
23
      class << self
24
        def redefine_task(args, &block)
25
          Rake.application.redefine_task(self, [args], &block)
26
        end
27
      end
28
    end
29
  end
30
end
31

  
32
namespace :db do
33
  namespace :migrate do
34
    desc 'Migrate database and plugins to current status.'
35
    task :all => [ 'db:migrate', 'db:migrate:plugins' ]
36
    
37
    desc 'Migrate plugins to current status.'
38
    task :plugins => :environment do
39
      Engines.plugins.each do |plugin|
40
        next unless plugin.respond_to?(:migration_directory)
41
        next unless File.exists? plugin.migration_directory
42
        puts "Migrating plugin #{plugin.name} ..."
43
        plugin.migrate
44
      end
45
    end
46

  
47
    desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table'
48
    task :upgrade_plugin_migrations => :environment do
49
      svens_fork_table_name = 'plugin_schema_migrations'
50
      
51
      # Check if app was previously using Sven's fork
52
      if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name)
53
        old_sm_table = svens_fork_table_name
54
      else
55
        old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table)
56
      end
57
      
58
      unless ActiveRecord::Base.connection.table_exists?(old_sm_table)
59
        abort "Cannot find old migration table - assuming nothing needs to be done"
60
      end
61
      
62
      # There are two forms of the engines schema info - pre-fix_plugin_migrations and post
63
      # We need to figure this out before we continue.
64
      
65
      results = ActiveRecord::Base.connection.select_rows(
66
        "SELECT version, plugin_name FROM #{old_sm_table}"
67
      ).uniq
68
      
69
      def insert_new_version(plugin_name, version)
70
        version_string = "#{version}-#{plugin_name}"
71
        new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name
72
        
73
        # Check if the row already exists for some reason - maybe run this task more than once.
74
        return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0
75
        
76
        puts "Inserting new version #{version} for plugin #{plugin_name}.."
77
        ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})")
78
      end
79
      
80
      # We need to figure out if they already used "fix_plugin_migrations"
81
      versions = {}
82
      results.each do |r|
83
        versions[r[1]] ||= []
84
        versions[r[1]] << r[0].to_i
85
      end
86
      
87
      if versions.values.find{ |v| v.size > 1 } == nil
88
        puts "Fixing migration info"
89
        # We only have one listed migration per plugin - this is pre-fix_plugin_migrations,
90
        # so we build all versions required. In this case, all migrations should 
91
        versions.each do |plugin_name, version|
92
          version = version[0] # There is only one version
93
          
94
          # We have to make an assumption that numeric migrations won't get this long..
95
          # I'm not sure if there is a better assumption, it should work in all
96
          # current cases.. (touch wood..)
97
          if version.to_s.size < "YYYYMMDDHHMMSS".size
98
            # Insert version records for each migration
99
            (1..version).each do |v|
100
             insert_new_version(plugin_name, v)
101
            end
102
          else
103
            # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... 
104
            # The case in which this occurs is very rare..
105
            insert_new_version(plugin_name, version)
106
          end
107
        end
108
      else
109
        puts "Moving migration info"
110
        # We have multiple migrations listed per plugin - thus we can assume they have
111
        # already applied fix_plugin_migrations - we just copy it across verbatim
112
        versions.each do |plugin_name, version|
113
          version.each { |v| insert_new_version(plugin_name, v) }
114
        end
115
      end
116
      
117
      puts "Migration info successfully migrated - removing old schema info table"
118
      ActiveRecord::Base.connection.drop_table(old_sm_table)
119
    end
120
    
121
    desc 'Migrate a specified plugin.'
122
    task(:plugin => :environment) do
123
      name = ENV['NAME']
124
      if plugin = Engines.plugins[name]
125
        version = ENV['VERSION']
126
        puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..."
127
        plugin.migrate(version ? version.to_i : nil)
128
      else
129
        puts "Plugin #{name} does not exist."
130
      end
131
    end
132
  end
133
end
134

  
135

  
136
namespace :db do  
137
  namespace :fixtures do
138
    namespace :plugins do
139
      
140
      desc "Load plugin fixtures into the current environment's database."
141
      task :load => :environment do
142
        require 'active_record/fixtures'
143
        ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
144
        Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', 
145
                 'test', 'fixtures', '*.yml')).each do |fixture_file|
146
          Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
147
        end
148
      end
149
      
150
    end
151
  end
152
end
153

  
154
# this is just a modification of the original task in railties/lib/tasks/documentation.rake, 
155
# because the default task doesn't support subdirectories like <plugin>/app or
156
# <plugin>/component. These tasks now include every file under a plugin's load paths (see
157
# Plugin#load_paths).
158
namespace :doc do
159

  
160
  plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
161

  
162
  namespace :plugins do
163

  
164
    # Define doc tasks for each plugin
165
    plugins.each do |plugin|
166
      desc "Create plugin documentation for '#{plugin}'"
167
      Rake::Task.redefine_task(plugin => :environment) do
168
        plugin_base   = RAILS_ROOT + "/vendor/plugins/#{plugin}"
169
        options       = []
170
        files         = Rake::FileList.new
171
        options << "-o doc/plugins/#{plugin}"
172
        options << "--title '#{plugin.titlecase} Plugin Documentation'"
173
        options << '--line-numbers' << '--inline-source'
174
        options << '-T html'
175

  
176
        # Include every file in the plugin's load_paths (see Plugin#load_paths)
177
        if Engines.plugins[plugin]
178
          files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb")
179
        end
180
        if File.exists?("#{plugin_base}/README")
181
          files.include("#{plugin_base}/README")    
182
          options << "--main '#{plugin_base}/README'"
183
        end
184
        files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG")
185

  
186
        if files.empty?
187
          puts "No source files found in #{plugin_base}. No documentation will be generated."
188
        else
189
          options << files.to_s
190
          sh %(rdoc #{options * ' '})
191
        end
192
      end
193
    end
194
  end
195
end
196

  
197

  
198

  
199
namespace :test do
200
  task :warn_about_multiple_plugin_testing_with_engines do
201
    puts %{-~============== A Moste Polite Warninge ===========================~-
202

  
203
You may experience issues testing multiple plugins at once when using
204
the code-mixing features that the engines plugin provides. If you do
205
experience any problems, please test plugins individually, i.e.
206

  
207
  $ rake test:plugins PLUGIN=my_plugin
208

  
209
or use the per-type plugin test tasks:
210

  
211
  $ rake test:plugins:units
212
  $ rake test:plugins:functionals
213
  $ rake test:plugins:integration
214
  $ rake test:plugins:all
215

  
216
Report any issues on http://dev.rails-engines.org. Thanks!
217

  
218
-~===============( ... as you were ... )============================~-}
219
  end
220
  
221
  namespace :engines do
222
    
223
    def engine_plugins
224
      Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",")
225
    end
226
    
227
    desc "Run tests from within engines plugins (plugins with an 'app' directory)"
228
    task :all => [:units, :functionals, :integration]
229
    
230
    desc "Run unit tests from within engines plugins (plugins with an 'app' directory)"
231
    Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t|
232
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb"
233
      t.verbose = true
234
    end
235

  
236
    desc "Run functional tests from within engines plugins (plugins with an 'app' directory)"
237
    Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t|
238
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb"
239
      t.verbose = true
240
    end
241

  
242
    desc "Run integration tests from within engines plugins (plugins with an 'app' directory)"
243
    Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t|
244
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb"
245
      t.verbose = true
246
    end
247
  end
248
  
249
  namespace :plugins do
250

  
251
    desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
252
    task :all => [:warn_about_multiple_plugin_testing_with_engines, 
253
                  :units, :functionals, :integration]
254
    
255
    desc "Run all plugin unit tests"
256
    Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t|
257
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb"
258
      t.verbose = true
259
    end
260
    
261
    desc "Run all plugin functional tests"
262
    Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t|
263
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb"
264
      t.verbose = true
265
    end
266
    
267
    desc "Integration test engines"
268
    Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t|
269
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb"
270
      t.verbose = true
271
    end
272

  
273
    desc "Mirrors plugin fixtures into a single location to help plugin tests"
274
    task :setup_plugin_fixtures => :environment do
275
      Engines::Testing.setup_plugin_fixtures
276
    end
277
    
278
    # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite
279
    Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures"
280
  end
281
end
vendor/plugins/engines/tasks/engines.rake
1
# This code lets us redefine existing Rake tasks, which is extremely
2
# handy for modifying existing Rails rake tasks.
3
# Credit for the original snippet of code goes to Jeremy Kemper
4
# http://pastie.caboo.se/9620
5
unless Rake::TaskManager.methods.include?('redefine_task')
6
  module Rake
7
    module TaskManager
8
      def redefine_task(task_class, args, &block)
9
        task_name, arg_names, deps = resolve_args([args])
10
        task_name = task_class.scope_name(@scope, task_name)
11
        deps = [deps] unless deps.respond_to?(:to_ary)
12
        deps = deps.collect {|d| d.to_s }
13
        task = @tasks[task_name.to_s] = task_class.new(task_name, self)
14
        task.application = self
15
        task.add_description(@last_description)
16
        @last_description = nil
17
        task.enhance(deps, &block)
18
        task
19
      end
20
      
21
    end
22
    class Task
23
      class << self
24
        def redefine_task(args, &block)
25
          Rake.application.redefine_task(self, [args], &block)
26
        end
27
      end
28
    end
29
  end
30
end
31

  
32
namespace :db do
33
  namespace :migrate do
34
    desc 'Migrate database and plugins to current status.'
35
    task :all => [ 'db:migrate', 'db:migrate:plugins' ]
36
    
37
    desc 'Migrate plugins to current status.'
38
    task :plugins => :environment do
39
      Engines.plugins.each do |plugin|
40
        next unless plugin.respond_to?(:migration_directory)
41
        next unless File.exists? plugin.migration_directory
42
        puts "Migrating plugin #{plugin.name} ..."
43
        plugin.migrate
44
      end
45
    end
46

  
47
    desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table'
48
    task :upgrade_plugin_migrations => :environment do
49
      svens_fork_table_name = 'plugin_schema_migrations'
50
      
51
      # Check if app was previously using Sven's fork
52
      if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name)
53
        old_sm_table = svens_fork_table_name
54
      else
55
        old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table)
56
      end
57
      
58
      unless ActiveRecord::Base.connection.table_exists?(old_sm_table)
59
        abort "Cannot find old migration table - assuming nothing needs to be done"
60
      end
61
      
62
      # There are two forms of the engines schema info - pre-fix_plugin_migrations and post
63
      # We need to figure this out before we continue.
64
      
65
      results = ActiveRecord::Base.connection.select_rows(
66
        "SELECT version, plugin_name FROM #{old_sm_table}"
67
      ).uniq
68
      
69
      def insert_new_version(plugin_name, version)
70
        version_string = "#{version}-#{plugin_name}"
71
        new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name
72
        
73
        # Check if the row already exists for some reason - maybe run this task more than once.
74
        return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0
75
        
76
        puts "Inserting new version #{version} for plugin #{plugin_name}.."
77
        ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})")
78
      end
79
      
80
      # We need to figure out if they already used "fix_plugin_migrations"
81
      versions = {}
82
      results.each do |r|
83
        versions[r[1]] ||= []
84
        versions[r[1]] << r[0].to_i
85
      end
86
      
87
      if versions.values.find{ |v| v.size > 1 } == nil
88
        puts "Fixing migration info"
89
        # We only have one listed migration per plugin - this is pre-fix_plugin_migrations,
90
        # so we build all versions required. In this case, all migrations should 
91
        versions.each do |plugin_name, version|
92
          version = version[0] # There is only one version
93
          
94
          # We have to make an assumption that numeric migrations won't get this long..
95
          # I'm not sure if there is a better assumption, it should work in all
96
          # current cases.. (touch wood..)
97
          if version.to_s.size < "YYYYMMDDHHMMSS".size
98
            # Insert version records for each migration
99
            (1..version).each do |v|
100
             insert_new_version(plugin_name, v)
101
            end
102
          else
103
            # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... 
104
            # The case in which this occurs is very rare..
105
            insert_new_version(plugin_name, version)
106
          end
107
        end
108
      else
109
        puts "Moving migration info"
110
        # We have multiple migrations listed per plugin - thus we can assume they have
111
        # already applied fix_plugin_migrations - we just copy it across verbatim
112
        versions.each do |plugin_name, version|
113
          version.each { |v| insert_new_version(plugin_name, v) }
114
        end
115
      end
116
      
117
      puts "Migration info successfully migrated - removing old schema info table"
118
      ActiveRecord::Base.connection.drop_table(old_sm_table)
119
    end
120
    
121
    desc 'Migrate a specified plugin.'
122
    task(:plugin => :environment) do
123
      name = ENV['NAME']
124
      if plugin = Engines.plugins[name]
125
        version = ENV['VERSION']
126
        puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..."
127
        plugin.migrate(version ? version.to_i : nil)
128
      else
129
        puts "Plugin #{name} does not exist."
130
      end
131
    end
132
  end
133
end
134

  
135

  
136
namespace :db do  
137
  namespace :fixtures do
138
    namespace :plugins do
139
      
140
      desc "Load plugin fixtures into the current environment's database."
141
      task :load => :environment do
142
        require 'active_record/fixtures'
143
        ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
144
        Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', 
145
                 'test', 'fixtures', '*.yml')).each do |fixture_file|
146
          Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
147
        end
148
      end
149
      
150
    end
151
  end
152
end
153

  
154
# this is just a modification of the original task in railties/lib/tasks/documentation.rake, 
155
# because the default task doesn't support subdirectories like <plugin>/app or
156
# <plugin>/component. These tasks now include every file under a plugin's load paths (see
157
# Plugin#load_paths).
158
namespace :doc do
159

  
160
  plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
161

  
162
  namespace :plugins do
163

  
164
    # Define doc tasks for each plugin
165
    plugins.each do |plugin|
166
      desc "Create plugin documentation for '#{plugin}'"
167
      Rake::Task.redefine_task(plugin => :environment) do
168
        plugin_base   = RAILS_ROOT + "/vendor/plugins/#{plugin}"
169
        options       = []
170
        files         = Rake::FileList.new
171
        options << "-o doc/plugins/#{plugin}"
172
        options << "--title '#{plugin.titlecase} Plugin Documentation'"
173
        options << '--line-numbers' << '--inline-source'
174
        options << '-T html'
175

  
176
        # Include every file in the plugin's load_paths (see Plugin#load_paths)
177
        if Engines.plugins[plugin]
178
          files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb")
179
        end
180
        if File.exists?("#{plugin_base}/README")
181
          files.include("#{plugin_base}/README")    
182
          options << "--main '#{plugin_base}/README'"
183
        end
184
        files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG")
185

  
186
        if files.empty?
187
          puts "No source files found in #{plugin_base}. No documentation will be generated."
188
        else
189
          options << files.to_s
190
          sh %(rdoc #{options * ' '})
191
        end
192
      end
193
    end
194
  end
195
end
196

  
197

  
198

  
199
namespace :test do
200
  task :warn_about_multiple_plugin_testing_with_engines do
201
    puts %{-~============== A Moste Polite Warninge ===========================~-
202

  
203
You may experience issues testing multiple plugins at once when using
204
the code-mixing features that the engines plugin provides. If you do
205
experience any problems, please test plugins individually, i.e.
206

  
207
  $ rake test:plugins PLUGIN=my_plugin
208

  
209
or use the per-type plugin test tasks:
210

  
211
  $ rake test:plugins:units
212
  $ rake test:plugins:functionals
213
  $ rake test:plugins:integration
214
  $ rake test:plugins:all
215

  
216
Report any issues on http://dev.rails-engines.org. Thanks!
217

  
218
-~===============( ... as you were ... )============================~-}
219
  end
220
  
221
  namespace :engines do
222
    
223
    def engine_plugins
224
      Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",")
225
    end
226
    
227
    desc "Run tests from within engines plugins (plugins with an 'app' directory)"
228
    task :all => [:units, :functionals, :integration]
229
    
230
    desc "Run unit tests from within engines plugins (plugins with an 'app' directory)"
231
    Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t|
232
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb"
233
      t.verbose = true
234
    end
235

  
236
    desc "Run functional tests from within engines plugins (plugins with an 'app' directory)"
237
    Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t|
238
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb"
239
      t.verbose = true
240
    end
241

  
242
    desc "Run integration tests from within engines plugins (plugins with an 'app' directory)"
243
    Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t|
244
      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb"
245
      t.verbose = true
246
    end
247
  end
248
  
249
  namespace :plugins do
250

  
251
    desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
252
    task :all => [:warn_about_multiple_plugin_testing_with_engines, 
253
                  :units, :functionals, :integration]
254
    
255
    desc "Run all plugin unit tests"
256
    Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t|
257
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb"
258
      t.verbose = true
259
    end
260
    
261
    desc "Run all plugin functional tests"
262
    Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t|
263
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb"
264
      t.verbose = true
265
    end
266
    
267
    desc "Integration test engines"
268
    Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t|
269
      t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb"
270
      t.verbose = true
271
    end
272

  
273
    desc "Mirrors plugin fixtures into a single location to help plugin tests"
274
    task :setup_plugin_fixtures => :environment do
275
      Engines::Testing.setup_plugin_fixtures
276
    end
277
    
278
    # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite
279
    Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures"
280
  end
281
end
vendor/plugins/engines/test/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
vendor/plugins/engines/test/app/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
vendor/plugins/engines/test/app/controllers/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/controllers
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
8e2adc646126f3962ca1eaf16d663fa7
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
vendor/plugins/engines/test/app/controllers/namespace/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers/namespace
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/controllers/namespace
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
ed9f029690f9d77b31e0d68cff2f8ff3
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
vendor/plugins/engines/test/app/helpers/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/helpers
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/helpers
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
b3286b0384ccf10d15423a78b8a70c3a
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
vendor/plugins/engines/test/app/models/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/models
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/models
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
53fd050b6dc2f5da77439ffab6e1dd6e
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
......
66 66

  
67 67

  
68 68

  
69
2011-03-03T11:05:12.000000Z
69
2011-06-06T13:15:00.000000Z
70 70
ffba288117364d8379bd2b6788e2fd2f
71 71
2009-09-13T17:14:35.707881Z
72 72
2887
vendor/plugins/engines/test/app/things/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/things
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/things
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
aaa0b6b1363b304ca66c8def3c543b13
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
vendor/plugins/engines/test/app/views/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/app_and_plugin
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/app_and_plugin
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
e6dca36d9e91414f1a520ffddb5202d7
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
vendor/plugins/engines/test/app/views/namespace/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/namespace
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace/app_and_plugin
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/namespace/app_and_plugin
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
e6dca36d9e91414f1a520ffddb5202d7
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
vendor/plugins/engines/test/app/views/notify_mail/.svn/entries
1 1
10
2 2

  
3 3
dir
4
4993
5
http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/notify_mail
4
6000
5
http://redmine.rubyforge.org/svn/branches/1.2-stable/vendor/plugins/engines/test/app/views/notify_mail
6 6
http://redmine.rubyforge.org/svn
7 7

  
8 8

  
......
32 32

  
33 33

  
34 34

  
35
2011-03-03T11:05:12.000000Z
35
2011-06-06T13:15:00.000000Z
36 36
8e367f8a525da2fddf6b32d5f874c6ba
37 37
2009-09-13T17:14:35.707881Z
38 38
2887
......
66 66

  
67 67

  
68 68

  
69
2011-03-03T11:05:12.000000Z
69
2011-06-06T13:15:00.000000Z
70 70
50ed7a6afc64b4a326aa8b681a31b9a3
71 71
2009-09-13T17:14:35.707881Z
72 72
2887
......
100 100

  
101 101

  
102 102

  
103
2011-03-03T11:05:12.000000Z
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff