winton-externals 0.1.6 → 1.0.0
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.
- data/Rakefile +41 -24
- data/externals.gemspec +27 -33
- data/lib/externals/app.rb +25 -27
- data/lib/externals/repository.rb +38 -36
- data/lib/externals/yaml_config.rb +23 -10
- data/spec/{lib → externals}/app_spec.rb +13 -17
- data/spec/externals/repository_spec.rb +141 -0
- data/spec/externals/yaml_config_spec.rb +44 -0
- data/spec/spec_helper.rb +8 -2
- metadata +18 -14
- data/changelog.markdown +0 -3
- data/spec/bin/externals_spec.rb +0 -100
- data/spec/lib/yaml_config_spec.rb +0 -20
data/Rakefile
CHANGED
@@ -1,31 +1,48 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'rake'
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
require 'spec/rake/spectask'
|
2
5
|
|
3
|
-
|
6
|
+
GEM_NAME = 'externals'
|
7
|
+
PKG_FILES = FileList['**/*'] - FileList['coverage', 'coverage/**/*', 'pkg', 'pkg/**/*']
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
# piece file back together and write...
|
19
|
-
parts[1] = " s.files = %w[\n#{files}\n ]\n"
|
20
|
-
spec = parts.join(" # = MANIFEST =\n")
|
21
|
-
File.open(f.name, 'w') { |io| io.write(spec) }
|
22
|
-
puts "Updated #{f.name}"
|
9
|
+
spec = Gem::Specification.new do |s|
|
10
|
+
s.author = "Winton Welsh"
|
11
|
+
s.email = "mail@wintoni.us"
|
12
|
+
s.executables << GEM_NAME
|
13
|
+
s.extra_rdoc_files = [ "README.markdown" ]
|
14
|
+
s.files = PKG_FILES.to_a
|
15
|
+
s.has_rdoc = false
|
16
|
+
s.homepage = "http://github.com/winton/#{GEM_NAME}"
|
17
|
+
s.name = GEM_NAME
|
18
|
+
s.platform = Gem::Platform::RUBY
|
19
|
+
s.require_path = "lib"
|
20
|
+
s.summary = "Work on git externals without affecting others"
|
21
|
+
s.version = "1.0.0"
|
23
22
|
end
|
24
23
|
|
25
|
-
|
24
|
+
desc "Package gem"
|
25
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
26
|
+
pkg.gem_spec = spec
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "Install gem"
|
26
30
|
task :install do
|
27
|
-
|
28
|
-
`gem
|
29
|
-
`sudo gem install
|
30
|
-
`rm
|
31
|
+
Rake::Task['gem'].invoke
|
32
|
+
`sudo gem uninstall #{GEM_NAME} -x`
|
33
|
+
`sudo gem install pkg/#{GEM_NAME}*.gem`
|
34
|
+
`rm -Rf pkg`
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Generate gemspec"
|
38
|
+
task :gemspec do
|
39
|
+
File.open("#{File.dirname(__FILE__)}/#{GEM_NAME}.gemspec", 'w') do |f|
|
40
|
+
f.write(spec.to_ruby)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "Run specs"
|
45
|
+
Spec::Rake::SpecTask.new do |t|
|
46
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
47
|
+
t.spec_files = FileList["spec/**/*_spec.rb"]
|
31
48
|
end
|
data/externals.gemspec
CHANGED
@@ -1,35 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
1
3
|
Gem::Specification.new do |s|
|
2
|
-
s.name
|
3
|
-
s.version =
|
4
|
-
|
5
|
-
|
6
|
-
s.
|
7
|
-
s.
|
8
|
-
|
9
|
-
s.
|
10
|
-
s.email = 'mail@wintoni.us'
|
11
|
-
s.homepage = 'http://github.com/winton/externals'
|
12
|
-
|
4
|
+
s.name = %q{externals}
|
5
|
+
s.version = "1.0.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Winton Welsh"]
|
9
|
+
s.date = %q{2009-04-27}
|
10
|
+
s.default_executable = %q{externals}
|
11
|
+
s.email = %q{mail@wintoni.us}
|
13
12
|
s.executables = ["externals"]
|
14
|
-
s.
|
15
|
-
|
16
|
-
|
17
|
-
s.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
spec/spec.opts
|
32
|
-
spec/spec_helper.rb
|
33
|
-
]
|
34
|
-
# = MANIFEST =
|
35
|
-
end
|
13
|
+
s.extra_rdoc_files = ["README.markdown"]
|
14
|
+
s.files = ["bin", "bin/externals", "externals.gemspec", "lib", "lib/externals", "lib/externals/app.rb", "lib/externals/repository.rb", "lib/externals/yaml_config.rb", "lib/externals.rb", "MIT-LICENSE", "Rakefile", "README.markdown", "spec", "spec/externals", "spec/externals/app_spec.rb", "spec/externals/repository_spec.rb", "spec/externals/yaml_config_spec.rb", "spec/spec.opts", "spec/spec_helper.rb"]
|
15
|
+
s.homepage = %q{http://github.com/winton/externals}
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubygems_version = %q{1.3.1}
|
18
|
+
s.summary = %q{Work on git externals without affecting others}
|
19
|
+
|
20
|
+
if s.respond_to? :specification_version then
|
21
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
22
|
+
s.specification_version = 2
|
23
|
+
|
24
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
25
|
+
else
|
26
|
+
end
|
27
|
+
else
|
28
|
+
end
|
29
|
+
end
|
data/lib/externals/app.rb
CHANGED
@@ -1,44 +1,42 @@
|
|
1
1
|
module Externals
|
2
2
|
class App
|
3
|
+
|
3
4
|
def initialize(base_dir)
|
4
5
|
@base_dir = base_dir
|
5
6
|
end
|
6
|
-
|
7
|
-
def
|
8
|
-
config
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
config.each_repo(filtr) {|r| r.freeze }
|
7
|
+
|
8
|
+
def config
|
9
|
+
return @config if @config
|
10
|
+
config_path = ['config/externals.yml', '.externals.yml'].detect do |file|
|
11
|
+
File.exists? File.expand_path(@base_dir + '/' + file)
|
12
|
+
end
|
13
|
+
@config = YamlConfig.new(@base_dir, config_path)
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
config.each_repo(
|
16
|
+
def freeze(filter = nil)
|
17
|
+
config.each_repo(filter) { |r| r.freeze }
|
18
18
|
end
|
19
19
|
|
20
|
-
def run(action,
|
21
|
-
available_actions = %w(status freeze unfreeze)
|
20
|
+
def run(action, filter_str = nil)
|
21
|
+
available_actions = %w(st status fr freeze un unfreeze)
|
22
22
|
if available_actions.include?(action)
|
23
|
-
|
24
|
-
send(action,
|
23
|
+
filter = Regexp.new(filter_str) if filter_str
|
24
|
+
send(action, filter)
|
25
25
|
else
|
26
26
|
puts "Usage: externals (#{available_actions.join(':')}) optional_regex_string"
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
config_file = ['config/externals.yml', '.externals.yml'].detect do |file|
|
34
|
-
File.file? File.expand_path(@base_dir + '/' + file)
|
35
|
-
end
|
36
|
-
|
37
|
-
if config_file.nil?
|
38
|
-
$stderr.puts "config/externals.yml is missing"
|
39
|
-
else
|
40
|
-
@config = YamlConfig.new(@base_dir, File.read(config_file))
|
41
|
-
end
|
29
|
+
|
30
|
+
def status(filter = nil)
|
31
|
+
config.each_repo(filter) { |r| r.status }
|
42
32
|
end
|
33
|
+
|
34
|
+
def unfreeze(filter = nil)
|
35
|
+
config.each_repo(filter) { |r| r.unfreeze }
|
36
|
+
end
|
37
|
+
|
38
|
+
alias_method :fr, :freeze
|
39
|
+
alias_method :st, :status
|
40
|
+
alias_method :un, :unfreeze
|
43
41
|
end
|
44
42
|
end
|
data/lib/externals/repository.rb
CHANGED
@@ -3,27 +3,19 @@ require 'fileutils'
|
|
3
3
|
module Externals
|
4
4
|
class Repository
|
5
5
|
|
6
|
+
attr_reader :name
|
7
|
+
|
6
8
|
def initialize(base_dir, name, repo_url, rel_path)
|
7
9
|
@base_dir = base_dir
|
8
10
|
@name = name
|
9
11
|
@repo_url = repo_url
|
10
12
|
@rel_path = rel_path
|
11
13
|
end
|
12
|
-
attr_reader :name
|
13
14
|
|
14
|
-
def
|
15
|
-
|
16
|
-
unless File.exist?(checkout_path)
|
17
|
-
FileUtils.mkdir_p(checkout_path)
|
18
|
-
end
|
19
|
-
Dir.chdir(checkout_path) do
|
20
|
-
# Remove repository if exists
|
21
|
-
FileUtils.rm_rf(@name)
|
22
|
-
# Clone repository
|
23
|
-
`git clone #{@repo_url} #{@name}`
|
24
|
-
end
|
15
|
+
def exists?
|
16
|
+
File.exist?(repo_path)
|
25
17
|
end
|
26
|
-
|
18
|
+
|
27
19
|
def freeze
|
28
20
|
install unless exists?
|
29
21
|
if is_not_a_git_repo?
|
@@ -40,7 +32,7 @@ module Externals
|
|
40
32
|
# Make temp directory
|
41
33
|
FileUtils.mkdir_p(temp_path)
|
42
34
|
# Compress .git folder to temp
|
43
|
-
`tar czf #{temp_path}/#{@name}.git.tgz .git`
|
35
|
+
`tar czf #{temp_path}/#{@name}.git.tgz .git` unless $TESTING
|
44
36
|
end
|
45
37
|
# Remove repository's .git folder
|
46
38
|
FileUtils.rm_r('.git')
|
@@ -49,6 +41,35 @@ module Externals
|
|
49
41
|
end
|
50
42
|
end
|
51
43
|
|
44
|
+
def install
|
45
|
+
# Create directory that we will clone into
|
46
|
+
unless File.exist?(checkout_path)
|
47
|
+
FileUtils.mkdir_p(checkout_path)
|
48
|
+
end
|
49
|
+
Dir.chdir(checkout_path) do
|
50
|
+
# Remove repository if exists
|
51
|
+
FileUtils.rm_rf(@name)
|
52
|
+
# Clone repository
|
53
|
+
`git clone #{@repo_url} #{@name}` unless $TESTING
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def is_a_git_repo?
|
58
|
+
File.exist?("#{repo_path}/.git")
|
59
|
+
end
|
60
|
+
|
61
|
+
def is_not_a_git_repo?
|
62
|
+
!is_a_git_repo?
|
63
|
+
end
|
64
|
+
|
65
|
+
def is_compressed?
|
66
|
+
File.exists?("#{temp_path}/#{@name}.git.tgz")
|
67
|
+
end
|
68
|
+
|
69
|
+
def is_not_compressed?
|
70
|
+
!is_compressed?
|
71
|
+
end
|
72
|
+
|
52
73
|
def status
|
53
74
|
if exists?
|
54
75
|
puts "#{@name} is #{is_a_git_repo? ? "not frozen" : "frozen and #{is_compressed? ? "has" : "does not have"} a snapshot"}"
|
@@ -67,7 +88,7 @@ module Externals
|
|
67
88
|
if is_compressed?
|
68
89
|
Dir.chdir(temp_path) do
|
69
90
|
# Decompress git snapshot
|
70
|
-
`tar xzf #{@name}.git.tgz`
|
91
|
+
`tar xzf #{@name}.git.tgz` unless $TESTING
|
71
92
|
# Move back to repo
|
72
93
|
FileUtils.mv(".git", repo_path)
|
73
94
|
# Remove snapshot
|
@@ -75,7 +96,7 @@ module Externals
|
|
75
96
|
end
|
76
97
|
# Reset repository to snapshot
|
77
98
|
Dir.chdir(repo_path) do
|
78
|
-
`git reset --hard`
|
99
|
+
`git reset --hard` unless $TESTING
|
79
100
|
end
|
80
101
|
else
|
81
102
|
# Clone fresh repo if no snapshot found
|
@@ -84,28 +105,9 @@ module Externals
|
|
84
105
|
puts "#{@name} unfrozen"
|
85
106
|
end
|
86
107
|
end
|
87
|
-
|
88
|
-
def exists?
|
89
|
-
File.exist?(repo_path)
|
90
|
-
end
|
91
|
-
|
92
|
-
def is_a_git_repo?
|
93
|
-
File.exist?("#{repo_path}/.git")
|
94
|
-
end
|
95
|
-
|
96
|
-
def is_not_a_git_repo?
|
97
|
-
!is_a_git_repo?
|
98
|
-
end
|
99
|
-
|
100
|
-
def is_compressed?
|
101
|
-
File.exists?("#{temp_path}/#{@name}.git.tgz")
|
102
|
-
end
|
103
|
-
|
104
|
-
def is_not_compressed?
|
105
|
-
!is_compressed?
|
106
|
-
end
|
107
108
|
|
108
109
|
private
|
110
|
+
|
109
111
|
def checkout_path
|
110
112
|
File.expand_path(File.join(@base_dir, @rel_path))
|
111
113
|
end
|
@@ -2,19 +2,32 @@ require 'yaml'
|
|
2
2
|
|
3
3
|
module Externals
|
4
4
|
class YamlConfig
|
5
|
-
|
5
|
+
|
6
|
+
attr_reader :repositories
|
7
|
+
|
8
|
+
def initialize(base_dir, config_path)
|
6
9
|
@base_dir = base_dir
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
if config_path && File.exists?(config_path)
|
11
|
+
config = YAML.load(File.read(config_path))
|
12
|
+
@repositories = config.map do |name, attributes|
|
13
|
+
Repository.new(
|
14
|
+
@base_dir,
|
15
|
+
name,
|
16
|
+
attributes["repo"],
|
17
|
+
attributes["path"]
|
18
|
+
)
|
19
|
+
end
|
20
|
+
else
|
21
|
+
$stderr.puts "config/externals.yml is missing"
|
22
|
+
@repositories = []
|
23
|
+
end
|
12
24
|
end
|
13
25
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
26
|
+
def each_repo(filter = nil)
|
27
|
+
repositories.each do |r|
|
28
|
+
if block_given? and (!filter or filter.match(r.name))
|
29
|
+
yield(r)
|
30
|
+
end
|
18
31
|
end
|
19
32
|
end
|
20
33
|
end
|
@@ -1,43 +1,39 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
3
|
module Externals
|
4
|
-
describe App do
|
4
|
+
describe Externals::App do
|
5
|
+
|
5
6
|
before(:each) do
|
6
7
|
@app = App.new("some_fake_dir")
|
7
8
|
@mock_config = stub("config", :null_object => true)
|
8
9
|
end
|
9
10
|
|
10
11
|
describe "loading the config file" do
|
12
|
+
|
11
13
|
before(:each) do
|
12
|
-
File.stub!(:
|
13
|
-
File.stub!(:read).and_return("yaml config")
|
14
|
+
File.stub!(:exists?).and_return(true)
|
14
15
|
YamlConfig.stub!(:new).and_return(@mock_config)
|
15
16
|
end
|
16
17
|
|
17
18
|
it "should look for config/externals.yml" do
|
18
|
-
File.should_receive(:
|
19
|
+
File.should_receive(:exists?).with(/some_fake_dir\/config\/externals\.yml/)
|
19
20
|
@app.config
|
20
21
|
end
|
21
22
|
|
22
23
|
it "should look for .externals.yml if externals.yml does not exist" do
|
23
|
-
File.should_receive(:
|
24
|
-
File.should_receive(:
|
25
|
-
@app.config
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should exit with an error when no config file exists" do
|
29
|
-
File.stub!(:file?).and_return(false)
|
30
|
-
$stderr.should_receive(:puts)
|
24
|
+
File.should_receive(:exists?).with(/some_fake_dir\/config\/externals\.yml/).and_return(false)
|
25
|
+
File.should_receive(:exists?).with(/some_fake_dir\/\.externals\.yml/).and_return(true)
|
31
26
|
@app.config
|
32
27
|
end
|
33
28
|
|
34
29
|
it "should create a config from the config file" do
|
35
|
-
YamlConfig.should_receive(:new).with('some_fake_dir', "
|
30
|
+
YamlConfig.should_receive(:new).with('some_fake_dir', "config/externals.yml").and_return(@mock_config)
|
36
31
|
@app.config
|
37
32
|
end
|
38
33
|
end
|
39
34
|
|
40
35
|
describe "app actions" do
|
36
|
+
|
41
37
|
before(:each) do
|
42
38
|
@app.stub!(:config).and_return(@mock_config)
|
43
39
|
@mock_repo = mock("repo")
|
@@ -50,13 +46,13 @@ module Externals
|
|
50
46
|
end
|
51
47
|
|
52
48
|
it "should freeze each of the repositories" do
|
53
|
-
@mock_repo.should_receive(:
|
54
|
-
@app.
|
49
|
+
@mock_repo.should_receive(:freeze)
|
50
|
+
@app.freeze
|
55
51
|
end
|
56
52
|
|
57
53
|
it "should unfreeze each of the repositories" do
|
58
|
-
@mock_repo.should_receive(:
|
59
|
-
@app.
|
54
|
+
@mock_repo.should_receive(:unfreeze)
|
55
|
+
@app.unfreeze
|
60
56
|
end
|
61
57
|
end
|
62
58
|
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
module Externals
|
4
|
+
describe Externals::Repository do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@stdout = $stdout
|
8
|
+
$stdout = StringIO.new
|
9
|
+
@repo = Repository.new("/", "tmp", "git://", "/")
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:each) do
|
13
|
+
$stdout = @stdout
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "freeze" do
|
17
|
+
|
18
|
+
before(:each) do
|
19
|
+
@repo.stub!(:exists?).and_return(false)
|
20
|
+
@repo.stub!(:install)
|
21
|
+
@repo.stub!(:is_not_a_git_repo?)
|
22
|
+
@repo.stub!(:is_a_git_repo?).and_return(true)
|
23
|
+
@repo.stub!(:is_compressed?).and_return(true)
|
24
|
+
STDIN.stub!(:gets).and_return('y')
|
25
|
+
FileUtils.stub!(:mkdir_p)
|
26
|
+
FileUtils.stub!(:rm_r)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should install the repository if it does not exist" do
|
30
|
+
@repo.should_receive(:install)
|
31
|
+
@repo.freeze
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should display a message if the repository is already frozen" do
|
35
|
+
@repo.stub!(:is_not_a_git_repo?).and_return(true)
|
36
|
+
@repo.freeze
|
37
|
+
$stdout.string.include?("already frozen").should == true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should ask if the compressed file should be overwritten if exists" do
|
41
|
+
@repo.stub!(:is_not_a_git_repo?).and_return(false)
|
42
|
+
@repo.freeze
|
43
|
+
$stdout.string.include?("Overwrite?").should == true
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should remove the repository's .git file" do
|
47
|
+
FileUtils.should_receive(:rm_r).with('.git')
|
48
|
+
@repo.freeze
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "install" do
|
53
|
+
|
54
|
+
before(:each) do
|
55
|
+
File.stub!(:exist?)
|
56
|
+
FileUtils.stub!(:mkdir_p)
|
57
|
+
FileUtils.stub!(:rm_f)
|
58
|
+
end
|
59
|
+
|
60
|
+
after(:each) do
|
61
|
+
@repo.install
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should create the checkout path if does not exist" do
|
65
|
+
File.should_receive(:exist?).and_return(false)
|
66
|
+
FileUtils.should_receive(:mkdir_p)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should remove repository if exists" do
|
70
|
+
FileUtils.should_receive(:rm_rf)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "unfreeze" do
|
75
|
+
|
76
|
+
before(:each) do
|
77
|
+
@repo.stub!(:is_a_git_repo?)
|
78
|
+
@repo.stub!(:exists?)
|
79
|
+
@repo.stub!(:install)
|
80
|
+
@repo.stub!(:is_not_a_git_repo?)
|
81
|
+
@repo.stub!(:is_compressed?)
|
82
|
+
FileUtils.stub!(:mv)
|
83
|
+
FileUtils.stub!(:rm_f)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should display a message if the repository is already unfrozen" do
|
87
|
+
@repo.should_receive(:is_a_git_repo?).and_return(true)
|
88
|
+
@repo.unfreeze
|
89
|
+
$stdout.string.include?("already unfrozen").should == true
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should install the repository if it does not exist" do
|
93
|
+
@repo.should_receive(:exists?).and_return(false)
|
94
|
+
@repo.should_receive(:install)
|
95
|
+
@repo.unfreeze
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should display a message after the install" do
|
99
|
+
@repo.should_receive(:is_a_git_repo?).and_return(false)
|
100
|
+
@repo.should_receive(:exists?).and_return(false)
|
101
|
+
@repo.unfreeze
|
102
|
+
$stdout.string.include?("unfrozen").should == true
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should move the uncompressed .git directory back to the repo if compressed file exists" do
|
106
|
+
@repo.should_receive(:is_a_git_repo?).and_return(false)
|
107
|
+
@repo.should_receive(:exists?).and_return(true)
|
108
|
+
@repo.should_receive(:is_not_a_git_repo?).and_return(true)
|
109
|
+
@repo.should_receive(:is_compressed?).and_return(true)
|
110
|
+
FileUtils.should_receive(:mv)
|
111
|
+
@repo.unfreeze
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should remove the snapshot if compressed file exists" do
|
115
|
+
@repo.should_receive(:is_a_git_repo?).and_return(false)
|
116
|
+
@repo.should_receive(:exists?).and_return(true)
|
117
|
+
@repo.should_receive(:is_not_a_git_repo?).and_return(true)
|
118
|
+
@repo.should_receive(:is_compressed?).and_return(true)
|
119
|
+
FileUtils.should_receive(:rm_f)
|
120
|
+
@repo.unfreeze
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should install the repository if no snapshot found" do
|
124
|
+
@repo.should_receive(:is_a_git_repo?).and_return(false)
|
125
|
+
@repo.should_receive(:exists?).and_return(true)
|
126
|
+
@repo.should_receive(:is_not_a_git_repo?).and_return(true)
|
127
|
+
@repo.should_receive(:is_compressed?).and_return(false)
|
128
|
+
@repo.should_receive(:install)
|
129
|
+
@repo.unfreeze
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should display a message when finished" do
|
133
|
+
@repo.should_receive(:is_a_git_repo?).and_return(false)
|
134
|
+
@repo.should_receive(:exists?).and_return(true)
|
135
|
+
@repo.should_receive(:is_not_a_git_repo?).and_return(true)
|
136
|
+
@repo.unfreeze
|
137
|
+
$stdout.string.include?("unfrozen").should == true
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
module Externals
|
4
|
+
describe Externals::YamlConfig do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@rspec = mock("rspec")
|
8
|
+
@foo = mock("foo")
|
9
|
+
@rspec.stub!(:name).and_return('rspec')
|
10
|
+
@foo.stub!(:name).and_return('foo')
|
11
|
+
File.stub!(:read).and_return(
|
12
|
+
"rspec:\n repo: git://rspec\n path: vendor/plugins\n" +
|
13
|
+
"foo:\n repo: git://at/foo\n path: path/to/foo\n"
|
14
|
+
)
|
15
|
+
Repository.stub!(:new).and_return(@rspec)
|
16
|
+
Repository.stub!(:new).and_return(@foo)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should create repositories" do
|
20
|
+
File.stub!(:exists?).and_return(true)
|
21
|
+
Repository.should_receive(:new).with(
|
22
|
+
"base_dir", "rspec", "git://rspec", "vendor/plugins"
|
23
|
+
)
|
24
|
+
Repository.should_receive(:new).with(
|
25
|
+
"base_dir", "foo", "git://at/foo", "path/to/foo"
|
26
|
+
)
|
27
|
+
config = YamlConfig.new("base_dir", "config/externals.yml")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should allow repository iteration" do
|
31
|
+
File.stub!(:exists?).and_return(true)
|
32
|
+
config = YamlConfig.new("base_dir", "config/externals.yml")
|
33
|
+
config.each_repo { |r| [ @rspec, @foo ].include?(r).should == true }
|
34
|
+
config.each_repo('r') { |r| r.should == @rspec }
|
35
|
+
config.each_repo('f') { |r| r.should == @foo }
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should error if config doesn't exist" do
|
39
|
+
File.stub!(:exists?).and_return(false)
|
40
|
+
$stderr.should_receive(:puts)
|
41
|
+
config = YamlConfig.new('base_dir', 'config/externals.yml')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: winton-externals
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Winton Welsh
|
@@ -9,32 +9,36 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
13
|
-
default_executable:
|
12
|
+
date: 2009-04-27 00:00:00 -07:00
|
13
|
+
default_executable: externals
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
16
|
+
description:
|
17
17
|
email: mail@wintoni.us
|
18
18
|
executables:
|
19
19
|
- externals
|
20
20
|
extensions: []
|
21
21
|
|
22
|
-
extra_rdoc_files:
|
23
|
-
|
24
|
-
files:
|
25
|
-
- MIT-LICENSE
|
22
|
+
extra_rdoc_files:
|
26
23
|
- README.markdown
|
27
|
-
|
24
|
+
files:
|
25
|
+
- bin
|
28
26
|
- bin/externals
|
29
|
-
- changelog.markdown
|
30
27
|
- externals.gemspec
|
31
|
-
- lib
|
28
|
+
- lib
|
29
|
+
- lib/externals
|
32
30
|
- lib/externals/app.rb
|
33
31
|
- lib/externals/repository.rb
|
34
32
|
- lib/externals/yaml_config.rb
|
35
|
-
-
|
36
|
-
-
|
37
|
-
-
|
33
|
+
- lib/externals.rb
|
34
|
+
- MIT-LICENSE
|
35
|
+
- Rakefile
|
36
|
+
- README.markdown
|
37
|
+
- spec
|
38
|
+
- spec/externals
|
39
|
+
- spec/externals/app_spec.rb
|
40
|
+
- spec/externals/repository_spec.rb
|
41
|
+
- spec/externals/yaml_config_spec.rb
|
38
42
|
- spec/spec.opts
|
39
43
|
- spec/spec_helper.rb
|
40
44
|
has_rdoc: false
|
data/changelog.markdown
DELETED
data/spec/bin/externals_spec.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
-
|
3
|
-
describe :externals do
|
4
|
-
before(:all) do
|
5
|
-
@stdout = $stdout
|
6
|
-
$stdout = StringIO.new
|
7
|
-
# Test $stdout.string
|
8
|
-
end
|
9
|
-
|
10
|
-
after(:all) do
|
11
|
-
$stdout = @stdout
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "help" do
|
15
|
-
it "should show a help message with no input" do
|
16
|
-
run
|
17
|
-
$stdout.string.should match(/Usage: externals/)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "status" do
|
22
|
-
it "should tell the user if the repository exists" do
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should tell the user if the repository is frozen" do
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should tell the user if a snapshot exists" do
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "freeze" do
|
33
|
-
describe "on a non-existent repository" do
|
34
|
-
it "should clone a new repository" do
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "on a frozen repository" do
|
39
|
-
it "should tell the user the repository is already frozen" do
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "on an unfrozen repository" do
|
44
|
-
it "should make the temp directory if it does not exist" do
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should compress the repository's .git folder to the temp directory" do
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should remove the repository's .git folder" do
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "when a snapshot exists" do
|
54
|
-
it "should ask the user if the user wants to overwrite the snapshot" do
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should not overwrite if the user says no" do
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "unfreeze" do
|
64
|
-
describe "on a frozen repository" do
|
65
|
-
it "should tell the user the repository is already unfrozen" do
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe "on a non-existent repository" do
|
70
|
-
it "should clone the repository" do
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe "on a frozen repository" do
|
75
|
-
describe "that has a snapshot" do
|
76
|
-
it "should decompress the snapshot" do
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should move the snapshot back to the repository" do
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should remove the snapshot" do
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should reset the repository" do
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
describe "that does not have a snapshot" do
|
90
|
-
it "should clone a new repository" do
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def run(action=nil)
|
97
|
-
app = Externals::App.new(FileUtils.pwd)
|
98
|
-
app.run(action)
|
99
|
-
end
|
100
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
-
|
3
|
-
module Externals
|
4
|
-
describe YamlConfig do
|
5
|
-
it "should create repositories from the config" do
|
6
|
-
config = YamlConfig.new(
|
7
|
-
'base_dir',
|
8
|
-
"rspec:\n repo: git://rspec\n path: vendor/plugins\n" +
|
9
|
-
"foo:\n repo: git://at/foo\n path: path/to/foo\n"
|
10
|
-
)
|
11
|
-
Repository.should_receive(:new).with(
|
12
|
-
'base_dir', "rspec", "git://rspec", "vendor/plugins"
|
13
|
-
).and_return :a_repo
|
14
|
-
Repository.should_receive(:new).with(
|
15
|
-
'base_dir', "foo", "git://at/foo", "path/to/foo"
|
16
|
-
).and_return :a_repo
|
17
|
-
config.each_repo { |r| r.should == :a_repo }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|