ext 1.0.7 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/CHANGELOG +3 -0
  2. data/README +12 -12
  3. data/Rakefile +1 -1
  4. data/lib/externals/ext.rb +35 -43
  5. data/test/test_checkout_git.rb +3 -3
  6. data/test/test_checkout_with_subprojects_git.rb +3 -3
  7. data/test/test_checkout_with_subprojects_svn.rb +3 -3
  8. data/test/test_file_utils_extensions.rb +2 -2
  9. data/test/test_freeze_to_revision.rb +37 -5
  10. data/test/test_git_project_extract_name.rb +2 -2
  11. data/test/test_init_git.rb +3 -3
  12. data/test/test_out_of_date_git_subproject.rb +3 -3
  13. data/test/test_projects.rb +2 -2
  14. data/test/test_rails_detection.rb +3 -3
  15. data/test/test_string_extensions.rb +2 -2
  16. data/test/test_svn_branches.rb +3 -3
  17. data/test/test_touch_emptydirs.rb +2 -2
  18. data/test/test_version.rb +2 -2
  19. metadata +4 -22
  20. data/lib/externals/test/basic_git_repository.rb +0 -57
  21. data/lib/externals/test/engines.rb +0 -11
  22. data/lib/externals/test/engines_with_branch1.rb +0 -36
  23. data/lib/externals/test/fake_rails_repository.rb +0 -112
  24. data/lib/externals/test/git_repository.rb +0 -15
  25. data/lib/externals/test/git_repository_from_internet.rb +0 -20
  26. data/lib/externals/test/modules_svn_branches_repository.rb +0 -72
  27. data/lib/externals/test/modules_svn_repository.rb +0 -41
  28. data/lib/externals/test/rails_app_git_branches.rb +0 -109
  29. data/lib/externals/test/rails_app_git_repository.rb +0 -66
  30. data/lib/externals/test/rails_app_svn_branches.rb +0 -132
  31. data/lib/externals/test/rails_app_svn_repository.rb +0 -106
  32. data/lib/externals/test/rails_app_unmanaged.rb +0 -25
  33. data/lib/externals/test/repository.rb +0 -186
  34. data/lib/externals/test/simple_git_with_sub.rb +0 -72
  35. data/lib/externals/test/svn_repository_from_dump.rb +0 -27
  36. data/lib/externals/test/svn_repository_helper.rb +0 -10
  37. data/lib/externals/test_case.rb +0 -54
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ July 20, 2012 Version 1.10 released
2
+ - unfreeze feature added.
3
+
1
4
  July 17, 2012 Version 1.0.7 released
2
5
  - Fixes a bug that removes the branch from the .externals configuration
3
6
  file when freezing a subproject managed by subversion.
data/README CHANGED
@@ -18,14 +18,15 @@ The externals executable is called ext. Commands come in a long form and a
18
18
  short form. The longer form applies the action to the main project. The short
19
19
  forms apply the action to all sub projects.
20
20
 
21
- The commands and usage are as follows (from 'ext help'):
22
21
  There's a tutorial available at http://nopugs.com/ext-tutorial
23
22
 
23
+ The commands and usage are as follows (from 'ext help'):
24
+
24
25
  ext [OPTIONS] <command> [repository] [-b <branch>] [path]
25
- -g, --git same as '--scm git' Uses git to checkout/export the
26
- main project
27
26
  --svn, --subversion same as '--scm svn' Uses subversion to
28
27
  checkout/export the main project
28
+ -g, --git same as '--scm git' Uses git to checkout/export the
29
+ main project
29
30
  -t, --type TYPE The type of project the main project is. For example,
30
31
  'rails'.
31
32
  -s, --scm SCM The SCM used to manage the main project. For example,
@@ -50,16 +51,15 @@ ext [OPTIONS] <command> [repository] [-b <branch>] [path]
50
51
 
51
52
 
52
53
  Commands that apply to the main project or the .externals file:
53
- freeze, help, init, install, switch, touch_emptydirs, uninstall, update_ignore, version
54
-
55
- freeze Usage: ext freeze project [REVISION]
54
+ freeze, help, init, install, switch, touch_emptydirs, unfreeze, uninstall, update_ignore, version
56
55
 
56
+ freeze Usage: ext freeze <subproject> [REVISION]
57
57
  Locks a subproject into a specific revision/branch. If no
58
58
  revision is supplied, the current revision/branch of the
59
- project will be used. You can specify the project by name
59
+ project will be used. You can specify the subproject by name
60
60
  or path.
61
61
 
62
- help You probably just ran this command just now.
62
+ help It helps. Hopefully.
63
63
 
64
64
  init Creates a .externals file containing only [main]
65
65
  It will try to determine the SCM used by the main project,
@@ -85,6 +85,10 @@ touch_emptydirs Recurses through all directories from the
85
85
  comes across. Useful for dealing with SCMs that refuse to
86
86
  track empty directories (such as git, for example)
87
87
 
88
+ unfreeze Usage: ext unfreeze <subproject>
89
+ Unfreezes a previously frozen subproject. You can specify
90
+ the subproject by name or path.
91
+
88
92
  uninstall Usage: ext uninstall [-f|--force_removal] <project>
89
93
  Removes a subproject from being tracked by ext. If you
90
94
  want the files associated with this subproject deleted as well
@@ -105,22 +109,18 @@ Commands that apply to the main project and all subprojects:
105
109
  checkout, export, status, update
106
110
 
107
111
  checkout Usage: ext checkout <repository>
108
-
109
112
  Checks out <repository>, and checks out any subprojects
110
113
  registered in <repository>'s .externals file.
111
114
 
112
115
  export Usage: ext export <repository>
113
-
114
116
  Like checkout except this command fetches as little
115
117
  history as possible.
116
118
 
117
119
  status Usage: ext status
118
-
119
120
  Prints out the status of the main project, followed by
120
121
  the status of each subproject.
121
122
 
122
123
  update Usage: ext update
123
-
124
124
  Brings the main project, and all subprojects, up to the
125
125
  latest version.
126
126
 
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ $LOAD_PATH << File.join(root_dir, 'lib')
11
11
  require File.join(root_dir, 'lib', 'externals', 'ext')
12
12
 
13
13
  Rake::TestTask.new('test') do |task|
14
- task.libs = [File.expand_path('lib'),File.expand_path('test')]
14
+ task.libs = [File.expand_path('lib'),File.expand_path('test/support')]
15
15
  task.pattern = './test/test_*.rb'
16
16
  #task.warning = true
17
17
  end
@@ -9,24 +9,24 @@ Dir.entries(File.join(File.dirname(__FILE__), 'extensions')).each do |extension|
9
9
  end
10
10
 
11
11
  module Externals
12
- VERSION = '1.0.7'
12
+ VERSION = '1.1.0'
13
13
  PROJECT_TYPES_DIRECTORY = File.join(File.dirname(__FILE__), '..', 'externals','project_types')
14
14
 
15
15
  # Full commands operate on the main project as well as the externals
16
16
  # short commands only operate on the externals
17
17
  # Main commands only operate on the main project
18
18
  FULL_COMMANDS_HASH = [
19
- [:checkout, "ext checkout <repository>", %{
20
- Checks out <repository>, and checks out any subprojects
19
+ [:checkout, "ext checkout <repository>",
20
+ %{Checks out <repository>, and checks out any subprojects
21
21
  registered in <repository>'s .externals file.}],
22
- [:export, "ext export <repository>", %{
23
- Like checkout except this command fetches as little
22
+ [:export, "ext export <repository>",
23
+ %{Like checkout except this command fetches as little
24
24
  history as possible.}],
25
- [:status, "ext status", %{
26
- Prints out the status of the main project, followed by
25
+ [:status, "ext status",
26
+ %{Prints out the status of the main project, followed by
27
27
  the status of each subproject.}],
28
- [:update, "ext update", %{
29
- Brings the main project, and all subprojects, up to the
28
+ [:update, "ext update",
29
+ %{Brings the main project, and all subprojects, up to the
30
30
  latest version.}]
31
31
  ]
32
32
  SHORT_COMMANDS_HASH = [
@@ -37,10 +37,10 @@ module Externals
37
37
  [:up, "Like update, but skips the main project."]
38
38
  ]
39
39
  MAIN_COMMANDS_HASH = [
40
- [:freeze, "ext freeze project [REVISION]", %{
41
- Locks a subproject into a specific revision/branch. If no
40
+ [:freeze, "ext freeze <subproject> [REVISION]",
41
+ %{Locks a subproject into a specific revision/branch. If no
42
42
  revision is supplied, the current revision/branch of the
43
- project will be used. You can specify the project by name
43
+ project will be used. You can specify the subproject by name
44
44
  or path.}],
45
45
  [:help, "You probably just ran this command just now."],
46
46
  [:init, "Creates a .externals file containing only [main]
@@ -63,6 +63,9 @@ module Externals
63
63
  top and adds a .emptydir file to any empty directories it
64
64
  comes across. Useful for dealing with SCMs that refuse to
65
65
  track empty directories (such as git, for example)"],
66
+ [:unfreeze, "ext unfreeze <subproject>",
67
+ %{Unfreezes a previously frozen subproject. You can specify
68
+ the subproject by name or path.}],
66
69
  [:uninstall, "ext uninstall [-f|--force_removal] <project>",
67
70
  "Removes a subproject from being tracked by ext. If you
68
71
  want the files associated with this subproject deleted as well
@@ -110,8 +113,6 @@ module Externals
110
113
  end
111
114
  end
112
115
 
113
- #puts "Project types available: #{project_types.join(' ')}"
114
-
115
116
  def self.project_type_files
116
117
  project_types.map do |project_type|
117
118
  "#{File.join(PROJECT_TYPES_DIRECTORY, project_type)}.rb"
@@ -312,7 +313,6 @@ module Externals
312
313
  scm = configuration['.']
313
314
  scm = scm['scm'] if scm
314
315
  scm ||= options[:scm]
315
- #scm ||= infer_scm(repository)
316
316
 
317
317
  type = configuration['.']
318
318
  type = type['type'] if type
@@ -342,18 +342,6 @@ Please use
342
342
  Externals.module_eval("#{scm.to_s.cap_first}Project", __FILE__, __LINE__)
343
343
  end
344
344
 
345
- def self.project_classes
346
- retval = []
347
- registered_scms.each do |scm|
348
- retval << project_class(scm)
349
- end
350
-
351
- retval
352
- end
353
- def self.project_class(scm)
354
- Externals.module_eval("#{scm.to_s.cap_first}Project", __FILE__, __LINE__)
355
- end
356
-
357
345
  def self.project_classes
358
346
  retval = []
359
347
  registered_scms.each do |scm|
@@ -409,6 +397,25 @@ Please use
409
397
  subproject_by_name_or_path(args[0]).up
410
398
  end
411
399
 
400
+ def unfreeze args, options
401
+ project = subproject_by_name_or_path(args[0])
402
+
403
+ raise "No such project named #{args[0]}" unless project
404
+
405
+ section = configuration[project.path]
406
+
407
+ unless section[:revision]
408
+ puts "Uhh... #{project.name} wasn't frozen, so I can't unfreeze it."
409
+ exit
410
+ end
411
+
412
+ section.rm_setting :revision
413
+ configuration.write '.externals'
414
+ reload_configuration
415
+
416
+ subproject_by_name_or_path(args[0]).up
417
+ end
418
+
412
419
  def install args, options
413
420
  if !File.exists? '.externals'
414
421
  STDERR.puts "This project does not appear to be managed by externals. Try 'ext init' first"
@@ -454,7 +461,6 @@ that you are installing. Use an option to specify it
454
461
  end
455
462
 
456
463
  def uninstall args, options
457
- #init args, options unless File.exists? '.externals'
458
464
  raise "Hmm... there's no .externals file in this directory." if !File.exists? '.externals'
459
465
 
460
466
  project = subproject_by_name_or_path(args[0])
@@ -476,9 +482,6 @@ that you are installing. Use an option to specify it
476
482
  end
477
483
 
478
484
  def update_ignore args, options
479
- #path = args[0]
480
-
481
-
482
485
  scm = configuration['.']
483
486
  scm = scm['scm'] if scm
484
487
 
@@ -494,9 +497,7 @@ that you are installing. Use an option to specify it
494
497
  raise "only makes sense for main project" unless project.main_project?
495
498
 
496
499
  subprojects.each do |subproject|
497
- #puts "about to add #{subproject.path} to ignore"
498
500
  project.update_ignore subproject.path
499
- #puts "finished adding #{subproject.path}"
500
501
  end
501
502
  end
502
503
 
@@ -533,11 +534,7 @@ that you are installing. Use an option to specify it
533
534
 
534
535
  def status args, options
535
536
  options ||= {}
536
- #repository = "."
537
- #path = "."
538
- #main_project = nil
539
537
  scm = options[:scm]
540
- #scm ||= infer_scm(repository)
541
538
 
542
539
  if !scm
543
540
  scm ||= configuration['.']
@@ -565,7 +562,6 @@ by creating the .externals file manually"
565
562
  (such as --git or --svn)"
566
563
  end
567
564
 
568
- #main_project = self.class.project_class(scm).new("#{repository} #{path}", :is_main)
569
565
  project = main_project
570
566
  project.scm ||= scm
571
567
  project.st
@@ -639,9 +635,7 @@ commands below if you actually wish to delete them."
639
635
 
640
636
  def update args, options
641
637
  options ||= {}
642
- #repository = args[0]
643
638
  scm = options[:scm]
644
- #scm ||= infer_scm(repository)
645
639
 
646
640
  if !scm
647
641
  scm ||= configuration['.']
@@ -653,7 +647,6 @@ commands below if you actually wish to delete them."
653
647
  (such as --git or --svn)"
654
648
  end
655
649
 
656
- #main_project = self.class.project_class(scm).new("#{repository} #{path}", :is_main)
657
650
  project = main_project
658
651
  project.scm ||= scm
659
652
  project.up
@@ -737,7 +730,7 @@ Please use the --type option to tell ext which to use."
737
730
 
738
731
  config.add_empty_section '.'
739
732
 
740
- # If we are using subversion, we should warn about not setting a branch
733
+ # TODO: If we are using subversion, we should warn about not setting a branch
741
734
  if scm == "svn"
742
735
  if options[:branch]
743
736
  config['.'][:repository] = SvnProject.extract_repository(
@@ -746,7 +739,6 @@ Please use the --type option to tell ext which to use."
746
739
  )
747
740
  elsif args[0]
748
741
  config['.'][:repository] = args[0].strip
749
- else
750
742
  end
751
743
  end
752
744
 
@@ -1,11 +1,11 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if $0 == __FILE__
2
- require 'externals/test_case'
2
+ require 'ext_test_case'
3
3
  require 'externals/ext'
4
- require 'externals/test/basic_git_repository'
4
+ require 'basic_git_repository'
5
5
 
6
6
  module Externals
7
7
  module Test
8
- class TestCheckoutGit < TestCase
8
+ class TestCheckoutGit < ::Test::Unit::TestCase
9
9
  include ExtTestCase
10
10
 
11
11
  def test_checkout
@@ -1,11 +1,11 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if $0 == __FILE__
2
- require 'externals/test_case'
2
+ require 'ext_test_case'
3
3
  require 'externals/ext'
4
- require 'externals/test/rails_app_git_branches'
4
+ require 'rails_app_git_branches'
5
5
 
6
6
  module Externals
7
7
  module Test
8
- class TestCheckoutWithSubprojectsGit < TestCase
8
+ class TestCheckoutWithSubprojectsGit < ::Test::Unit::TestCase
9
9
  include ExtTestCase
10
10
 
11
11
  def test_checkout_with_subproject
@@ -1,12 +1,12 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if $0 == __FILE__
2
2
 
3
- require 'externals/test_case'
3
+ require 'ext_test_case'
4
4
  require 'externals/ext'
5
- require 'externals/test/rails_app_svn_repository'
5
+ require 'rails_app_svn_repository'
6
6
 
7
7
  module Externals
8
8
  module Test
9
- class TestCheckoutWithSubprojectsSvn < TestCase
9
+ class TestCheckoutWithSubprojectsSvn < ::Test::Unit::TestCase
10
10
  include ExtTestCase
11
11
 
12
12
  def test_checkout_with_subproject
@@ -1,11 +1,11 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__),'..','lib') if $0 == __FILE__
2
2
 
3
- require 'externals/test_case'
3
+ require 'ext_test_case'
4
4
  require 'externals/ext'
5
5
 
6
6
  module Externals
7
7
  module Test
8
- class TestFileUtilsExtensions < TestCase
8
+ class TestFileUtilsExtensions < ::Test::Unit::TestCase
9
9
  include ExtTestCase
10
10
 
11
11
  def test_dir_empty
@@ -1,13 +1,13 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if $0 == __FILE__
2
- require 'externals/test_case'
2
+ require 'ext_test_case'
3
3
  require 'externals/ext'
4
- require 'externals/test/rails_app_git_repository'
5
- require 'externals/test/basic_git_repository'
6
- require 'externals/test/modules_svn_branches_repository'
4
+ require 'rails_app_git_repository'
5
+ require 'basic_git_repository'
6
+ require 'modules_svn_branches_repository'
7
7
 
8
8
  module Externals
9
9
  module Test
10
- class TestFreezeToRevision < TestCase
10
+ class TestFreezeToRevision < ::Test::Unit::TestCase
11
11
  include ExtTestCase
12
12
 
13
13
  def test_freeze_to_revision
@@ -135,6 +135,38 @@ module Externals
135
135
 
136
136
  assert_equal subproject.current_branch, "branches/branch2"
137
137
  assert_equal subproject.current_revision, "3"
138
+
139
+ # now let's test unfreezing...
140
+ Ext.run "unfreeze", "modules"
141
+ assert_equal subproject.current_branch, "branches/branch2"
142
+ assert_equal subproject.current_revision, "4"
143
+
144
+ # Check it in to make sure it sticks
145
+ `git add .externals`
146
+ raise unless $? == 0
147
+ `git commit -m 'unfreezing modules'`
148
+ raise unless $? == 0
149
+ `git push`
150
+ raise unless $? == 0
151
+ end
152
+ end
153
+
154
+ rm_rf workdir
155
+ mkdir_p workdir
156
+
157
+ Dir.chdir workdir do
158
+ rm_r repository.name if File.exists? repository.name
159
+ source = repository.clean_dir
160
+
161
+ puts "About to checkout #{source}"
162
+ Ext.run "checkout", "--git", source
163
+
164
+ Dir.chdir repository.name do
165
+ ext = Ext.new
166
+ subproject = ext.subproject_by_name_or_path("modules")
167
+
168
+ assert_equal subproject.current_branch, "branches/branch2"
169
+ assert_equal subproject.current_revision, "4"
138
170
  end
139
171
  end
140
172
  end
@@ -1,11 +1,11 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if $0 == __FILE__
2
- require 'externals/test_case'
2
+ require 'ext_test_case'
3
3
  require 'externals/ext'
4
4
  require 'stringio'
5
5
 
6
6
  module Externals
7
7
  module Test
8
- class TestGitProjectExtractName < TestCase
8
+ class TestGitProjectExtractName < ::Test::Unit::TestCase
9
9
  include ExtTestCase
10
10
 
11
11
  def test_extract_name
@@ -1,11 +1,11 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if $0 == __FILE__
2
- require 'externals/test_case'
2
+ require 'ext_test_case'
3
3
  require 'externals/ext'
4
- require 'externals/test/basic_git_repository'
4
+ require 'basic_git_repository'
5
5
 
6
6
  module Externals
7
7
  module Test
8
- class TestInitGit < TestCase
8
+ class TestInitGit < ::Test::Unit::TestCase
9
9
  include ExtTestCase
10
10
 
11
11
  def test_init
@@ -1,11 +1,11 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if $0 == __FILE__
2
- require 'externals/test_case'
2
+ require 'ext_test_case'
3
3
  require 'externals/ext'
4
- require 'externals/test/simple_git_with_sub'
4
+ require 'simple_git_with_sub'
5
5
 
6
6
  module Externals
7
7
  module Test
8
- class TestOutOfDateGitSubproject < TestCase
8
+ class TestOutOfDateGitSubproject < ::Test::Unit::TestCase
9
9
  include ExtTestCase
10
10
 
11
11
  def test_out_of_date_sub