winton-externals 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +10 -0
- data/bin/externals +1 -1
- data/externals.gemspec +4 -1
- data/lib/externals/app.rb +11 -9
- data/lib/externals/repository.rb +1 -0
- data/lib/externals/yaml_config.rb +2 -2
- data/spec/bin/externals_spec.rb +100 -0
- data/spec/lib/app_spec.rb +63 -0
- data/spec/lib/yaml_config_spec.rb +20 -0
- metadata +4 -1
data/README.markdown
CHANGED
@@ -19,6 +19,9 @@ Create *config/externals.yml*:
|
|
19
19
|
pa_stats:
|
20
20
|
repo: git@github.com:br/pa_stats.git
|
21
21
|
path: vendor/gems
|
22
|
+
acts_as_archive:
|
23
|
+
repo: git@github.com:winton/acts_as_archive.git
|
24
|
+
path: vendor/plugins
|
22
25
|
</pre>
|
23
26
|
|
24
27
|
Freeze or unfreeze
|
@@ -31,6 +34,13 @@ externals freeze
|
|
31
34
|
externals unfreeze
|
32
35
|
</pre>
|
33
36
|
|
37
|
+
If you only want to freeze one of the items in config/externals.yml
|
38
|
+
|
39
|
+
<pre>
|
40
|
+
externals freeze acts_as_archive
|
41
|
+
externals unfreeze acts_as_archive
|
42
|
+
</pre>
|
43
|
+
|
34
44
|
The usual flow is to unfreeze, commit to the external, freeze, and commit to the parent project.
|
35
45
|
|
36
46
|
Your .git directories will be zipped and stored in /tmp when frozen, and moved back to the external when unfrozen.
|
data/bin/externals
CHANGED
data/externals.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'externals'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.6'
|
4
4
|
s.date = '2008-03-12'
|
5
5
|
|
6
6
|
s.summary = "Work on git externals without affecting others"
|
@@ -25,6 +25,9 @@ Gem::Specification.new do |s|
|
|
25
25
|
lib/externals/app.rb
|
26
26
|
lib/externals/repository.rb
|
27
27
|
lib/externals/yaml_config.rb
|
28
|
+
spec/bin/externals_spec.rb
|
29
|
+
spec/lib/app_spec.rb
|
30
|
+
spec/lib/yaml_config_spec.rb
|
28
31
|
spec/spec.opts
|
29
32
|
spec/spec_helper.rb
|
30
33
|
]
|
data/lib/externals/app.rb
CHANGED
@@ -4,24 +4,26 @@ module Externals
|
|
4
4
|
@base_dir = base_dir
|
5
5
|
end
|
6
6
|
|
7
|
-
def status
|
8
|
-
config.each_repo {|r| r.status }
|
7
|
+
def status(filtr = nil)
|
8
|
+
config.each_repo(filtr) {|r| r.status }
|
9
9
|
end
|
10
|
+
alias_method :st, :status
|
10
11
|
|
11
|
-
def freeze
|
12
|
-
config.each_repo {|r| r.freeze }
|
12
|
+
def freeze(filtr = nil)
|
13
|
+
config.each_repo(filtr) {|r| r.freeze }
|
13
14
|
end
|
14
15
|
|
15
|
-
def unfreeze
|
16
|
-
config.each_repo {|r| r.unfreeze }
|
16
|
+
def unfreeze(filtr = nil)
|
17
|
+
config.each_repo(filtr) {|r| r.unfreeze }
|
17
18
|
end
|
18
19
|
|
19
|
-
def run(action)
|
20
|
+
def run(action, filtr_str = nil)
|
20
21
|
available_actions = %w(status freeze unfreeze)
|
21
22
|
if available_actions.include?(action)
|
22
|
-
|
23
|
+
filtr = Regexp.new(filtr_str) if filtr_str
|
24
|
+
send(action, filtr)
|
23
25
|
else
|
24
|
-
puts "Usage: externals (#{available_actions.join(':')})"
|
26
|
+
puts "Usage: externals (#{available_actions.join(':')}) optional_regex_string"
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
data/lib/externals/repository.rb
CHANGED
@@ -7,8 +7,8 @@ module Externals
|
|
7
7
|
@config_hash = YAML.load yaml_string
|
8
8
|
end
|
9
9
|
|
10
|
-
def each_repo
|
11
|
-
repositories.each { |r| yield(r) if block_given? }
|
10
|
+
def each_repo(filtr = nil)
|
11
|
+
repositories.each { |r| yield(r) if block_given? and (!filtr or filtr.match(r.name)) }
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
@@ -0,0 +1,100 @@
|
|
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
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
module Externals
|
4
|
+
describe App do
|
5
|
+
before(:each) do
|
6
|
+
@app = App.new("some_fake_dir")
|
7
|
+
@mock_config = stub("config", :null_object => true)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "loading the config file" do
|
11
|
+
before(:each) do
|
12
|
+
File.stub!(:file?).and_return(true)
|
13
|
+
File.stub!(:read).and_return("yaml config")
|
14
|
+
YamlConfig.stub!(:new).and_return(@mock_config)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should look for config/externals.yml" do
|
18
|
+
File.should_receive(:file?).with(/some_fake_dir\/config\/externals\.yml/)
|
19
|
+
@app.config
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should look for .externals.yml if externals.yml does not exist" do
|
23
|
+
File.should_receive(:file?).with(/some_fake_dir\/config\/externals\.yml/).and_return(false)
|
24
|
+
File.should_receive(:file?).with(/some_fake_dir\/\.externals\.yml/).and_return(true)
|
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)
|
31
|
+
@app.config
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should create a config from the config file" do
|
35
|
+
YamlConfig.should_receive(:new).with('some_fake_dir', "yaml config").and_return(@mock_config)
|
36
|
+
@app.config
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "app actions" do
|
41
|
+
before(:each) do
|
42
|
+
@app.stub!(:config).and_return(@mock_config)
|
43
|
+
@mock_repo = mock("repo")
|
44
|
+
@mock_config.stub!(:each_repo).and_yield(@mock_repo)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should give the status of each of the repositories" do
|
48
|
+
@mock_repo.should_receive(:status)
|
49
|
+
@app.status
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should freeze each of the repositories" do
|
53
|
+
@mock_repo.should_receive(:freezify)
|
54
|
+
@app.freezify
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should unfreeze each of the repositories" do
|
58
|
+
@mock_repo.should_receive(:unfreezify)
|
59
|
+
@app.unfreezify
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,20 @@
|
|
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
|
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.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Winton Welsh
|
@@ -32,6 +32,9 @@ files:
|
|
32
32
|
- lib/externals/app.rb
|
33
33
|
- lib/externals/repository.rb
|
34
34
|
- lib/externals/yaml_config.rb
|
35
|
+
- spec/bin/externals_spec.rb
|
36
|
+
- spec/lib/app_spec.rb
|
37
|
+
- spec/lib/yaml_config_spec.rb
|
35
38
|
- spec/spec.opts
|
36
39
|
- spec/spec_helper.rb
|
37
40
|
has_rdoc: false
|