dotty 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -24,7 +24,6 @@ You can symlink stuff to sub directories of ~ by using the in+subdir directory n
24
24
  dotfiles/in+.ssh/config => ~/.ssh/config
25
25
  dotfiles/in+a/in+b/c => ~/a/b/c
26
26
 
27
-
28
27
  ### dotty-symlinks.yml
29
28
 
30
29
  If you want more control over the symlinking, you can create a dotty-symlink.yml in the repo root.
@@ -62,6 +61,8 @@ The class must be named "DottyRepository".
62
61
  * ruby (tested on 1.9.2) and rubygems
63
62
  * git (the git executable must be in your $PATH)
64
63
 
64
+ ### Commands
65
+
65
66
  $ dotty (or dottie if you have graphviz installed which has a dotty executable)
66
67
 
67
68
  Tasks:
@@ -69,7 +70,7 @@ The class must be named "DottyRepository".
69
70
  dotty bootstrap [name] # Bootstrap specified or all dotty repositories. Usually involves making symlinks in your home dir.
70
71
  dotty create <name> <git repo url> # Create a new git repository with the specified git repo url as origin
71
72
  dotty create_profile <profile name> # Create a new profile
72
- dotty execute [repo name] <command to run> # For specified or all repositories, run given command
73
+ dotty execute <command to run> [repo name] # For specified or all repositories, run given command
73
74
  dotty help [TASK] # Describe available tasks or one specific task
74
75
  dotty implode [name] # Opposite of bootstrap
75
76
  dotty import_repos <yaml_file_location> # Imports dotty repositories from the specified yaml file location (http works)
@@ -109,3 +110,4 @@ The class must be named "DottyRepository".
109
110
 
110
111
  Released under the LGPL License. See the LICENSE file for further details.
111
112
 
113
+
data/Rakefile CHANGED
@@ -1,2 +1,6 @@
1
1
  require 'bundler'
2
+ require 'rspec/core/rake_task'
2
3
  Bundler::GemHelper.install_tasks
4
+ RSpec::Core::RakeTask.new do |t|
5
+ t.rspec_opts = %w(--color)
6
+ end
data/lib/dotty/app.rb CHANGED
@@ -62,17 +62,18 @@ module Dotty
62
62
  end
63
63
 
64
64
  desc "update_submodules [name]", "For specified or all repositories, for submodules and pull"
65
- method_options :push => false
66
- method_options :commit => true
67
65
  method_options :ignoredirty => false
66
+ method_options %w(commit_message -m) => "Updated submodules"
67
+ method_options :commit => true
68
+ method_options :push => true
68
69
  def update_submodules(repo_name=nil)
69
70
  for_specified_or_all_repos(repo_name) do |repo|
70
71
  actions.invoke :update_submodules, [repo], options
71
72
  end
72
73
  end
73
74
 
74
- desc "execute [repo name] <command to run>", "For specified or all repositories, run given command"
75
- def execute(repo_name=nil, command)
75
+ desc "execute <command to run> [repo name]", "For specified or all repositories, run given command"
76
+ def execute(command, repo_name=nil)
76
77
  for_specified_or_all_repos(repo_name) do |repo|
77
78
  inside repo.local_path do
78
79
  run command
@@ -130,11 +131,12 @@ module Dotty
130
131
  protected
131
132
 
132
133
  def find_repo!(name)
133
- Repository.find(name.downcase) || raise(RepositoryNotFoundError, "The specified repository does not exist")
134
+ name.downcase!
135
+ Repository.find(name) || raise(RepositoryNotFoundError, "Repository '#{name}' does not exist")
134
136
  end
135
137
 
136
138
  def actions
137
- @actions ||= RepositoryActions.new
139
+ RepositoryActions.new
138
140
  end
139
141
 
140
142
  def for_specified_or_all_repos(repo_name=nil)
@@ -84,10 +84,9 @@ module Dotty
84
84
  method_options :ignoredirty => false
85
85
  method_options %w(commit_message -m) => "Updated submodules"
86
86
  method_options :commit => true
87
- method_options :push => false
87
+ method_options :push => true
88
88
  def update_submodules(repo)
89
- say "update submodules", repo.name, :blue
90
-
89
+ say_status "update submodules", repo.name, :blue
91
90
  inside repo.local_path do
92
91
  cmd = []
93
92
  cmd << "git submodule update --init"
@@ -99,8 +98,8 @@ module Dotty
99
98
  else
100
99
  raise Dotty::Error, "Repository '#{repo.name}' is not in a clean state - cannot commit updated submodules"
101
100
  end
101
+ options[:push] && cmd << "git push"
102
102
  end
103
- options[:push] && cmd << "git push"
104
103
  run cmd.join(" && ")
105
104
  end
106
105
  end
data/lib/dotty/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dotty
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/spec/app_spec.rb CHANGED
@@ -2,6 +2,12 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
 
4
4
  describe Dotty::App do
5
+
6
+ before do
7
+ @actions = Dotty::RepositoryActions.new
8
+ subject.stub(:actions).and_return(@actions)
9
+ end
10
+
5
11
  describe "#add" do
6
12
  it "should invoke Dotty::Repository.add" do
7
13
  name = 'repo'
@@ -53,19 +59,19 @@ describe Dotty::App do
53
59
  include_context "two in memory repositories"
54
60
 
55
61
  before do
56
- subject.send(:actions).stub!(:update)
62
+ @actions.stub!(:update)
57
63
  end
58
64
 
59
65
  it "should invoke update action with the specified repo" do
60
- subject.send(:actions).should_receive(:update).with(@repo1).once
66
+ @actions.should_receive(:update).with(@repo1).once
61
67
  suppress_output do
62
68
  subject.update 'repo1name'
63
69
  end
64
70
  end
65
71
 
66
72
  it "should invoke update action for all repos if no repo is specified" do
67
- subject.send(:actions).should_receive(:update).with(@repo1).once
68
- subject.send(:actions).should_receive(:update).with(@repo2).once
73
+ @actions.should_receive(:update).with(@repo1).once
74
+ @actions.should_receive(:update).with(@repo2).once
69
75
  suppress_output do
70
76
  subject.update
71
77
  end
@@ -76,19 +82,19 @@ describe Dotty::App do
76
82
  include_context "two in memory repositories"
77
83
 
78
84
  before do
79
- subject.send(:actions).stub!(:bootstrap)
85
+ @actions.stub!(:bootstrap)
80
86
  end
81
87
 
82
88
  it "should invoke bootstrap action with the specified repo" do
83
- subject.send(:actions).should_receive(:bootstrap).with(@repo1).once
89
+ @actions.should_receive(:bootstrap).with(@repo1).once
84
90
  suppress_output do
85
91
  subject.bootstrap 'repo1name'
86
92
  end
87
93
  end
88
94
 
89
95
  it "should invoke bootstrap action for all repos if no repo is specified" do
90
- subject.send(:actions).should_receive(:bootstrap).with(@repo1).once
91
- subject.send(:actions).should_receive(:bootstrap).with(@repo2).once
96
+ @actions.should_receive(:bootstrap).with(@repo1).once
97
+ @actions.should_receive(:bootstrap).with(@repo2).once
92
98
  suppress_output do
93
99
  subject.bootstrap
94
100
  end
@@ -99,19 +105,19 @@ describe Dotty::App do
99
105
  include_context "two in memory repositories"
100
106
 
101
107
  before do
102
- subject.send(:actions).stub!(:implode)
108
+ @actions.stub!(:implode)
103
109
  end
104
110
 
105
111
  it "should invoke implode action with the specified repo" do
106
- subject.send(:actions).should_receive(:implode).with(@repo1).once
112
+ @actions.should_receive(:implode).with(@repo1).once
107
113
  suppress_output do
108
114
  subject.implode 'repo1name'
109
115
  end
110
116
  end
111
117
 
112
118
  it "should invoke implode action for all repos if no repo is specified" do
113
- subject.send(:actions).should_receive(:implode).with(@repo1).once
114
- subject.send(:actions).should_receive(:implode).with(@repo2).once
119
+ @actions.should_receive(:implode).with(@repo1).once
120
+ @actions.should_receive(:implode).with(@repo2).once
115
121
  suppress_output do
116
122
  subject.implode
117
123
  end
@@ -131,7 +137,7 @@ describe Dotty::App do
131
137
  end
132
138
  subject.should_receive(:run).once.with('ls')
133
139
  suppress_output do
134
- subject.execute @repo1.name, 'ls'
140
+ subject.execute 'ls', @repo1.name
135
141
  end
136
142
  end
137
143
 
@@ -169,7 +175,7 @@ describe Dotty::App do
169
175
  it "should raise an exception when the given repository does not exist" do
170
176
  expect {
171
177
  subject.send(:find_repo!, 'nonexistant')
172
- }.to raise_error Dotty::RepositoryNotFoundError, "The specified repository does not exist"
178
+ }.to raise_error Dotty::RepositoryNotFoundError, "Repository 'nonexistant' does not exist"
173
179
  end
174
180
  end
175
181
 
@@ -177,11 +183,6 @@ describe Dotty::App do
177
183
  it "should return an instance of Dotty::RepositoryActions" do
178
184
  subject.send(:actions).should be_kind_of Dotty::RepositoryActions
179
185
  end
180
-
181
- it "should cache it" do
182
- app = subject
183
- app.send(:actions).should == app.send(:actions)
184
- end
185
186
  end
186
187
 
187
188
  describe "#for_specified_or_all_repos" do
@@ -148,19 +148,27 @@ describe Dotty::RepositoryActions do
148
148
 
149
149
  before do
150
150
  # TODO: Find a better way of testing thor invocations with options
151
- @default_method_options = { :commit => true, :commit_message => 'Updated submodules' }
151
+ @default_method_options = { :commit => true, :commit_message => 'Updated submodules', :push => true }
152
152
  @actions.stub!(:options).and_return(@default_method_options)
153
153
  @actions.stub!(:run).and_return("")
154
154
  end
155
155
 
156
- it "should by default update pull submodules and commit changes to the dotty repository" do
157
- @actions.should_receive(:run).once.with("git submodule update --init && git submodule foreach git pull origin master && git commit -am 'Updated submodules'")
156
+ it "should by default update pull submodules and commit+push changes to the dotty repository" do
157
+ @actions.should_receive(:run).once.with("git submodule update --init && git submodule foreach git pull origin master && git commit -am 'Updated submodules' && git push")
158
158
  suppress_output do
159
159
  @actions.update_submodules @repo
160
160
  end
161
161
  end
162
162
 
163
- it "should not commit if commit option is false" do
163
+ it "should use the specified commit message" do
164
+ @actions.stub!(:options).and_return @default_method_options.merge(:push => true, :commit_message => 'My message')
165
+ @actions.should_receive(:run).once.with(/git commit -am 'My message'/)
166
+ suppress_output do
167
+ @actions.update_submodules @repo
168
+ end
169
+ end
170
+
171
+ it "should not commit or push if commit option is false" do
164
172
  @actions.stub!(:options).and_return @default_method_options.merge(:commit => false)
165
173
  @actions.should_receive(:run).once.with('git submodule update --init && git submodule foreach git pull origin master')
166
174
  suppress_output do
@@ -168,14 +176,22 @@ describe Dotty::RepositoryActions do
168
176
  end
169
177
  end
170
178
 
171
- it "should push if push option is true" do
172
- @actions.stub!(:options).and_return @default_method_options.merge(:push => true)
179
+ it "should push by default" do
180
+ @actions.stub!(:options).and_return @default_method_options
173
181
  @actions.should_receive(:run).once.with(/git push/)
174
182
  suppress_output do
175
183
  @actions.update_submodules @repo
176
184
  end
177
185
  end
178
186
 
187
+ it "should not push if push option is false" do
188
+ @actions.stub!(:options).and_return @default_method_options.merge(:push => false)
189
+ @actions.should_not_receive(:run).with(/git push/)
190
+ suppress_output do
191
+ @actions.update_submodules @repo
192
+ end
193
+ end
194
+
179
195
  it "should raise error if the repository is not in a clean state" do
180
196
  @actions.stub!(:run).and_return("?? dirty")
181
197
  expect {
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: dotty
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Trym Skaar
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-03 00:00:00 +02:00
13
+ date: 2011-05-11 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency