homesick 0.7.0 → 0.8.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.
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 1.8.7
@@ -1,3 +1,9 @@
1
+ # 0.8.0
2
+ * Introduce commit & push command
3
+ * commit changes in castle and push to remote
4
+ * Enable recursive submodule update
5
+ * Git add when track
6
+
1
7
  # 0.7.0
2
8
  * Fixed double-cloning #14
3
9
  * New option for pull command: --all
data/Gemfile CHANGED
@@ -6,10 +6,10 @@ gem "thor", ">= 0.14.0"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "rake"
10
- gem "rspec", "~> 2.1.0"
9
+ gem "rake", "~> 0.8.7"
10
+ gem "rspec", "~> 2.10"
11
11
  gem "jeweler", ">= 1.6.2"
12
- gem "rcov", ">= 0"
12
+ gem "rcov", :platforms => :mri_18
13
+ gem "simplecov", :platforms => :mri_19
13
14
  gem "test-construct"
14
- gem "ruby-debug"
15
15
  end
@@ -1,40 +1,42 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- columnize (0.3.2)
5
- diff-lcs (1.1.2)
4
+ diff-lcs (1.1.3)
6
5
  git (1.2.5)
7
- jeweler (1.6.2)
6
+ jeweler (1.8.3)
8
7
  bundler (~> 1.0)
9
8
  git (>= 1.2.5)
10
9
  rake
11
- linecache (0.43)
12
- rake (0.9.2)
13
- rcov (0.9.9)
14
- rspec (2.1.0)
15
- rspec-core (~> 2.1.0)
16
- rspec-expectations (~> 2.1.0)
17
- rspec-mocks (~> 2.1.0)
18
- rspec-core (2.1.0)
19
- rspec-expectations (2.1.0)
20
- diff-lcs (~> 1.1.2)
21
- rspec-mocks (2.1.0)
22
- ruby-debug (0.10.4)
23
- columnize (>= 0.1)
24
- ruby-debug-base (~> 0.10.4.0)
25
- ruby-debug-base (0.10.4)
26
- linecache (>= 0.3)
10
+ rdoc
11
+ json (1.7.3)
12
+ multi_json (1.3.6)
13
+ rake (0.8.7)
14
+ rcov (1.0.0)
15
+ rdoc (3.12)
16
+ json (~> 1.4)
17
+ rspec (2.10.0)
18
+ rspec-core (~> 2.10.0)
19
+ rspec-expectations (~> 2.10.0)
20
+ rspec-mocks (~> 2.10.0)
21
+ rspec-core (2.10.1)
22
+ rspec-expectations (2.10.0)
23
+ diff-lcs (~> 1.1.3)
24
+ rspec-mocks (2.10.1)
25
+ simplecov (0.6.4)
26
+ multi_json (~> 1.0)
27
+ simplecov-html (~> 0.5.3)
28
+ simplecov-html (0.5.3)
27
29
  test-construct (1.2.0)
28
- thor (0.14.6)
30
+ thor (0.15.2)
29
31
 
30
32
  PLATFORMS
31
33
  ruby
32
34
 
33
35
  DEPENDENCIES
34
36
  jeweler (>= 1.6.2)
35
- rake
37
+ rake (~> 0.8.7)
36
38
  rcov
37
- rspec (~> 2.1.0)
38
- ruby-debug
39
+ rspec (~> 2.10)
40
+ simplecov
39
41
  test-construct
40
42
  thor (>= 0.14.0)
@@ -33,6 +33,18 @@ If you're not sure what castles you have around, you can easily list them:
33
33
 
34
34
  homesick list
35
35
 
36
+ To pull your castle (or all castles):
37
+
38
+ homesick pull --all|CASTLE
39
+
40
+ To commit your castle's changes:
41
+
42
+ homesick commit CASTLE
43
+
44
+ To push your castle:
45
+
46
+ homesick push CASTLE
47
+
36
48
  Not sure what else homesick has up its sleeve? There's always the built in help:
37
49
 
38
50
  homesick help
data/Rakefile CHANGED
@@ -19,10 +19,10 @@ Jeweler::Tasks.new do |gem|
19
19
  Homesick is sorta like rip, but for dotfiles. It uses git to clone a repository containing dotfiles, and saves them in ~/.homesick. It then allows you to symlink all the dotfiles into place with a single command.
20
20
 
21
21
  }
22
- gem.email = "josh@technicalpickles.com"
22
+ gem.email = ["josh@technicalpickles.com", "info@muratayusuke.com"]
23
23
  gem.homepage = "http://github.com/technicalpickles/homesick"
24
- gem.authors = ["Joshua Nichols"]
25
- gem.version = "0.7.0"
24
+ gem.authors = ["Joshua Nichols", "Yusuke Murata"]
25
+ gem.version = "0.8.0"
26
26
  gem.license = "MIT"
27
27
  # Have dependencies? Add them to Gemfile
28
28
 
@@ -5,13 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "homesick"
8
- s.version = "0.7.0"
8
+ s.version = "0.8.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Joshua Nichols"]
12
- s.date = "2012-05-28"
11
+ s.authors = ["Joshua Nichols", "Yusuke Murata"]
12
+ s.date = "2013-04-05"
13
13
  s.description = "\n A man's home (directory) is his castle, so don't leave home with out it.\n\n Homesick is sorta like rip, but for dotfiles. It uses git to clone a repository containing dotfiles, and saves them in ~/.homesick. It then allows you to symlink all the dotfiles into place with a single command. \n\n "
14
- s.email = "josh@technicalpickles.com"
14
+ s.email = ["josh@technicalpickles.com", "info@muratayusuke.com"]
15
15
  s.executables = ["homesick"]
16
16
  s.extra_rdoc_files = [
17
17
  "ChangeLog.markdown",
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.files = [
22
22
  ".document",
23
23
  ".rspec",
24
+ ".travis.yml",
24
25
  "ChangeLog.markdown",
25
26
  "Gemfile",
26
27
  "Gemfile.lock",
@@ -39,7 +40,7 @@ Gem::Specification.new do |s|
39
40
  s.homepage = "http://github.com/technicalpickles/homesick"
40
41
  s.licenses = ["MIT"]
41
42
  s.require_paths = ["lib"]
42
- s.rubygems_version = "1.8.15"
43
+ s.rubygems_version = "1.8.24"
43
44
  s.summary = "A man's home is his castle. Never leave your dotfiles behind."
44
45
 
45
46
  if s.respond_to? :specification_version then
@@ -47,29 +48,29 @@ Gem::Specification.new do |s|
47
48
 
48
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
50
  s.add_runtime_dependency(%q<thor>, [">= 0.14.0"])
50
- s.add_development_dependency(%q<rake>, [">= 0"])
51
- s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
51
+ s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
52
+ s.add_development_dependency(%q<rspec>, ["~> 2.10"])
52
53
  s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
53
54
  s.add_development_dependency(%q<rcov>, [">= 0"])
55
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
54
56
  s.add_development_dependency(%q<test-construct>, [">= 0"])
55
- s.add_development_dependency(%q<ruby-debug>, [">= 0"])
56
57
  else
57
58
  s.add_dependency(%q<thor>, [">= 0.14.0"])
58
- s.add_dependency(%q<rake>, [">= 0"])
59
- s.add_dependency(%q<rspec>, ["~> 2.1.0"])
59
+ s.add_dependency(%q<rake>, ["~> 0.8.7"])
60
+ s.add_dependency(%q<rspec>, ["~> 2.10"])
60
61
  s.add_dependency(%q<jeweler>, [">= 1.6.2"])
61
62
  s.add_dependency(%q<rcov>, [">= 0"])
63
+ s.add_dependency(%q<simplecov>, [">= 0"])
62
64
  s.add_dependency(%q<test-construct>, [">= 0"])
63
- s.add_dependency(%q<ruby-debug>, [">= 0"])
64
65
  end
65
66
  else
66
67
  s.add_dependency(%q<thor>, [">= 0.14.0"])
67
- s.add_dependency(%q<rake>, [">= 0"])
68
- s.add_dependency(%q<rspec>, ["~> 2.1.0"])
68
+ s.add_dependency(%q<rake>, ["~> 0.8.7"])
69
+ s.add_dependency(%q<rspec>, ["~> 2.10"])
69
70
  s.add_dependency(%q<jeweler>, [">= 1.6.2"])
70
71
  s.add_dependency(%q<rcov>, [">= 0"])
72
+ s.add_dependency(%q<simplecov>, [">= 0"])
71
73
  s.add_dependency(%q<test-construct>, [">= 0"])
72
- s.add_dependency(%q<ruby-debug>, [">= 0"])
73
74
  end
74
75
  end
75
76
 
@@ -22,7 +22,7 @@ class Homesick < Thor
22
22
  destination = nil
23
23
  if File.exist?(uri)
24
24
  uri = Pathname.new(uri).expand_path
25
- if uri.to_s.start_with?(repos_dir)
25
+ if uri.to_s.start_with?(repos_dir.to_s)
26
26
  raise "Castle already cloned to #{uri}"
27
27
  end
28
28
 
@@ -32,7 +32,7 @@ class Homesick < Thor
32
32
  elsif uri =~ GITHUB_NAME_REPO_PATTERN
33
33
  destination = Pathname.new($1)
34
34
  git_clone "git://github.com/#{$1}.git", :destination => destination
35
- elsif uri =~ /\/([^\/]*)(\.git)?\Z/
35
+ elsif uri =~ /\/([^\/]*?)(\.git)?\Z/
36
36
  destination = Pathname.new($1)
37
37
  git_clone uri
38
38
  elsif uri =~ /[^:]+:([^:]+)(\.git)?\Z/
@@ -64,7 +64,7 @@ class Homesick < Thor
64
64
  end
65
65
  end
66
66
 
67
- desc "pull NAME", "Update the specified castle"
67
+ desc "pull CASTLE", "Update the specified castle"
68
68
  method_option :all, :type => :boolean, :default => false, :required => false, :desc => "Update all cloned castles"
69
69
  def pull(name="")
70
70
  if options[:all]
@@ -78,12 +78,25 @@ class Homesick < Thor
78
78
 
79
79
  end
80
80
 
81
- desc "symlink NAME", "Symlinks all dotfiles from the specified castle"
81
+ desc "commit CASTLE", "Commit the specified castle's changes"
82
+ def commit(name)
83
+ commit_castle name
84
+
85
+ end
86
+
87
+ desc "push CASTLE", "Push the specified castle"
88
+ def push(name)
89
+ push_castle name
90
+
91
+ end
92
+
93
+ desc "symlink CASTLE", "Symlinks all dotfiles from the specified castle"
94
+ method_option :force, :default => false, :desc => "Overwrite existing conflicting symlinks without prompting."
82
95
  def symlink(name)
83
96
  check_castle_existance(name, "symlink")
84
97
 
85
98
  inside castle_dir(name) do
86
- files = Pathname.glob('.*').reject{|a| [".",".."].include?(a.to_s)}
99
+ files = Pathname.glob('{.*,*}').reject{|a| [".",".."].include?(a.to_s)}
87
100
  files.each do |path|
88
101
  absolute_path = path.expand_path
89
102
 
@@ -101,7 +114,7 @@ class Homesick < Thor
101
114
  castle = Pathname.new(castle)
102
115
  file = Pathname.new(file)
103
116
  check_castle_existance(castle, 'track')
104
-
117
+
105
118
  absolute_path = file.expand_path
106
119
  castle_path = castle_dir(castle)
107
120
  mv absolute_path, castle_path
@@ -111,12 +124,16 @@ class Homesick < Thor
111
124
  home_path = home_dir + file
112
125
  ln_s absolute_path, home_path
113
126
  end
127
+
128
+ inside castle_path do
129
+ git_add absolute_path
130
+ end
114
131
  end
115
132
 
116
133
  desc "list", "List cloned castles"
117
134
  def list
118
135
  inside_each_castle do |castle|
119
- say_status castle.relative_path_from(repos_dir), `git config remote.origin.url`.chomp, :cyan
136
+ say_status castle.relative_path_from(repos_dir).to_s, `git config remote.origin.url`.chomp, :cyan
120
137
  end
121
138
  end
122
139
 
@@ -188,4 +205,18 @@ class Homesick < Thor
188
205
  git_submodule_update
189
206
  end
190
207
  end
208
+
209
+ def commit_castle(castle)
210
+ check_castle_existance(castle, "commit")
211
+ inside repos_dir.join(castle) do
212
+ git_commit_all
213
+ end
214
+ end
215
+
216
+ def push_castle(castle)
217
+ check_castle_existance(castle, "push")
218
+ inside repos_dir.join(castle) do
219
+ git_push
220
+ end
221
+ end
191
222
  end
@@ -4,7 +4,7 @@ class Homesick
4
4
  def git_clone(repo, config = {})
5
5
  config ||= {}
6
6
  destination = config[:destination] || begin
7
- repo =~ /([^\/]+)\.git$/
7
+ repo =~ /([^\/]+)(?:\.git)?$/
8
8
  $1
9
9
  end
10
10
 
@@ -51,7 +51,7 @@ class Homesick
51
51
 
52
52
  def git_submodule_update(config = {})
53
53
  say_status 'git submodule', 'update', :green unless options[:quiet]
54
- system "git submodule --quiet update >/dev/null 2>&1" unless options[:pretend]
54
+ system "git submodule --quiet update --init --recursive >/dev/null 2>&1" unless options[:pretend]
55
55
  end
56
56
 
57
57
  def git_pull(config = {})
@@ -59,6 +59,21 @@ class Homesick
59
59
  system "git pull --quiet" unless options[:pretend]
60
60
  end
61
61
 
62
+ def git_push(config = {})
63
+ say_status 'git push', '', :green unless options[:quiet]
64
+ system "git push" unless options[:pretend]
65
+ end
66
+
67
+ def git_commit_all(config = {})
68
+ say_status 'git commit all', '', :green unless options[:quiet]
69
+ system "git commit -v -a" unless options[:pretend]
70
+ end
71
+
72
+ def git_add(file, config = {})
73
+ say_status 'git add file', '', :green unless options[:quiet]
74
+ system "git add #{file}" unless options[:pretend]
75
+ end
76
+
62
77
  def mv(source, destination, config = {})
63
78
  source = Pathname.new(source)
64
79
  destination = Pathname.new(destination + source.basename)
@@ -86,7 +101,7 @@ class Homesick
86
101
  say_status :conflict, "#{destination} exists and points to #{destination.readlink}", :red unless options[:quiet]
87
102
 
88
103
  if options[:force] || shell.file_collision(destination) { source }
89
- system "ln -sf #{source} #{destination}" unless options[:pretend]
104
+ system "ln -nsf #{source} #{destination}" unless options[:pretend]
90
105
  end
91
106
  end
92
107
  elsif destination.exist?
@@ -1,116 +1,136 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "homesick" do
4
- before do
5
- @homesick = Homesick.new
6
- end
4
+ let(:home) { create_construct }
5
+ after { home.destroy! }
6
+
7
+ let(:castles) { home.directory(".homesick/repos") }
8
+
9
+ let(:homesick) { Homesick.new }
10
+
11
+ before { homesick.stub!(:repos_dir).and_return(castles) }
7
12
 
8
13
  describe "clone" do
9
14
  context "of a file" do
10
15
  it "should symlink existing directories" do
11
16
  somewhere = create_construct
12
- somewhere.directory('wtf')
13
- wtf = somewhere + 'wtf'
17
+ local_repo = somewhere.directory('wtf')
14
18
 
15
- @homesick.should_receive(:ln_s).with(wtf, wtf.basename)
19
+ homesick.clone local_repo
16
20
 
17
- @homesick.clone wtf
21
+ castles.join("wtf").readlink.should == local_repo
18
22
  end
19
23
 
20
24
  context "when it exists in a repo directory" do
21
25
  before do
22
- @repos_dir = create_construct
23
- @existing_dir = @repos_dir.directory('existing_castle')
24
- @homesick.stub!(:repos_dir).and_return(@repos_dir)
26
+ existing_castle = given_castle("existing_castle")
27
+ @existing_dir = existing_castle.parent
25
28
  end
26
29
 
27
30
  it "should not symlink" do
28
- @homesick.should_not_receive(:git_clone)
31
+ homesick.should_not_receive(:git_clone)
29
32
 
30
- @homesick.clone @existing_dir.to_s rescue nil
33
+ homesick.clone @existing_dir.to_s rescue nil
31
34
  end
32
35
 
33
36
  it "should raise an error" do
34
- @existing_castle = @homesick.send(:repos_dir) + 'existing_castle'
35
- lambda {
36
- @homesick.clone @existing_castle.to_s
37
- }.should raise_error(/already cloned/i)
37
+ expect { homesick.clone @existing_dir.to_s }.to raise_error(/already cloned/i)
38
38
  end
39
39
  end
40
40
  end
41
41
 
42
42
  it "should clone git repo like git://host/path/to.git" do
43
- @homesick.should_receive(:git_clone).with('git://github.com/technicalpickles/pickled-vim.git')
43
+ homesick.should_receive(:git_clone).with('git://github.com/technicalpickles/pickled-vim.git')
44
44
 
45
- @homesick.clone "git://github.com/technicalpickles/pickled-vim.git"
45
+ homesick.clone "git://github.com/technicalpickles/pickled-vim.git"
46
46
  end
47
47
 
48
48
  it "should clone git repo like git@host:path/to.git" do
49
- @homesick.should_receive(:git_clone).with('git@github.com:technicalpickles/pickled-vim.git')
49
+ homesick.should_receive(:git_clone).with('git@github.com:technicalpickles/pickled-vim.git')
50
50
 
51
- @homesick.clone 'git@github.com:technicalpickles/pickled-vim.git'
51
+ homesick.clone 'git@github.com:technicalpickles/pickled-vim.git'
52
52
  end
53
53
 
54
54
  it "should clone git repo like http://host/path/to.git" do
55
- @homesick.should_receive(:git_clone).with('http://github.com/technicalpickles/pickled-vim.git')
55
+ homesick.should_receive(:git_clone).with('http://github.com/technicalpickles/pickled-vim.git')
56
56
 
57
- @homesick.clone 'http://github.com/technicalpickles/pickled-vim.git'
57
+ homesick.clone 'http://github.com/technicalpickles/pickled-vim.git'
58
58
  end
59
59
 
60
60
  it "should clone git repo like http://host/path/to" do
61
- @homesick.should_receive(:git_clone).with('http://github.com/technicalpickles/pickled-vim')
61
+ homesick.should_receive(:git_clone).with('http://github.com/technicalpickles/pickled-vim')
62
62
 
63
- @homesick.clone 'http://github.com/technicalpickles/pickled-vim'
63
+ homesick.clone 'http://github.com/technicalpickles/pickled-vim'
64
64
  end
65
65
 
66
66
  it "should clone git repo like host-alias:repos.git" do
67
- @homesick.should_receive(:git_clone).with('gitolite:pickled-vim.git')
67
+ homesick.should_receive(:git_clone).with('gitolite:pickled-vim.git')
68
68
 
69
- @homesick.clone 'gitolite:pickled-vim.git'
69
+ homesick.clone 'gitolite:pickled-vim.git'
70
70
  end
71
71
 
72
72
  it "should not try to clone a malformed uri like malformed" do
73
- @homesick.should_not_receive(:git_clone)
73
+ homesick.should_not_receive(:git_clone)
74
74
 
75
- @homesick.clone 'malformed' rescue nil
75
+ homesick.clone 'malformed' rescue nil
76
76
  end
77
77
 
78
78
  it "should throw an exception when trying to clone a malformed uri like malformed" do
79
- lambda {
80
- @homesick.clone 'malformed'
81
- }.should raise_error
79
+ expect { homesick.clone 'malformed' }.to raise_error
82
80
  end
83
81
 
84
82
  it "should clone a github repo" do
85
- @homesick.should_receive(:git_clone).with('git://github.com/wfarr/dotfiles.git', :destination => Pathname.new('wfarr/dotfiles'))
83
+ homesick.should_receive(:git_clone).with('git://github.com/wfarr/dotfiles.git', :destination => Pathname.new('wfarr/dotfiles'))
86
84
 
87
- @homesick.clone "wfarr/dotfiles"
85
+ homesick.clone "wfarr/dotfiles"
88
86
  end
89
87
  end
90
88
 
91
- describe "list" do
89
+ describe "symlink" do
90
+ let(:castle) { given_castle("glencairn") }
92
91
 
93
- # FIXME only passes in isolation. need to setup data a bit better
94
- xit "should say each castle in the castle directory" do
95
- @user_dir.directory '.homesick/repos' do |repos_dir|
96
- repos_dir.directory 'zomg' do |zomg|
97
- Dir.chdir do
98
- system "git init >/dev/null 2>&1"
99
- system "git remote add origin git://github.com/technicalpickles/zomg.git >/dev/null 2>&1"
100
- end
101
- end
92
+ it "links dotfiles from a castle to the home folder" do
93
+ dotfile = castle.file(".some_dotfile")
102
94
 
103
- repos_dir.directory 'wtf/zomg' do |zomg|
104
- Dir.chdir do
105
- system "git init >/dev/null 2>&1"
106
- system "git remote add origin git://github.com/technicalpickles/zomg.git >/dev/null 2>&1"
107
- end
108
- end
109
- end
110
- @homesick.should_receive(:say_status).with("zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
111
- @homesick.should_receive(:say_status).with("wtf/zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
95
+ homesick.symlink("glencairn")
96
+
97
+ home.join(".some_dotfile").readlink.should == dotfile
98
+ end
99
+
100
+ it "links non-dotfiles from a castle to the home folder" do
101
+ dotfile = castle.file("bin")
112
102
 
113
- @homesick.list
103
+ homesick.symlink("glencairn")
104
+
105
+ home.join("bin").readlink.should == dotfile
106
+ end
107
+
108
+ context "when forced" do
109
+ let(:homesick) { Homesick.new [], :force => true }
110
+
111
+ it "can override symlinks to directories" do
112
+ somewhere_else = create_construct
113
+ existing_dotdir_link = home.join(".vim")
114
+ FileUtils.ln_s somewhere_else, existing_dotdir_link
115
+
116
+ dotdir = castle.directory(".vim")
117
+
118
+ homesick.symlink("glencairn")
119
+
120
+ existing_dotdir_link.readlink.should == dotdir
121
+ end
122
+ end
123
+ end
124
+
125
+ describe "list" do
126
+ it "should say each castle in the castle directory" do
127
+ given_castle('zomg')
128
+ given_castle('zomg', 'wtf/zomg')
129
+
130
+ homesick.should_receive(:say_status).with("zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
131
+ homesick.should_receive(:say_status).with("wtf/zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
132
+
133
+ homesick.list
114
134
  end
115
135
  end
116
136
 
@@ -124,23 +144,30 @@ describe "homesick" do
124
144
 
125
145
  end
126
146
 
147
+ describe "commit" do
148
+
149
+ xit "needs testing"
150
+
151
+ end
152
+
153
+ describe "push" do
154
+
155
+ xit "needs testing"
156
+
157
+ end
158
+
127
159
  describe "track" do
128
160
  it "should move the tracked file into the castle" do
129
- some_rc_file = @user_dir.file '.some_rc_file'
130
- homesickrepo = @user_dir.directory('.homesick').directory('repos').directory('castle_repo')
131
- castle_path = homesickrepo.directory 'home'
132
-
133
- # There is some hideous thing going on with construct; rming the file I'm moving works on this test.
134
- # Otherwise when track ln_s's it back out, it sees a conflict. Its as if file operations don't
135
- # actually effect this thing, or something.
136
- system "rm #{some_rc_file.to_s}"
137
- Dir.chdir homesickrepo do
138
- system "git init >/dev/null 2>&1"
139
- end
140
-
141
- @homesick.should_receive(:mv).with(some_rc_file, castle_path)
142
- @homesick.should_receive(:ln_s).with(castle_path + some_rc_file.basename, some_rc_file)
143
- @homesick.track(some_rc_file.to_s, 'castle_repo')
161
+ castle = given_castle('castle_repo')
162
+
163
+ some_rc_file = home.file '.some_rc_file'
164
+
165
+ homesick.track(some_rc_file.to_s, 'castle_repo')
166
+
167
+ tracked_file = castle.join(".some_rc_file")
168
+ tracked_file.should exist
169
+
170
+ some_rc_file.readlink.should == tracked_file
144
171
  end
145
172
  end
146
173
  end
@@ -5,15 +5,24 @@ require 'rspec'
5
5
  require 'rspec/autorun'
6
6
  require 'construct'
7
7
 
8
- Rspec.configure do |config|
8
+ RSpec.configure do |config|
9
9
  config.include Construct::Helpers
10
10
 
11
- config.before do
12
- @user_dir = create_construct
13
- ENV['HOME'] = @user_dir.to_s
11
+ config.before { ENV['HOME'] = home.to_s }
12
+
13
+ config.before { silence! }
14
+
15
+ def silence!
16
+ homesick.stub(:say_status)
14
17
  end
15
18
 
16
- config.after do
17
- @user_dir.destroy!
19
+ def given_castle(name, path=name)
20
+ castles.directory(path) do |castle|
21
+ Dir.chdir(castle) do
22
+ system "git init >/dev/null 2>&1"
23
+ system "git remote add origin git://github.com/technicalpickles/#{name}.git >/dev/null 2>&1"
24
+ return castle.directory("home")
25
+ end
26
+ end
18
27
  end
19
28
  end
metadata CHANGED
@@ -1,139 +1,147 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: homesick
3
- version: !ruby/object:Gem::Version
4
- hash: 3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 7
9
- - 0
10
- version: 0.7.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Joshua Nichols
9
+ - Yusuke Murata
14
10
  autorequire:
15
11
  bindir: bin
16
12
  cert_chain: []
17
-
18
- date: 2012-05-28 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- prerelease: false
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
13
+ date: 2013-04-05 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: thor
17
+ requirement: !ruby/object:Gem::Requirement
23
18
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 39
28
- segments:
29
- - 0
30
- - 14
31
- - 0
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
32
22
  version: 0.14.0
33
- requirement: *id001
34
- name: thor
35
23
  type: :runtime
36
- - !ruby/object:Gem::Dependency
37
24
  prerelease: false
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
39
26
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
47
- requirement: *id002
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: 0.14.0
31
+ - !ruby/object:Gem::Dependency
48
32
  name: rake
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 0.8.7
49
39
  type: :development
50
- - !ruby/object:Gem::Dependency
51
40
  prerelease: false
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
53
42
  none: false
54
- requirements:
43
+ requirements:
55
44
  - - ~>
56
- - !ruby/object:Gem::Version
57
- hash: 11
58
- segments:
59
- - 2
60
- - 1
61
- - 0
62
- version: 2.1.0
63
- requirement: *id003
45
+ - !ruby/object:Gem::Version
46
+ version: 0.8.7
47
+ - !ruby/object:Gem::Dependency
64
48
  name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.10'
65
55
  type: :development
66
- - !ruby/object:Gem::Dependency
67
56
  prerelease: false
68
- version_requirements: &id004 !ruby/object:Gem::Requirement
57
+ version_requirements: !ruby/object:Gem::Requirement
69
58
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 11
74
- segments:
75
- - 1
76
- - 6
77
- - 2
78
- version: 1.6.2
79
- requirement: *id004
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '2.10'
63
+ - !ruby/object:Gem::Dependency
80
64
  name: jeweler
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: 1.6.2
81
71
  type: :development
82
- - !ruby/object:Gem::Dependency
83
72
  prerelease: false
84
- version_requirements: &id005 !ruby/object:Gem::Requirement
73
+ version_requirements: !ruby/object:Gem::Requirement
85
74
  none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- hash: 3
90
- segments:
91
- - 0
92
- version: "0"
93
- requirement: *id005
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: 1.6.2
79
+ - !ruby/object:Gem::Dependency
94
80
  name: rcov
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
95
87
  type: :development
96
- - !ruby/object:Gem::Dependency
97
88
  prerelease: false
98
- version_requirements: &id006 !ruby/object:Gem::Requirement
89
+ version_requirements: !ruby/object:Gem::Requirement
99
90
  none: false
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- hash: 3
104
- segments:
105
- - 0
106
- version: "0"
107
- requirement: *id006
108
- name: test-construct
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: simplecov
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
109
103
  type: :development
110
- - !ruby/object:Gem::Dependency
111
104
  prerelease: false
112
- version_requirements: &id007 !ruby/object:Gem::Requirement
105
+ version_requirements: !ruby/object:Gem::Requirement
113
106
  none: false
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- hash: 3
118
- segments:
119
- - 0
120
- version: "0"
121
- requirement: *id007
122
- name: ruby-debug
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: test-construct
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
123
119
  type: :development
124
- description: "\n A man's home (directory) is his castle, so don't leave home with out it.\n\n Homesick is sorta like rip, but for dotfiles. It uses git to clone a repository containing dotfiles, and saves them in ~/.homesick. It then allows you to symlink all the dotfiles into place with a single command. \n\n "
125
- email: josh@technicalpickles.com
126
- executables:
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ description: ! "\n A man's home (directory) is his castle, so don't leave home
128
+ with out it.\n\n Homesick is sorta like rip, but for dotfiles. It uses git to
129
+ clone a repository containing dotfiles, and saves them in ~/.homesick. It then allows
130
+ you to symlink all the dotfiles into place with a single command. \n\n "
131
+ email:
132
+ - josh@technicalpickles.com
133
+ - info@muratayusuke.com
134
+ executables:
127
135
  - homesick
128
136
  extensions: []
129
-
130
- extra_rdoc_files:
137
+ extra_rdoc_files:
131
138
  - ChangeLog.markdown
132
139
  - LICENSE
133
140
  - README.markdown
134
- files:
141
+ files:
135
142
  - .document
136
143
  - .rspec
144
+ - .travis.yml
137
145
  - ChangeLog.markdown
138
146
  - Gemfile
139
147
  - Gemfile.lock
@@ -149,37 +157,31 @@ files:
149
157
  - spec/spec.opts
150
158
  - spec/spec_helper.rb
151
159
  homepage: http://github.com/technicalpickles/homesick
152
- licenses:
160
+ licenses:
153
161
  - MIT
154
162
  post_install_message:
155
163
  rdoc_options: []
156
-
157
- require_paths:
164
+ require_paths:
158
165
  - lib
159
- required_ruby_version: !ruby/object:Gem::Requirement
166
+ required_ruby_version: !ruby/object:Gem::Requirement
160
167
  none: false
161
- requirements:
162
- - - ">="
163
- - !ruby/object:Gem::Version
164
- hash: 3
165
- segments:
168
+ requirements:
169
+ - - ! '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ segments:
166
173
  - 0
167
- version: "0"
168
- required_rubygems_version: !ruby/object:Gem::Requirement
174
+ hash: 806513071
175
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
176
  none: false
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- hash: 3
174
- segments:
175
- - 0
176
- version: "0"
177
+ requirements:
178
+ - - ! '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
177
181
  requirements: []
178
-
179
182
  rubyforge_project:
180
- rubygems_version: 1.8.15
183
+ rubygems_version: 1.8.24
181
184
  signing_key:
182
185
  specification_version: 3
183
186
  summary: A man's home is his castle. Never leave your dotfiles behind.
184
187
  test_files: []
185
-