build-tool 0.5.7 → 0.6.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. data/.gitignore +1 -0
  2. data/.rvmrc +1 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +5 -0
  5. data/Gemfile.lock +56 -0
  6. data/History.txt +64 -0
  7. data/README.txt +0 -7
  8. data/Rakefile +8 -56
  9. data/bin/build-tool +4 -1
  10. data/build-tool.gemspec +62 -0
  11. data/db/migrations/20110703074000_add_command_logs.rb +17 -0
  12. data/db/migrations/20110703075000_add_module_logs.rb +20 -0
  13. data/db/migrations/20110815170000_add_features.rb +17 -0
  14. data/db/migrations/20120103204700_add_modules.rb +17 -0
  15. data/db/migrations/20120106181200_add_settings.rb +18 -0
  16. data/lib/build-tool.rb +3 -4
  17. data/lib/build-tool/application.rb +127 -37
  18. data/lib/build-tool/build-system/autoconf.rb +2 -8
  19. data/lib/build-tool/build-system/base.rb +12 -4
  20. data/lib/build-tool/build-system/cmake.rb +2 -0
  21. data/lib/build-tool/build-system/custom.rb +2 -0
  22. data/lib/build-tool/build-system/kdel10n.rb +2 -0
  23. data/lib/build-tool/build-system/make.rb +2 -0
  24. data/lib/build-tool/build-system/none.rb +2 -0
  25. data/lib/build-tool/build-system/qmake.rb +2 -0
  26. data/lib/build-tool/build-system/qt.rb +4 -0
  27. data/lib/build-tool/cfg/lexer.rex +40 -8
  28. data/lib/build-tool/cfg/lexer_base.rb +3 -1
  29. data/lib/build-tool/cfg/node.rb +17 -1
  30. data/lib/build-tool/cfg/parser.y +92 -10
  31. data/lib/build-tool/cfg/visitor.rb +202 -78
  32. data/lib/build-tool/command_actions.rb +26 -10
  33. data/lib/build-tool/commands.rb +289 -197
  34. data/lib/build-tool/commands/build.rb +13 -9
  35. data/lib/build-tool/commands/configuration.rb +25 -0
  36. data/lib/build-tool/commands/configuration/edit.rb +42 -0
  37. data/lib/build-tool/commands/configuration/list.rb +48 -0
  38. data/lib/build-tool/commands/configure.rb +9 -5
  39. data/lib/build-tool/commands/ctags.rb +8 -3
  40. data/lib/build-tool/commands/environments.rb +2 -4
  41. data/lib/build-tool/commands/environments/list.rb +13 -10
  42. data/lib/build-tool/commands/environments/set.rb +5 -1
  43. data/lib/build-tool/commands/features.rb +24 -0
  44. data/lib/build-tool/commands/features/disable.rb +70 -0
  45. data/lib/build-tool/commands/features/enable.rb +66 -0
  46. data/lib/build-tool/commands/features/list.rb +92 -0
  47. data/lib/build-tool/commands/fetch.rb +9 -3
  48. data/lib/build-tool/commands/files.rb +9 -5
  49. data/lib/build-tool/commands/gc.rb +48 -15
  50. data/lib/build-tool/commands/history.rb +21 -16
  51. data/lib/build-tool/commands/info.rb +16 -13
  52. data/lib/build-tool/commands/install.rb +8 -4
  53. data/lib/build-tool/commands/modules.rb +2 -4
  54. data/lib/build-tool/commands/modules/cleanup.rb +52 -0
  55. data/lib/build-tool/commands/modules/disable.rb +95 -0
  56. data/lib/build-tool/commands/modules/enable.rb +52 -0
  57. data/lib/build-tool/commands/modules/info.rb +44 -35
  58. data/lib/build-tool/commands/modules/list.rb +67 -15
  59. data/lib/build-tool/commands/modules/shell.rb +8 -2
  60. data/lib/build-tool/commands/rebase.rb +15 -7
  61. data/lib/build-tool/commands/recipes.rb +2 -4
  62. data/lib/build-tool/commands/recipes/add.rb +16 -2
  63. data/lib/build-tool/commands/recipes/edit.rb +72 -0
  64. data/lib/build-tool/commands/recipes/incoming.rb +11 -7
  65. data/lib/build-tool/commands/recipes/info.rb +12 -8
  66. data/lib/build-tool/commands/recipes/install.rb +37 -42
  67. data/lib/build-tool/commands/recipes/list.rb +6 -2
  68. data/lib/build-tool/configuration.rb +88 -3
  69. data/lib/build-tool/environment.rb +2 -0
  70. data/lib/build-tool/errors.rb +5 -0
  71. data/lib/build-tool/history.rb +3 -181
  72. data/lib/build-tool/model/command_log.rb +93 -0
  73. data/lib/build-tool/model/feature.rb +80 -0
  74. data/lib/build-tool/{module.rb → model/module.rb} +110 -29
  75. data/lib/build-tool/model/module_log.rb +64 -0
  76. data/lib/build-tool/model/setting.rb +84 -0
  77. data/lib/build-tool/recipe.rb +40 -18
  78. data/lib/build-tool/repository.rb +39 -33
  79. data/lib/build-tool/server.rb +27 -3
  80. data/lib/build-tool/singleton.rb +2 -0
  81. data/lib/build-tool/sshkey.rb +2 -0
  82. data/lib/build-tool/state_helper.rb +64 -0
  83. data/lib/build-tool/vcs/archive.rb +3 -1
  84. data/lib/build-tool/vcs/base.rb +13 -0
  85. data/lib/build-tool/vcs/git-svn.rb +36 -14
  86. data/lib/build-tool/vcs/git.rb +180 -44
  87. data/lib/build-tool/vcs/mercurial.rb +25 -13
  88. data/lib/build-tool/vcs/svn.rb +20 -15
  89. data/lib/build-tool/version.rb +30 -0
  90. data/lib/mj/error.rb +2 -0
  91. data/lib/mj/logging.rb +2 -0
  92. data/lib/mj/mixins/inherited_attributes.rb +73 -0
  93. data/lib/mj/tools/editor.rb +34 -0
  94. data/lib/mj/tools/ssh.rb +2 -0
  95. data/lib/mj/tools/subprocess.rb +2 -1
  96. data/lib/mj/vcs/git.rb +14 -2
  97. data/lib/mj/visitor.rb +22 -0
  98. data/tasks/db.rake +36 -0
  99. data/tasks/racc.rake +14 -0
  100. data/tasks/rdoc.rake +8 -0
  101. data/tasks/rexical.rake +14 -0
  102. data/tasks/test.rake +21 -0
  103. data/test/integration/history_test.rb +88 -0
  104. data/test/integration/parser_configuration.rb +36 -0
  105. data/test/integration/parser_environment_parser.rb +156 -0
  106. data/test/integration/parser_feature_test.rb +75 -0
  107. data/test/integration/parser_git-svn_test.rb +92 -0
  108. data/test/integration/parser_git_test.rb +97 -0
  109. data/test/integration/parser_mercurial_test.rb +77 -0
  110. data/test/integration/parser_module_test.rb +103 -0
  111. data/test/integration/parser_svn_test.rb +92 -0
  112. data/test/integration/parser_test.rb +73 -0
  113. data/test/test_helper.rb +61 -0
  114. data/test/unit/configuration_test.rb +36 -0
  115. data/test/unit/git_configuration_test.rb +163 -0
  116. data/test/unit/git_svn_configuration_test.rb +240 -0
  117. data/test/unit/mercurial_configuration_test.rb +64 -0
  118. data/test/unit/model/command_log_test.rb +103 -0
  119. data/test/unit/model/feature_test.rb +29 -0
  120. data/test/unit/model/module_log_test.rb +70 -0
  121. data/test/unit/model/module_test.rb +32 -0
  122. data/test/unit/repository_test.rb +110 -0
  123. data/test/unit/server_test.rb +66 -0
  124. data/test/unit/svn_configuration_test.rb +90 -0
  125. metadata +134 -93
  126. data/Manifest.txt +0 -80
  127. data/db/migrations/001_command_histories.rb +0 -20
  128. data/db/migrations/002_module_events.rb +0 -24
  129. data/db/migrations/003_command_histories_add_logfile.rb +0 -19
  130. data/lib/build-tool/GUI.rb +0 -360
  131. data/lib/build-tool/commands/help.rb +0 -22
  132. data/lib/build-tool/commands/lsfeatures.rb +0 -76
  133. data/lib/build-tool/feature.rb +0 -47
@@ -1,7 +1,36 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ require 'mj/mixins/inherited_attributes'
1
4
  require 'build-tool/vcs/base'
2
5
  require 'build-tool/errors'
3
6
  require 'grit'
4
7
 
8
+ # :TODO: Push these changes to grit.
9
+ module Grit
10
+ class RepoConfig < Config
11
+ def delete(key)
12
+ @repo.git.config({:file => "#{@repo.path}/config", :unset => true }, key) if @repo
13
+ end
14
+ protected
15
+ def config_lines
16
+ @repo.git.config({:file => "#{@repo.path}/config", :list => true}).split( /\n/ ) if @repo
17
+ end
18
+ end
19
+
20
+ class UserConfig < Config
21
+ def []=(key, value)
22
+ @repo.git.config({:global => true}, key, value)
23
+ end
24
+ def delete(key)
25
+ @repo.git.config({:global => true, :unset => true }, key)
26
+ end
27
+ protected
28
+ def config_lines
29
+ @repo.git.config({:list => true, :global => true}).split( /\n/ ) if @repo
30
+ end
31
+ end
32
+ end
33
+
5
34
  module BuildTool; module VCS
6
35
 
7
36
  class GitError < BuildTool::Error; end
@@ -82,19 +111,58 @@ def push_url
82
111
  end
83
112
 
84
113
 
85
-
114
+ # Configuration options for the git vcs.
115
+ #
116
+ # @attr_reader [String] name returns the name of the vcs.
86
117
  class GitConfiguration < BaseConfiguration
87
118
 
119
+ include MJ::Mixins::InheritedAttributes
120
+
88
121
  def name
89
122
  "git"
90
123
  end
91
124
 
125
+ class << self
126
+
127
+ # The global configuration object
128
+ attr_accessor :global_config
129
+
130
+ # Was the global configuration ($HOME/.gitconfig) already checked?
131
+ attr_accessor :global_config_checked
132
+ end
133
+
92
134
  attr_accessor :remote
135
+ def merged_remote
136
+ return parent.merged_remote.merge( @remote ) if @parent
137
+ return @remote
138
+ end
139
+
140
+
141
+ attr_accessor :options
142
+ def merged_options
143
+ return @options if self == GitConfiguration.global_config # This is the global configuration.
144
+ return parent.merged_options.merge( @options ) if @parent # We have a parent. Merge with it
145
+ return GitConfiguration.global_config.options.merge( @options ) if GitConfiguration.global_config # No parent. Merge with global
146
+ return @options # No parent, no global. Just us
147
+ end
148
+
149
+ # @return [Hash<String,String>] the configured global options.
150
+ attr_accessor :global_options
151
+
152
+ def merged_global_options
153
+ return @global_options if self == GitConfiguration.global_config
154
+ return @global_options.merge( GitConfiguration.global_config.instance_variable_get( "@global_options" ) ) if GitConfiguration.global_config
155
+ return @global_options
156
+ end
93
157
 
94
158
  def initialize
95
159
  super
96
160
  @remote = {}
97
- @track = "origin/master"
161
+ @track = nil
162
+ @options = {}
163
+ @global_options = {}
164
+ @already_checked_config = false
165
+ @already_checked_user_config = false
98
166
  end
99
167
 
100
168
  def vcs( mod )
@@ -103,9 +171,18 @@ def vcs( mod )
103
171
  Git.new( self )
104
172
  end
105
173
 
106
- # The branch to track
107
- attr_accessor :track
174
+ # The remote branch to track.
175
+ # @return [String] the remote branch.
176
+ attr_writer :track
177
+ def track
178
+ return @track if @track # Our track
179
+ return parent.track if @parent # Out parents track
180
+ "origin/master" # The default
181
+ end
108
182
 
183
+ # The remote part of #remote.
184
+ # @see GitConfiguration#remote
185
+ # @return [String] the remote.
109
186
  def track_remote
110
187
  rc = track.split('/')
111
188
  # If there is only one string we assume it is the branch name from
@@ -114,6 +191,9 @@ def track_remote
114
191
  return rc[0]
115
192
  end
116
193
 
194
+ # The branch part of #remote
195
+ # @see #remote
196
+ # @return [String] the branch.
117
197
  def track_branch
118
198
  rc = track.split('/')
119
199
  # If there is only one string we assume it is the branch name from
@@ -127,6 +207,13 @@ def copy_configuration( other )
127
207
  @remote = {} # Do not copy the remotes
128
208
  end
129
209
 
210
+ #######
211
+ private
212
+ #######
213
+
214
+ @global_config = nil
215
+ @global_config_checked = false
216
+
130
217
  end
131
218
 
132
219
  #
@@ -142,15 +229,6 @@ def initialize( config )
142
229
 
143
230
  class << self
144
231
 
145
- git_available = nil
146
-
147
- # Is the git executable available?
148
- def git_available
149
- return @git_available unless @git_available.nil?
150
- %x( git --version 2>&1 )
151
- @git_available = $?.success?
152
- return @git_available
153
- end
154
232
 
155
233
  end
156
234
 
@@ -197,14 +275,7 @@ def clone
197
275
  raise GitError, "Error while initializing the repo `git init #{local_path}'`: #{$?}"
198
276
  end
199
277
 
200
- config.remote.each do |name, val|
201
- if git( "remote add #{name} #{val.url}" ) != 0
202
- raise GitError, "Error while initializing the repo `git remote add #{name} #{val.url}`: #{$?}"
203
- end
204
- if val.push_url and git( "remote set-url --push #{name} #{val.push_url}" ) != 0
205
- raise GitError, "Error while initializing the repo `git remote add #{name} #{val.url}`: #{$?}"
206
- end
207
- end
278
+ check_config
208
279
 
209
280
  logger.info <<-EOS
210
281
  The following command sometimes fails when issued from this script. Reason unknown. The
@@ -232,6 +303,9 @@ def gc
232
303
  def fetch()
233
304
  if !checkedout? and !$noop
234
305
  clone
306
+ else
307
+ # clone() calls those methods.
308
+ check_config
235
309
  end
236
310
  cmd = "fetch -q --prune #{config.track_remote}"
237
311
  if ( rc = git( cmd ) ) != 0
@@ -245,48 +319,101 @@ def git( command, wd = local_path, &block )
245
319
 
246
320
  def prepare_for_fetch
247
321
  # If our server has an associated ssh-key, add it to the ssh-agent.
248
- return check_for_sshkey( config.remote[ config.track_remote ].server.sshkey )
322
+ return check_for_sshkey( config.merged_remote[ config.track_remote ].server.sshkey )
249
323
  end
250
324
 
251
- # Check if the module is ready for vcs action
252
- def ready_for_access
253
-
325
+ def check_user_config
326
+ return if @already_checked_user_config
327
+ # :FIXME: It would make sense to do this even if the repo is not existing but grit cannot
328
+ # handle that
254
329
  if checkedout?
330
+ # Check that the options are the same as configured.
331
+ if ! GitConfiguration.global_config_checked
332
+ gitconfig = Grit::UserConfig.new(repo)
333
+ config.merged_global_options.each do |name, val|
334
+ if val != gitconfig[name]
335
+ if val.empty?
336
+ next if gitconfig[name].nil?
337
+ logger.info "repo: git-config: Removing #{name}"
338
+ gitconfig.delete name if !$noop
339
+ else
340
+ logger.info "repo: git-config: Setting #{name} to #{val}"
341
+ gitconfig[name] = val if !$noop
342
+ end
343
+ end
344
+ end
345
+ GitConfiguration.global_config_checked = true
346
+ end
347
+ end
348
+ @already_checked_user_config = true
349
+ end
255
350
 
351
+ def check_config
352
+ return if @already_checked_config
353
+ if checkedout?
256
354
  # Check that the remotes are the same as configured.
257
- gitconfig = repo.config
258
- config.remote.each do |name, val|
259
- if val.url and val.url != gitconfig["remote.#{name}.url"]
260
- logger.info "#{config.module.name}: Setting remote.origin.url to #{val.url}"
261
- gitconfig["remote.#{name}.url"] = val.url
355
+ gitconfig = Grit::RepoConfig.new(repo)
356
+ config.merged_remote.each do |name, val|
357
+ if val.url
358
+ if gitconfig["remote.#{name}.url"].nil?
359
+ if git( "remote add #{name} #{val.url}" ) != 0
360
+ raise GitError, "Error while initializing the repo `git remote add #{name} #{val.url}`: #{$?}"
361
+ end
362
+ elsif val.url != gitconfig["remote.#{name}.url"]
363
+ logger.info "repo: Setting remote.origin.url to #{val.url}"
364
+ gitconfig["remote.#{name}.url"] = val.url
365
+ end
366
+ end
367
+
368
+ if val.push_server and val.push_url
369
+ if val.push_url != gitconfig["remote.#{name}.pushurl"].nil?
370
+ if git( "remote set-url --push #{name} #{val.push_url}" ) != 0
371
+ raise GitError, "Error while initializing the repo `git remote add #{name} #{val.url}`: #{$?}"
372
+ end
373
+ elsif val.push_url != gitconfig["remote.#{name}.pushurl"]
374
+ logger.info "repo: Setting remote.origin.pushurl to #{val.push_url}"
375
+ gitconfig["remote.#{name}.pushurl"] = val.push_url
376
+ end
262
377
  end
263
- if val.push_server and val.push_url != gitconfig["remote.#{name}.pushurl"]
264
- logger.info "#{config.module.name}: Setting remote.origin.pushurl to #{val.push_url}"
265
- gitconfig["remote.#{name}.pushurl"] = val.push_url
378
+ end
379
+
380
+ # Check that the options are the same as configured.
381
+ config.merged_options.each do |name, val|
382
+ if val != gitconfig[name]
383
+ if val.empty?
384
+ next if gitconfig[name].nil?
385
+ logger.info "repo: git-config: Removing #{name}"
386
+ gitconfig.delete name if !$noop
387
+ else
388
+ logger.info "repo: git-config: Setting #{name} to #{val}"
389
+ gitconfig[name] = val if !$noop
390
+ end
266
391
  end
267
392
  end
268
393
 
269
394
  # Check if there is a commit template. If yes add it.
270
- if ( not gitconfig["commit.template"] ) && Pathname.new( local_path ).join( '.commit-template' ).exist?
395
+ if ( not gitconfig["commit.template"] and not config.merged_options["commit.template"] ) and Pathname.new( local_path ).join( '.commit-template' ).exist?
271
396
  logger.info "#{config.module.name}: git-config: Setting commit.template to .commit-template"
272
- gitconfig["commit.template"] = ".commit-template"
273
- end
397
+ gitconfig["commit.template"] = ".commit-template" if !$noop
274
398
 
399
+ end
400
+ @already_checked_config = true
275
401
  end
276
402
  end
277
403
 
278
404
  def ready_for_fetch
279
- if not Git.git_available
280
- logger.info( "#{config.module.name}: Calling `git` failed!" )
405
+ if not MJ::VCS::Git.git_available?
406
+ logger.error( "#{config.module.name}: Calling `git` failed!" )
407
+ return false
281
408
  end
282
- return Git.git_available
409
+
410
+ return true
283
411
  end
284
412
 
285
413
  # Check if the module is ready for a rebase.
286
414
  def ready_for_rebase
287
-
415
+ check_user_config
288
416
  if checkedout?
289
-
290
417
  # Check if the index is dirty.
291
418
  if git( "diff --exit-code" ) != 0
292
419
  logger.info( "#{config.module.name}: A dirty index will prevent the rebase." )
@@ -307,9 +434,18 @@ def ready_for_rebase
307
434
  true
308
435
  end
309
436
 
310
- def rebase
311
- if 0 != ( git "rebase #{config.track_remote}/#{config.track_branch}" )
312
- raise GitError, "Error while rebasing the repo with `#{config.track_remote}/#{config.track_branch}': #{$?}"
437
+ def rebase( verbose = false )
438
+ check_config
439
+ remote_branch = "#{config.track_remote}/#{config.track_branch}"
440
+
441
+ if verbose
442
+ git('log --first-parent HEAD..%s' % remote_branch ) do |line|
443
+ logger.info( line )
444
+ end
445
+ end
446
+
447
+ if 0 != ( git "rebase #{remote_branch}" )
448
+ raise GitError, "Error while rebasing the repo with `#{remote_branch}': #{$?}"
313
449
  end
314
450
  end
315
451
 
@@ -1,3 +1,6 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ require 'mj/mixins/inherited_attributes'
1
4
  require 'build-tool/vcs/base'
2
5
  require 'build-tool/errors'
3
6
 
@@ -7,15 +10,16 @@ class MercurialError < BuildTool::Error; end
7
10
 
8
11
  class MercurialConfiguration < BaseConfiguration
9
12
 
13
+ include MJ::Mixins::InheritedAttributes
14
+
10
15
  def name
11
16
  "mercurial"
12
17
  end
13
18
 
14
- attr_accessor :remote
15
-
16
- def initialize( mod = nil )
17
- super( mod )
18
- @remote = {}
19
+ def initialize
20
+ super
21
+ @url = nil
22
+ @track = nil
19
23
  end
20
24
 
21
25
  def vcs( mod )
@@ -24,13 +28,17 @@ def vcs( mod )
24
28
  Mercurial.new( self )
25
29
  end
26
30
 
27
- def branch
28
- self.module.remote_path
31
+ attr_writer :track
32
+ def track
33
+ return @track if @track
34
+ return parent.track if @parent
35
+ return 'default'
29
36
  end
30
37
 
38
+ inherited_attr_accessor :url
39
+
31
40
  def copy_configuration( other )
32
41
  super
33
- @remote = {} # Do not copy the remote
34
42
  end
35
43
  end
36
44
 
@@ -41,7 +49,6 @@ class Mercurial < Base
41
49
 
42
50
  def initialize( config )
43
51
  super( config )
44
- @remote = {}
45
52
  @vcs = nil
46
53
  end
47
54
 
@@ -77,7 +84,7 @@ def clone
77
84
  FileUtils.mkdir_p Pathname.new( local_path ).dirname if ! $noop
78
85
 
79
86
  # Initialize the repository
80
- if hg( "clone #{repository.url} #{local_path}", Pathname.new( local_path ).dirname) != 0
87
+ if hg( "clone #{config.url} #{local_path}", Pathname.new( local_path ).dirname) != 0
81
88
  raise MercurialError, "Error while initializing the repo `hg init #{local_path}'`: #{$?}"
82
89
  end
83
90
 
@@ -92,7 +99,7 @@ def fetch()
92
99
  if !checkedout? and !$noop
93
100
  clone
94
101
  end
95
- cmd = "pull #{repository.url}"
102
+ cmd = "pull #{config.url}"
96
103
  if ( rc = hg( cmd ) ) != 0
97
104
  raise MercurialError, "Error while fetching: #{rc}"
98
105
  end
@@ -106,8 +113,13 @@ def hg( command, wd = local_path, &block )
106
113
  rc
107
114
  end
108
115
 
109
- def rebase
110
- if 0 != ( hg "update #{config.branch}" )
116
+ def rebase( verbose = false )
117
+
118
+ if verbose
119
+ logger.info( 'Verbose rebase not yet implemented for mercurial.' )
120
+ end
121
+
122
+ if 0 != ( hg "update #{config.track}" )
111
123
  raise MercurialSvnError, "Error while rebasing the repo with `hg update: #{$?}"
112
124
  end
113
125
  end
@@ -1,9 +1,15 @@
1
+ # -*- coding: UTF-8 -*-
2
+
1
3
  require 'build-tool/vcs/base'
2
4
 
5
+ require 'mj/mixins/inherited_attributes'
6
+
3
7
  module BuildTool; module VCS
4
8
 
5
9
  class SvnConfiguration < BaseConfiguration
6
10
 
11
+ include MJ::Mixins::InheritedAttributes
12
+
7
13
  def initialize
8
14
  super
9
15
  @only = nil
@@ -18,14 +24,10 @@ def name
18
24
  def vcs( mod )
19
25
  raise StandardError if @module and ! mod.equal?( @module )
20
26
  @module = mod
21
- Svn.new( self )
27
+ Svn.new( self )
22
28
  end
23
29
 
24
- attr_reader :only
25
- def only=( list )
26
- @only = list
27
- puts @only.inspect
28
- end
30
+ inherited_attr_accessor :only
29
31
 
30
32
  def copy_configuration( other )
31
33
  super
@@ -34,18 +36,16 @@ def copy_configuration( other )
34
36
 
35
37
  attr_writer :repository
36
38
  def repository
37
- if @repository.nil?
38
- raise ConfigurationError, "No repository configured for module #{@module.name}."
39
- end
40
- @repository
39
+ return @repository if @repository # Our repository
40
+ return parent.repository if @parent # Our parents repository
41
+ raise ConfigurationError, "No repository configured for module #{self.module ? self.module.name : 'unknown' }."
41
42
  end
42
43
 
43
44
  attr_writer :remote_path
44
45
  def remote_path
45
- if @remote_path.nil?
46
- return @module.name
47
- end
48
- @remote_path
46
+ return @remote_path if @remote_path
47
+ return parent.remote_path if @parent
48
+ return @module.name
49
49
  end
50
50
 
51
51
  end
@@ -180,7 +180,12 @@ def self.svn( command, wd, &block )
180
180
  rc
181
181
  end
182
182
 
183
- def rebase
183
+ def rebase( verbose = false )
184
+
185
+ if verbose
186
+ logger.info( 'Verbose rebase not yet implemented for subversion.' )
187
+ end
188
+
184
189
  # Rebasing is not supported
185
190
  0
186
191
  end