ext 0.1.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,9 +1,16 @@
1
- February 17, 2011 Version 1.8 released
1
+ March 29, 20011 Version 1.0.0 released
2
+ - Added scm_opts and <scm_name>_opts .externals file options with
3
+ (_co|_ex|_st|_up) suffixed versions for passing options to the underlying
4
+ SCM executable.
5
+ - Some fixes to issues like recognizing svn URLs (thanks to Lane Roathe) and
6
+ jruby testing
7
+
8
+ February 17, 2011 Version 0.1.8 released
2
9
  - Fixes a compatibility issue with jruby (thanks to Patrik Sundberg)
3
10
  - Fixes some issues with recognizing rails 3 projects and testing with
4
11
  rails 3 installed
5
12
 
6
- 1/3/2010 Version 1.6 released
13
+ 1/3/2010 Version 0.1.6 released
7
14
  - Fixes a problem that can occur if ext is symlinked (thanks to Olmo Maldonado)
8
15
  - Added --version command line option
9
16
  - Fixes a problem with parsing project names from git repository URLs
data/README CHANGED
@@ -126,6 +126,50 @@ st Like status, but skips the main project.
126
126
 
127
127
  up Like update, but skips the main project.
128
128
 
129
+
130
+ PASSING OPTIONS TO THE UNDERLYING SCM
131
+ -------------------------------------
132
+ Sometimes it's convenient to have options passed to the underlying scm
133
+ executable, like --trust-certid to svn, etc. This can be done by editing the
134
+ .externals file. You can put scm_opts = <options> under the project you want,
135
+ and it will be passed whenever externals calls the executable. You can specify
136
+ an option to only be ran when doing co/ex/st/up by adding _co/_ex/_st/_up to
137
+ the scm_opts option.
138
+
139
+ EXAMPLE:
140
+
141
+ [.]
142
+ scm = git
143
+ scm_opts = --verbose
144
+
145
+ [vendor/plugins/some_plugin]
146
+ scm = svn
147
+ scm_opts = --trust-certid
148
+ scm_opts_co = --non-interactive
149
+
150
+ This type of a .externals file tells externals to pass
151
+ " --non-interactive --trust-certid" to svn when doing a checkout of some_plugin.
152
+ "--trust-certid" will be sent to all other calls to svn dealing with
153
+ some_plugin. "--verbose" will be passed to git on all calls dealing with the
154
+ main project.
155
+
156
+ You can pass options globally by setting <scm_name>_opts in the main project.
157
+
158
+ EXAMPLE:
159
+
160
+ [.]
161
+ scm = svn
162
+ svn_opts = --trust-certid
163
+ svn_opts_co = --non-interactive
164
+
165
+ [vendor/plugins/some_plugin]
166
+ scm = svn
167
+
168
+ This will pass "--non-interactive --trust-certid" to all co calls dealing with
169
+ subversion projects, regardless of which project it is.
170
+
171
+
172
+
129
173
  The externals project is copyright 2008 by Miles Georgi, nopugs.com, azimux.com
130
174
  and is released under the MIT license.
131
175
 
@@ -10,7 +10,7 @@ module Externals
10
10
  #exit status
11
11
  OBSOLETE_EXTERNALS_FILE = 15
12
12
 
13
- VERSION = '0.1.8'
13
+ VERSION = '1.0.0'
14
14
  PROJECT_TYPES_DIRECTORY = File.join(File.dirname(__FILE__), '..', 'externals','project_types')
15
15
 
16
16
  # Full commands operate on the main project as well as the externals
@@ -250,12 +250,16 @@ module Externals
250
250
  end
251
251
 
252
252
  def projects
253
- p = []
253
+ return @projects if @projects
254
+ @projects = []
254
255
  configuration.sections.each do |section|
255
- p << Ext.project_class(section[:scm]||infer_scm(section[:repository])).new(
256
+ @projects << Ext.project_class(section[:scm]||infer_scm(section[:repository])).new(
256
257
  section.attributes.merge(:path => section.title))
257
258
  end
258
- p
259
+ #let's set the parents of these projects
260
+ main = main_project
261
+ subprojects.each {|subproject| subproject.parent = main}
262
+ @projects
259
263
  end
260
264
 
261
265
  def subproject_by_name_or_path name
@@ -295,6 +299,7 @@ module Externals
295
299
 
296
300
  def reload_configuration
297
301
  @configuration = nil
302
+ @projects = nil
298
303
  configuration
299
304
  end
300
305
 
@@ -427,6 +432,7 @@ Please use
427
432
  end
428
433
  section[:revision] = revision
429
434
  configuration.write '.externals'
435
+ reload_configuration
430
436
 
431
437
  subproject_by_name_or_path(args[0]).up
432
438
  end
@@ -483,6 +489,7 @@ that you are installing. Use an option to specify it
483
489
 
484
490
  configuration.remove_section(project.path)
485
491
  configuration.write '.externals'
492
+ reload_configuration
486
493
 
487
494
  if options[:force_removal]
488
495
  Dir.chdir File.dirname(project.path) do
@@ -717,6 +724,7 @@ Please use the --type option to tell ext which to use."
717
724
  end
718
725
 
719
726
  config.write('.externals')
727
+ reload_configuration
720
728
  end
721
729
 
722
730
  def version(args, options)
@@ -1,10 +1,15 @@
1
1
  require 'externals/extensions/symbol'
2
2
 
3
3
  module Externals
4
- VALID_ATTRIB = [:name, :path, :repository, :branch, :type, :scm, :revision
5
- ].map(&:to_s) unless const_defined?('VALID_ATTRIB')
4
+ OPTS_SUFFIXES = ["co", "up", "st", "ex"] unless const_defined?('OPTS_SUFFIXES')
5
+ VALID_ATTRIB = ([
6
+ :name, :path, :repository, :branch, :type, :scm, :revision
7
+ ]
8
+ ).map(&:to_s) unless const_defined?('VALID_ATTRIB')
6
9
 
7
10
  class Project
11
+ attr_accessor :parent
12
+
8
13
  def self.attr_attr_accessor *names
9
14
  names = [names].flatten
10
15
  names.each do |name|
@@ -55,10 +60,15 @@ module Externals
55
60
  new_hash
56
61
  end
57
62
 
58
- inVALID_ATTRIB = hash.keys - Externals::VALID_ATTRIB
63
+ invalid_attrib = hash.keys - Externals::VALID_ATTRIB
59
64
 
60
- if !inVALID_ATTRIB.empty?
61
- raise "invalid attribute(s): #{inVALID_ATTRIB.join(', ')}"
65
+ if !invalid_attrib.empty?
66
+ invalid_attrib.reject! do |attribute|
67
+ attribute =~ /^\w+_opts(_(#{OPTS_SUFFIXES.join("|")}))?/
68
+ end
69
+ if !invalid_attrib.empty?
70
+ raise "invalid attribute(s): #{invalid_attrib.join(', ')}"
71
+ end
62
72
  end
63
73
 
64
74
  path = hash.delete('path')
@@ -129,6 +139,96 @@ module Externals
129
139
  end
130
140
  end
131
141
 
142
+ def scm_opts
143
+ values = [
144
+ attributes[:scm_opts],
145
+ send("#{scm}_opts")
146
+ ].compact
147
+
148
+ if !values.empty?
149
+ values.join(" ")
150
+ end
151
+ end
152
+
153
+ def scm_opts= value
154
+ attributes[:scm_opts] = value
155
+ end
156
+
157
+ # create the suffixed versions
158
+ OPTS_SUFFIXES.map do |suffix|
159
+ name = "scm_opts_#{suffix}"
160
+ end.each do |name|
161
+ define_method name do
162
+ values = [
163
+ attributes[name.to_sym],
164
+ attributes[:scm_opts],
165
+ send(name.gsub(/^scm/, scm))
166
+ ].compact
167
+
168
+ if !values.empty?
169
+ values.join(" ")
170
+ end
171
+ end
172
+
173
+ define_method "#{name}=" do |value|
174
+ attributes[name.to_sym] = value
175
+ end
176
+ end
177
+
178
+
179
+ def self.inherited child
180
+ #create the <scm_name>_opts_co/ex/st/up and <scm_opts>_opts setting
181
+ #such as svn_opts and svn_opts_co from the main project (stored
182
+ #in the parrent attribute.)
183
+ def child.install_scm_opts_methods
184
+ raise unless scm && scm != ""
185
+
186
+ #first we create global <scm_name>_opts accessors that will apply to all
187
+ #of the suffixed versions (<scm_name>_opts_co) as well as the project
188
+ #specific ones. (scm_opts, scm_opts_co, etc)
189
+ scm_name = scm
190
+ Project.__send__(:define_method, "#{scm_name}_opts_raw") do
191
+ attributes[name.to_sym]
192
+ end
193
+ #global settings are fetched from the parent project.
194
+ Project.__send__(:define_method, "#{scm_name}_opts") do
195
+ if parent
196
+ parent.__send__("#{scm_name}_opts")
197
+ else
198
+ attributes["#{scm_name}_opts".to_sym]
199
+ end
200
+ end
201
+ Project.__send__(:define_method, "#{scm_name}_opts=") do |value|
202
+ attributes["#{scm_name}_opts".to_sym] = value
203
+ end
204
+
205
+ #now we create the suffixed version of the global settings.
206
+ OPTS_SUFFIXES.map do |suffix|
207
+ name = "#{scm_name}_opts_#{suffix}"
208
+ end.each do |name|
209
+ #defer to the parent project for these global settings
210
+ Project.__send__(:define_method, name) do
211
+ if parent
212
+ parent.__send__(name)
213
+ else
214
+ values = [
215
+ attributes[name.to_sym],
216
+ self.send("#{scm_name}_opts")
217
+ ].compact
218
+
219
+ if !values.empty?
220
+ values.join(" ")
221
+ end
222
+ end
223
+ end
224
+ Project.__send__(:define_method, "#{name}=") do |value|
225
+ attributes[name.to_sym] = value
226
+ end
227
+ end
228
+
229
+ end
230
+ end
231
+
132
232
  protected
133
233
  def trim_quotes value
134
234
  if value
@@ -139,5 +239,11 @@ module Externals
139
239
  end
140
240
  end
141
241
  end
242
+
243
+ #helper method for converting "co" into "scm_opts_co" and "" into "scm_opts"
244
+ def resolve_opts command = ""
245
+ command = "_#{command}" if command != ""
246
+ send("scm_opts#{command}")
247
+ end
142
248
  end
143
249
  end
@@ -3,12 +3,14 @@ require File.join(File.dirname(__FILE__), '..', 'project')
3
3
 
4
4
  module Externals
5
5
  class GitProject < Project
6
-
7
6
  def default_branch
8
7
  'master'
9
8
  end
10
9
 
11
- def co *args
10
+ private
11
+ def co_or_up command
12
+ opts = resolve_opts(command)
13
+
12
14
  puts "path is #{path} repository is #{repository}"
13
15
  if path != '.'
14
16
  (rmdircmd = "rmdir #{path}")
@@ -19,22 +21,29 @@ module Externals
19
21
  dest = '' if dest == '.'
20
22
  dest = "\"#{dest}\"" if dest && !dest.empty?
21
23
 
22
- puts(gitclonecmd = "git clone \"#{repository}\" #{dest}")
24
+ puts(gitclonecmd = "git #{opts} clone \"#{repository}\" #{dest}")
23
25
  puts `#{gitclonecmd}`
24
26
 
25
- change_to_branch_revision
27
+ change_to_branch_revision(command)
28
+ end
29
+
30
+ public
31
+ def co *args
32
+ co_or_up "co"
26
33
  end
27
34
 
28
- def change_to_branch_revision
35
+ def change_to_branch_revision command = ""
36
+ opts = resolve_opts(command)
37
+
29
38
  if branch
30
39
  Dir.chdir path do
31
- puts `git checkout --track -b #{branch} origin/#{branch}`
40
+ puts `git #{opts} checkout --track -b #{branch} origin/#{branch}`
32
41
  end
33
42
  end
34
43
 
35
44
  if revision
36
45
  Dir.chdir path do
37
- puts `git checkout #{revision}`
46
+ puts `git #{opts} checkout #{revision}`
38
47
  end
39
48
  end
40
49
  end
@@ -51,32 +60,32 @@ module Externals
51
60
 
52
61
  dest = "\"#{dest}\"" if dest && !dest.empty?
53
62
 
54
- puts(gitclonecmd = "git clone --depth 1 \"#{repository}\" #{dest}")
63
+ puts(gitclonecmd = "git #{scm_opts_ex} clone --depth 1 \"#{repository}\" #{dest}")
55
64
 
56
65
  puts `#{gitclonecmd}`
57
66
 
58
- change_to_branch_revision
67
+ change_to_branch_revision "ex"
59
68
  end
60
69
 
61
70
  def up *args
62
71
  if File.exists? path
63
72
  if revision
64
- change_to_branch_revision
73
+ change_to_branch_revision "up"
65
74
  else
66
75
  puts "updating #{path}:"
67
76
  Dir.chdir path do
68
- puts `git pull`
77
+ puts `git #{scm_opts_up} pull`
69
78
  end
70
79
  end
71
80
  else
72
- co(*args)
81
+ co_or_up "up"
73
82
  end
74
83
  end
75
84
 
76
85
  def st *args
77
86
  puts "\nstatus for #{path}:"
78
87
  Dir.chdir path do
79
- puts `git status`
88
+ puts `git #{scm_opts_st} status`
80
89
  end
81
90
  end
82
91
 
@@ -94,10 +103,13 @@ module Externals
94
103
  "git"
95
104
  end
96
105
 
106
+ install_scm_opts_methods
107
+
97
108
  def self.detected?
98
109
  File.exists? ".git"
99
110
  end
100
111
 
112
+ #this is a test helper method
101
113
  def self.add_all
102
114
  puts `git add .`
103
115
  end
@@ -157,7 +169,7 @@ module Externals
157
169
 
158
170
  def current_revision
159
171
  Dir.chdir path do
160
- if `git show HEAD` =~ /^\s*commit\s*([0-9a-fA-F]*)\s*$/i
172
+ if `git #{scm_opts} show HEAD` =~ /^\s*commit\s*([0-9a-fA-F]*)\s*$/i
161
173
  $1
162
174
  end
163
175
  end
@@ -165,7 +177,7 @@ module Externals
165
177
 
166
178
  def current_branch
167
179
  Dir.chdir path do
168
- if `git branch -a` =~ /^\s*\*\s*([^\s]*)\s*$/
180
+ if `git #{scm_opts} branch -a` =~ /^\s*\*\s*([^\s]*)\s*$/
169
181
  $1
170
182
  end
171
183
  end
@@ -2,25 +2,34 @@ require File.join(File.dirname(__FILE__), '..', 'project')
2
2
 
3
3
  module Externals
4
4
  class SvnProject < Project
5
-
6
5
  def default_branch
7
6
  nil
8
7
  end
9
8
 
10
- def co *args
9
+ private
10
+ def co_or_up command
11
+ opts = resolve_opts(command)
12
+
11
13
  (rmdircmd = "rmdir #{path}")
12
14
 
13
15
  `#{rmdircmd}` if File.exists? path
14
- puts(svncocmd = "svn co #{repository} #{path}")
16
+ puts(svncocmd = "svn #{opts} co #{repository} #{path}")
15
17
  puts `#{svncocmd}`
16
18
 
17
- change_to_revision
19
+ change_to_revision command
20
+ end
21
+
22
+ public
23
+ def co *args
24
+ co_or_up "co"
18
25
  end
19
26
 
20
- def change_to_revision
27
+ def change_to_revision command = ""
28
+ opts = resolve_opts(command)
29
+
21
30
  if revision
22
31
  Dir.chdir path do
23
- puts `svn up -r #{revision}`
32
+ puts `svn #{opts} up -r #{revision}`
24
33
  end
25
34
  end
26
35
  end
@@ -35,47 +44,50 @@ module Externals
35
44
  end
36
45
 
37
46
  `#{rmdircmd}` if File.exists? path
38
- puts(svncocmd = "svn export #{repository} #{path}")
47
+ puts(svncocmd = "svn #{scm_opts_ex} export #{repository} #{path}")
39
48
  puts `#{svncocmd}`
40
49
  end
41
50
 
42
51
  def up *args
43
52
  if File.exists? path
44
53
  if revision
45
- change_to_revision
54
+ change_to_revision "up"
46
55
  else
47
56
  puts "updating #{path}:"
48
57
  Dir.chdir path do
49
- puts `svn up .`
58
+ puts `svn #{scm_opts_up} up .`
50
59
  end
51
60
  end
52
61
  else
53
- co(*args)
62
+ co_or_up "up"
54
63
  end
55
64
  end
56
65
 
57
66
  def st *args
58
67
  puts "\nstatus for #{path}:"
59
68
  Dir.chdir path do
60
- puts `svn status`
69
+ puts `svn #{scm_opts_st} status`
61
70
  end
62
71
  end
63
72
 
64
73
  def self.scm_path? path
65
74
  return true if path =~ /^svn(\+ssh)?:/
75
+
76
+ # Look for http(s)://svn.*/*
66
77
  if path =~ /^https?:\/\/([\w+\-_]+)\.(?:[\w+\-_]+\.)*[\w\-_]+(?:\/|$)/
67
78
  return true if $1.downcase == "svn"
79
+ end
68
80
 
69
- if path =~ /^https?:\/\/(?:[\w_\-]+\.)*[\w\-_]+\/(\w+)\//
70
- return true if $1.downcase == "svn"
71
- end
81
+ # Look for http(s)://*/*svn*/
82
+ if path =~ /^https?:\/\/(?:[\w+\-_]+\.?)+\/(\w+)/
83
+ return true if $1.downcase.include? "svn"
72
84
  end
73
85
 
74
86
  false
75
87
  end
76
88
 
77
89
  def self.fill_in_opts opts, main_options, sub_options
78
- opts.on("--svn", "--subversion","-s", "same as '--scm svn' Uses subversion to checkout/export the main project",
90
+ opts.on("--svn", "--subversion", "same as '--scm svn' Uses subversion to checkout/export the main project",
79
91
  Integer) {sub_options[:scm] = main_options[:scm] = 'svn'}
80
92
  end
81
93
 
@@ -83,10 +95,13 @@ module Externals
83
95
  "svn"
84
96
  end
85
97
 
98
+ install_scm_opts_methods
99
+
86
100
  def self.detected?
87
101
  File.exists? ".svn"
88
102
  end
89
103
 
104
+ #this is a test helper method
90
105
  def self.add_all
91
106
  status = `svn st`
92
107
 
@@ -110,7 +125,7 @@ module Externals
110
125
  rows << child.strip
111
126
 
112
127
  Dir.chdir(parent) do
113
- puts `svn propset svn:ignore "#{rows.compact.join("\n")}\n" .`
128
+ puts `svn #{scm_opts} propset svn:ignore "#{rows.compact.join("\n")}\n" .`
114
129
  end
115
130
  end
116
131
 
@@ -130,7 +145,7 @@ module Externals
130
145
  end
131
146
 
132
147
  Dir.chdir(parent) do
133
- puts `svn propset svn:ignore "#{rows.compact.join("\n")}\n" .`
148
+ puts `svn #{scm_opts} propset svn:ignore "#{rows.compact.join("\n")}\n" .`
134
149
  end
135
150
  end
136
151
 
@@ -145,14 +160,14 @@ module Externals
145
160
  def ignore_text(path)
146
161
  ignore_text = ''
147
162
  Dir.chdir File.dirname(path) do
148
- ignore_text = `svn propget svn:ignore`
163
+ ignore_text = `svn #{scm_opts} propget svn:ignore`
149
164
  end
150
165
  ignore_text
151
166
  end
152
167
 
153
168
  def current_revision
154
169
  Dir.chdir path do
155
- if `svn info` =~ /Revision:\s*(\d+)\s*$/
170
+ if `svn #{scm_opts} info` =~ /Revision:\s*(\d+)\s*$/
156
171
  $1
157
172
  end
158
173
  end
@@ -163,4 +178,4 @@ module Externals
163
178
  end
164
179
 
165
180
  end
166
- end
181
+ end
@@ -100,9 +100,9 @@ module Externals
100
100
  Dir.mkdir applications_dir unless File.exists?(applications_dir)
101
101
  Dir.chdir applications_dir do
102
102
  if rails_version =~ /^3([^\d]|$)/
103
- puts `rails new rails_app`
103
+ puts `#{rails_exe} new rails_app`
104
104
  elsif rails_version =~ /^2([^\d]|$)/
105
- puts `rails rails_app`
105
+ puts `#{rails_exe} rails_app`
106
106
  else
107
107
  raise "can't determine rails version"
108
108
  end
@@ -110,7 +110,12 @@ module Externals
110
110
  end
111
111
 
112
112
  def rails_version
113
- /[\d\.]+/.match(`rails --version`)[0]
113
+ /[\d\.]+/.match(`#{rails_exe} --version`)[0]
114
+ end
115
+
116
+ def rails_exe
117
+ "jruby -S rails"
118
+ "rails"
114
119
  end
115
120
 
116
121
  def windows?
@@ -5,7 +5,7 @@ require 'externals/ext'
5
5
  module Externals
6
6
  class TestCheckoutGit < TestCase
7
7
  include ExtTestCase
8
-
8
+
9
9
  def setup
10
10
  initialize_test_git_repository
11
11
 
@@ -19,20 +19,20 @@ module Externals
19
19
  Dir.chdir File.join(root_dir, 'test') do
20
20
  `rm -rf workdir`
21
21
  end
22
-
22
+
23
23
  end
24
-
24
+
25
25
  def test_repository_created
26
26
  assert File.exists?(File.join(repository_dir('git'), '.git'))
27
27
  end
28
-
28
+
29
29
  def test_checkout
30
30
  Dir.chdir File.join(root_dir, 'test') do
31
31
  `mkdir workdir`
32
-
32
+
33
33
  Dir.chdir 'workdir' do
34
34
  Ext.run "checkout", "--git", repository_dir('git')
35
-
35
+
36
36
  assert File.exists?(File.join(repository_dir('git'),'.git'))
37
37
  end
38
38
  end
@@ -220,7 +220,13 @@ module Externals
220
220
  #freeze it to a revision
221
221
  Ext.run "freeze", subproject, revision
222
222
  Dir.chdir File.join("vendor",'plugins', subproject) do
223
- assert `git show HEAD` =~ /^\s*commit\s*#{revision}\s*$/i
223
+ regex = /^\s*commit\s*#{revision}\s*$/i
224
+ output = `git show HEAD`
225
+ result = output =~ regex
226
+ unless result
227
+ puts "Expecting output to match #{regex} but it was: #{output}"
228
+ end
229
+ assert result
224
230
  end
225
231
 
226
232
  SvnProject.add_all
@@ -0,0 +1,136 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if $0 == __FILE__
2
+ require 'externals/test_case'
3
+ require 'externals/ext'
4
+
5
+ module Externals
6
+ class TestProjects < TestCase
7
+ include ExtTestCase
8
+
9
+ def test_svn_global_opts
10
+ Dir.chdir File.join(root_dir, 'test') do
11
+ `rm -rf test_svn_global_opts`
12
+ `mkdir test_svn_global_opts`
13
+
14
+
15
+ Dir.chdir 'test_svn_global_opts' do
16
+ open '.externals', 'w' do |f|
17
+ f.write "[.]
18
+ scm = git
19
+ type = rails
20
+
21
+ [vendor/plugins/acts_as_list]
22
+ scm = git
23
+ repository = git://github.com/rails/acts_as_list.git
24
+ branch = edge
25
+
26
+ [vendor/plugins/foreign_key_migrations]
27
+ scm = svn
28
+ repository = svn://rubyforge.org/var/svn/redhillonrails/trunk/vendor/plugins/foreign_key_migrations
29
+ "
30
+ end
31
+
32
+ #test no scm_opts set...
33
+
34
+ ext = Ext.new
35
+
36
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts, nil
37
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts_co, nil
38
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts_up, nil
39
+ assert_equal ext.main_project.scm_opts, nil
40
+ assert_equal ext.main_project.scm_opts_co, nil
41
+ assert_equal ext.main_project.scm_opts_up, nil
42
+ assert_equal ext.main_project.git_opts, nil
43
+ assert_equal ext.main_project.svn_opts, nil
44
+ assert_equal ext.main_project.git_opts_up, nil
45
+ assert_equal ext.main_project.svn_opts_up, nil
46
+
47
+
48
+ open '.externals', 'w' do |f|
49
+ f.write "[.]
50
+ scm = git
51
+ type = rails
52
+
53
+ [vendor/plugins/acts_as_list]
54
+ scm_opts = --verbose
55
+ scm = git
56
+ repository = git://github.com/rails/acts_as_list.git
57
+ branch = edge
58
+
59
+ [vendor/plugins/foreign_key_migrations]
60
+ scm_opts = --trust-server-cert --non-interactive
61
+ scm = svn
62
+ repository = svn://rubyforge.org/var/svn/redhillonrails/trunk/vendor/plugins/foreign_key_migrations
63
+ "
64
+ end
65
+
66
+ #test scm_opts set... no _co, _up, etc.
67
+
68
+ ext = Ext.new
69
+
70
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts, "--verbose"
71
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts_co, "--verbose"
72
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts_up, "--verbose"
73
+ assert_equal ext.subproject_by_name_or_path('foreign_key_migrations').scm_opts,
74
+ "--trust-server-cert --non-interactive"
75
+ assert_equal ext.subproject_by_name_or_path('foreign_key_migrations').scm_opts_co,
76
+ "--trust-server-cert --non-interactive"
77
+ assert_equal ext.subproject_by_name_or_path('foreign_key_migrations').scm_opts_up,
78
+ "--trust-server-cert --non-interactive"
79
+ assert_equal ext.main_project.scm_opts, nil
80
+ assert_equal ext.main_project.scm_opts_co, nil
81
+ assert_equal ext.main_project.scm_opts_up, nil
82
+ assert_equal ext.main_project.git_opts, nil
83
+ assert_equal ext.main_project.svn_opts, nil
84
+ assert_equal ext.main_project.git_opts_up, nil
85
+ assert_equal ext.main_project.svn_opts_up, nil
86
+
87
+ #test global options and specific action options
88
+ open '.externals', 'w' do |f|
89
+ f.write "[.]
90
+ scm = git
91
+ type = rails
92
+ svn_opts = --trust-server-cert
93
+ svn_opts_up = --svn-up
94
+ git_opts = --verbose
95
+ scm_opts = --main-project-opts
96
+
97
+ [vendor/plugins/acts_as_list]
98
+ scm_opts_up = --made-up-option
99
+ scm = git
100
+ repository = git://github.com/rails/acts_as_list.git
101
+ branch = edge
102
+
103
+ [vendor/plugins/foreign_key_migrations]
104
+ scm_opts_co = --non-interactive
105
+ scm = svn
106
+ repository = svn://rubyforge.org/var/svn/redhillonrails/trunk/vendor/plugins/foreign_key_migrations
107
+ "
108
+ end
109
+
110
+ ext = Ext.new
111
+
112
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts, "--verbose"
113
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts_co, "--verbose"
114
+ assert_equal ext.subproject_by_name_or_path('acts_as_list').scm_opts_up,
115
+ "--made-up-option --verbose"
116
+ assert_equal ext.subproject_by_name_or_path('foreign_key_migrations').scm_opts,
117
+ "--trust-server-cert"
118
+ assert_equal ext.subproject_by_name_or_path('foreign_key_migrations').scm_opts_co,
119
+ "--non-interactive --trust-server-cert"
120
+ assert_equal ext.subproject_by_name_or_path('foreign_key_migrations').scm_opts_up,
121
+ "--svn-up --trust-server-cert"
122
+ assert_equal ext.main_project.scm_opts, "--main-project-opts --verbose"
123
+ assert_equal ext.main_project.scm_opts_co, "--main-project-opts --verbose"
124
+ assert_equal ext.main_project.scm_opts_up, "--main-project-opts --verbose"
125
+ assert_equal ext.main_project.git_opts, "--verbose"
126
+ assert_equal ext.main_project.svn_opts, "--trust-server-cert"
127
+ assert_equal ext.main_project.git_opts_up, "--verbose"
128
+ assert_equal ext.main_project.svn_opts_up, "--svn-up --trust-server-cert"
129
+
130
+
131
+ `rm -rf test_svn_global_opts`
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ext
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 8
9
- version: 0.1.8
4
+ prerelease:
5
+ version: 1.0.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - Miles Georgi
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-02-17 00:00:00 -08:00
13
+ date: 2011-03-29 00:00:00 -07:00
18
14
  default_executable: ext
19
15
  dependencies: []
20
16
 
@@ -83,6 +79,7 @@ files:
83
79
  - test/test_freeze_to_revision.rb
84
80
  - test/test_checkout_with_subprojects_git.rb
85
81
  - test/test_touch_emptydirs.rb
82
+ - test/test_projects.rb
86
83
  - bin/ext
87
84
  has_rdoc: true
88
85
  homepage: http://nopugs.com/ext-tutorial
@@ -98,21 +95,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
95
  requirements:
99
96
  - - ">="
100
97
  - !ruby/object:Gem::Version
101
- segments:
102
- - 0
103
98
  version: "0"
104
99
  required_rubygems_version: !ruby/object:Gem::Requirement
105
100
  none: false
106
101
  requirements:
107
102
  - - ">="
108
103
  - !ruby/object:Gem::Version
109
- segments:
110
- - 0
111
104
  version: "0"
112
105
  requirements: []
113
106
 
114
107
  rubyforge_project: ext
115
- rubygems_version: 1.3.7
108
+ rubygems_version: 1.5.0
116
109
  signing_key:
117
110
  specification_version: 3
118
111
  summary: Provides an SCM agnostic way to manage subprojects with a workflow similar to the svn:externals feature of subversion. It's particularly useful for rails projects that have some plugins managed by svn and some managed by git.
@@ -128,3 +121,4 @@ test_files:
128
121
  - test/test_freeze_to_revision.rb
129
122
  - test/test_checkout_with_subprojects_git.rb
130
123
  - test/test_touch_emptydirs.rb
124
+ - test/test_projects.rb