Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e817c816c9 | ||
|
|
14f0f8c121 | ||
|
|
4c97948e04 | ||
|
|
360e8185f7 | ||
|
|
da0958d455 | ||
|
|
70f5d24e0a | ||
|
|
6b281ef001 | ||
|
|
3ddd3207b3 | ||
|
|
8e58a3f5e2 | ||
|
|
a95c4b2446 | ||
|
|
97fe1686f5 | ||
|
|
76fcf5d0b7 | ||
|
|
bf1fc58e10 | ||
|
|
3559d825ca | ||
|
|
2d54086d89 | ||
|
|
c31c67a3eb | ||
|
|
e924cbefda | ||
|
|
6867ef78dc | ||
|
|
a76d09d3f6 | ||
|
|
b93eea0e24 | ||
|
|
7332aa4acd | ||
|
|
49e4d2844b |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -39,3 +39,7 @@ pkg
|
|||||||
#
|
#
|
||||||
# For vim:
|
# For vim:
|
||||||
*.swp
|
*.swp
|
||||||
|
#
|
||||||
|
# For IDEA:
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
language: ruby
|
language: ruby
|
||||||
rvm:
|
rvm:
|
||||||
|
- 2.0.0
|
||||||
- 1.9.3
|
- 1.9.3
|
||||||
- 1.8.7
|
- 1.8.7
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# 0.9.0
|
||||||
|
* Introduce .homesick_subdir #39
|
||||||
|
|
||||||
# 0.8.1
|
# 0.8.1
|
||||||
*Fixed `homesick list` bug on ruby 2.0 #37
|
*Fixed `homesick list` bug on ruby 2.0 #37
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,84 @@ Not sure what else homesick has up its sleeve? There's always the built in help:
|
|||||||
|
|
||||||
homesick help
|
homesick help
|
||||||
|
|
||||||
|
## .homesick_subdir
|
||||||
|
|
||||||
|
`homesick symlink` basically makes symlink to only first depth in `castle/home`. If you want to link nested files/directories, please use .homesick_subdir.
|
||||||
|
|
||||||
|
For example, when you have castle like this:
|
||||||
|
|
||||||
|
castle/home
|
||||||
|
`-- .config
|
||||||
|
`-- fooapp
|
||||||
|
|-- config1
|
||||||
|
|-- config2
|
||||||
|
`-- config3
|
||||||
|
|
||||||
|
and have home like this:
|
||||||
|
|
||||||
|
$ tree -a
|
||||||
|
~
|
||||||
|
|-- .config
|
||||||
|
| `-- barapp
|
||||||
|
| |-- config1
|
||||||
|
| |-- config2
|
||||||
|
| `-- config3
|
||||||
|
`-- .emacs.d
|
||||||
|
|-- elisp
|
||||||
|
`-- inits
|
||||||
|
|
||||||
|
You may want to symlink only to `castle/home/.config/fooapp` instead of `castle/home/.config` because you already have `~/.config/barapp`. In this case, you can use .homesick_subdir. Please write "directories you want to look up sub direcoties (instead of just first depth)" in this file.
|
||||||
|
|
||||||
|
castle/home/.homesick_subdir
|
||||||
|
|
||||||
|
.config
|
||||||
|
|
||||||
|
and run `homesick symlink CASTLE`. The result is:
|
||||||
|
|
||||||
|
~
|
||||||
|
|-- .config
|
||||||
|
| |-- barapp
|
||||||
|
| | |-- config1
|
||||||
|
| | |-- config2
|
||||||
|
| | `-- config3
|
||||||
|
| `-- fooapp -> castle/home/.config/fooapp
|
||||||
|
`-- .emacs.d
|
||||||
|
|-- elisp
|
||||||
|
`-- inits
|
||||||
|
|
||||||
|
Or `homesick track NESTED_FILE CASTLE` adds a line automatically. For example:
|
||||||
|
|
||||||
|
homesick track .emacs.d/elisp castle
|
||||||
|
|
||||||
|
castle/home/.homesick_subdir
|
||||||
|
|
||||||
|
.config
|
||||||
|
.emacs.d
|
||||||
|
|
||||||
|
home directory
|
||||||
|
|
||||||
|
~
|
||||||
|
|-- .config
|
||||||
|
| |-- barapp
|
||||||
|
| | |-- config1
|
||||||
|
| | |-- config2
|
||||||
|
| | `-- config3
|
||||||
|
| `-- fooapp -> castle/home/.config/fooapp
|
||||||
|
`-- .emacs.d
|
||||||
|
|-- elisp -> castle/home/.emacs.d/elisp
|
||||||
|
`-- inits
|
||||||
|
|
||||||
|
and castle
|
||||||
|
|
||||||
|
castle/home
|
||||||
|
|-- .config
|
||||||
|
| `-- fooapp
|
||||||
|
| |-- config1
|
||||||
|
| |-- config2
|
||||||
|
| `-- config3
|
||||||
|
`-- .emacs.d
|
||||||
|
`-- elisp
|
||||||
|
|
||||||
## Note on Patches/Pull Requests
|
## Note on Patches/Pull Requests
|
||||||
|
|
||||||
* Fork the project.
|
* Fork the project.
|
||||||
|
|||||||
2
Rakefile
2
Rakefile
@@ -22,7 +22,7 @@ Jeweler::Tasks.new do |gem|
|
|||||||
gem.email = ["josh@technicalpickles.com", "info@muratayusuke.com"]
|
gem.email = ["josh@technicalpickles.com", "info@muratayusuke.com"]
|
||||||
gem.homepage = "http://github.com/technicalpickles/homesick"
|
gem.homepage = "http://github.com/technicalpickles/homesick"
|
||||||
gem.authors = ["Joshua Nichols", "Yusuke Murata"]
|
gem.authors = ["Joshua Nichols", "Yusuke Murata"]
|
||||||
gem.version = "0.8.1"
|
gem.version = "0.9.0"
|
||||||
gem.license = "MIT"
|
gem.license = "MIT"
|
||||||
# Have dependencies? Add them to Gemfile
|
# Have dependencies? Add them to Gemfile
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
s.name = "homesick"
|
s.name = "homesick"
|
||||||
s.version = "0.8.1"
|
s.version = "0.9.0"
|
||||||
|
|
||||||
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
||||||
s.authors = ["Joshua Nichols", "Yusuke Murata"]
|
s.authors = ["Joshua Nichols", "Yusuke Murata"]
|
||||||
s.date = "2013-05-19"
|
s.date = "2013-06-06"
|
||||||
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 "
|
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 "
|
||||||
s.email = ["josh@technicalpickles.com", "info@muratayusuke.com"]
|
s.email = ["josh@technicalpickles.com", "info@muratayusuke.com"]
|
||||||
s.executables = ["homesick"]
|
s.executables = ["homesick"]
|
||||||
|
|||||||
143
lib/homesick.rb
143
lib/homesick.rb
@@ -10,6 +10,7 @@ class Homesick < Thor
|
|||||||
add_runtime_options!
|
add_runtime_options!
|
||||||
|
|
||||||
GITHUB_NAME_REPO_PATTERN = /\A([A-Za-z_-]+\/[A-Za-z_-]+)\Z/
|
GITHUB_NAME_REPO_PATTERN = /\A([A-Za-z_-]+\/[A-Za-z_-]+)\Z/
|
||||||
|
SUBDIR_FILENAME = ".homesick_subdir"
|
||||||
|
|
||||||
def initialize(args=[], options={}, config={})
|
def initialize(args=[], options={}, config={})
|
||||||
super
|
super
|
||||||
@@ -96,15 +97,14 @@ class Homesick < Thor
|
|||||||
check_castle_existance(name, "symlink")
|
check_castle_existance(name, "symlink")
|
||||||
|
|
||||||
inside castle_dir(name) do
|
inside castle_dir(name) do
|
||||||
files = Pathname.glob('{.*,*}').reject{|a| [".",".."].include?(a.to_s)}
|
subdirs = subdirs(name)
|
||||||
files.each do |path|
|
|
||||||
absolute_path = path.expand_path
|
|
||||||
|
|
||||||
inside home_dir do
|
# link files
|
||||||
adjusted_path = (home_dir + path).basename
|
symlink_each(name, castle_dir(name), subdirs)
|
||||||
|
|
||||||
ln_s absolute_path, adjusted_path
|
# link files in subdirs
|
||||||
end
|
subdirs.each do |subdir|
|
||||||
|
symlink_each(name, subdir, subdirs)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -112,22 +112,46 @@ class Homesick < Thor
|
|||||||
desc "track FILE CASTLE", "add a file to a castle"
|
desc "track FILE CASTLE", "add a file to a castle"
|
||||||
def track(file, castle)
|
def track(file, castle)
|
||||||
castle = Pathname.new(castle)
|
castle = Pathname.new(castle)
|
||||||
file = Pathname.new(file)
|
file = Pathname.new(file.chomp('/'))
|
||||||
check_castle_existance(castle, 'track')
|
check_castle_existance(castle, 'track')
|
||||||
|
|
||||||
absolute_path = file.expand_path
|
absolute_path = file.expand_path
|
||||||
castle_path = castle_dir(castle)
|
relative_dir = absolute_path.relative_path_from(home_dir).dirname
|
||||||
mv absolute_path, castle_path
|
castle_path = Pathname.new(castle_dir(castle)).join(relative_dir)
|
||||||
|
FileUtils.mkdir_p castle_path
|
||||||
|
|
||||||
|
# Are we already tracking this or anything inside it?
|
||||||
|
target = Pathname.new(castle_path.join(file.basename))
|
||||||
|
if target.exist?
|
||||||
|
if absolute_path.directory?
|
||||||
|
move_dir_contents(target, absolute_path)
|
||||||
|
absolute_path.rmtree
|
||||||
|
subdir_remove(castle, relative_dir + file.basename)
|
||||||
|
|
||||||
|
elsif more_recent? absolute_path, target
|
||||||
|
target.delete
|
||||||
|
mv absolute_path, castle_path
|
||||||
|
else
|
||||||
|
shell.say_status(:track, "#{target} already exists, and is more recent than #{file}. Run 'homesick SYMLINK CASTLE' to create symlinks.", :blue) unless options[:quiet]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
mv absolute_path, castle_path
|
||||||
|
end
|
||||||
|
|
||||||
inside home_dir do
|
inside home_dir do
|
||||||
absolute_path = castle_dir(castle) + file.basename
|
absolute_path = castle_path + file.basename
|
||||||
home_path = home_dir + file
|
home_path = home_dir + relative_dir + file.basename
|
||||||
ln_s absolute_path, home_path
|
ln_s absolute_path, home_path
|
||||||
end
|
end
|
||||||
|
|
||||||
inside castle_path do
|
inside castle_path do
|
||||||
git_add absolute_path
|
git_add absolute_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# are we tracking something nested? Add the parent dir to the manifest
|
||||||
|
unless relative_dir.eql?(Pathname.new('.'))
|
||||||
|
subdir_add(castle, relative_dir)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "list", "List cloned castles"
|
desc "list", "List cloned castles"
|
||||||
@@ -219,4 +243,99 @@ class Homesick < Thor
|
|||||||
git_push
|
git_push
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def subdir_file(castle)
|
||||||
|
repos_dir.join(castle, SUBDIR_FILENAME)
|
||||||
|
end
|
||||||
|
|
||||||
|
def subdirs(castle)
|
||||||
|
subdir_filepath = subdir_file(castle)
|
||||||
|
subdirs = []
|
||||||
|
if subdir_filepath.exist?
|
||||||
|
subdir_filepath.readlines.each do |subdir|
|
||||||
|
subdirs.push(subdir.chomp)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
subdirs
|
||||||
|
end
|
||||||
|
|
||||||
|
def subdir_add(castle, path)
|
||||||
|
subdir_filepath = subdir_file(castle)
|
||||||
|
File.open(subdir_filepath, 'a+') do |subdir|
|
||||||
|
subdir.puts path unless subdir.readlines.inject(false) { |memo, line| line.eql?("#{path.to_s}\n") || memo }
|
||||||
|
end
|
||||||
|
|
||||||
|
inside castle_dir(castle) do
|
||||||
|
git_add subdir_filepath
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def subdir_remove(castle, path)
|
||||||
|
subdir_filepath = subdir_file(castle)
|
||||||
|
if subdir_filepath.exist?
|
||||||
|
lines = IO.readlines(subdir_filepath).delete_if { |line| line == "#{path}\n" }
|
||||||
|
File.open(subdir_filepath, 'w') { |manfile| manfile.puts lines }
|
||||||
|
end
|
||||||
|
|
||||||
|
inside castle_dir(castle) do
|
||||||
|
git_add subdir_filepath
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def move_dir_contents(target, dir_path)
|
||||||
|
child_files = dir_path.children
|
||||||
|
child_files.each do |child|
|
||||||
|
|
||||||
|
target_path = target.join(child.basename)
|
||||||
|
if target_path.exist?
|
||||||
|
if more_recent?(child, target_path) && target.file?
|
||||||
|
target_path.delete
|
||||||
|
mv child, target
|
||||||
|
end
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
mv child, target
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def more_recent?(first, second)
|
||||||
|
first_p = Pathname.new(first)
|
||||||
|
second_p = Pathname.new(second)
|
||||||
|
first_p.mtime > second_p.mtime && !first_p.symlink?
|
||||||
|
end
|
||||||
|
|
||||||
|
def symlink_each(castle, basedir, subdirs)
|
||||||
|
absolute_basedir = Pathname.new(basedir).expand_path
|
||||||
|
inside basedir do
|
||||||
|
files = Pathname.glob('{.*,*}').reject{|a| [".", ".."].include?(a.to_s)}
|
||||||
|
files.each do |path|
|
||||||
|
absolute_path = path.expand_path
|
||||||
|
castle_home = castle_dir(castle)
|
||||||
|
|
||||||
|
# make ignore dirs
|
||||||
|
ignore_dirs = []
|
||||||
|
subdirs.each do |subdir|
|
||||||
|
# ignore all parent of each line in subdir file
|
||||||
|
Pathname.new(subdir).ascend do |p|
|
||||||
|
ignore_dirs.push(p)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# ignore dirs written in subdir file
|
||||||
|
matched = false
|
||||||
|
ignore_dirs.uniq.each do |ignore_dir|
|
||||||
|
if absolute_path == castle_home.join(ignore_dir)
|
||||||
|
matched = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
next if matched
|
||||||
|
|
||||||
|
relative_dir = absolute_basedir.relative_path_from(castle_home)
|
||||||
|
home_path = home_dir.join(relative_dir).join(path)
|
||||||
|
ln_s absolute_path, home_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ class Homesick
|
|||||||
def ln_s(source, destination, config = {})
|
def ln_s(source, destination, config = {})
|
||||||
source = Pathname.new(source)
|
source = Pathname.new(source)
|
||||||
destination = Pathname.new(destination)
|
destination = Pathname.new(destination)
|
||||||
|
FileUtils.mkdir_p destination.dirname
|
||||||
|
|
||||||
if destination.symlink?
|
if destination.symlink?
|
||||||
if destination.readlink == source
|
if destination.readlink == source
|
||||||
|
|||||||
@@ -120,12 +120,59 @@ describe "homesick" do
|
|||||||
existing_dotdir_link.readlink.should == dotdir
|
existing_dotdir_link.readlink.should == dotdir
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with '.config' in .homesick_subdir" do
|
||||||
|
let(:castle) { given_castle("glencairn", [".config"]) }
|
||||||
|
it "can symlink in sub directory" do
|
||||||
|
dotdir = castle.directory(".config")
|
||||||
|
dotfile = dotdir.file(".some_dotfile")
|
||||||
|
|
||||||
|
homesick.symlink("glencairn")
|
||||||
|
|
||||||
|
home_dotdir = home.join(".config")
|
||||||
|
home_dotdir.symlink?.should == false
|
||||||
|
home_dotdir.join(".some_dotfile").readlink.should == dotfile
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with '.config/appA' in .homesick_subdir" do
|
||||||
|
let(:castle) { given_castle("glencairn", [".config/appA"]) }
|
||||||
|
it "can symlink in nested sub directory" do
|
||||||
|
dotdir = castle.directory(".config").directory("appA")
|
||||||
|
dotfile = dotdir.file(".some_dotfile")
|
||||||
|
|
||||||
|
homesick.symlink("glencairn")
|
||||||
|
|
||||||
|
home_dotdir = home.join(".config").join("appA")
|
||||||
|
home_dotdir.symlink?.should == false
|
||||||
|
home_dotdir.join(".some_dotfile").readlink.should == dotfile
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with '.config' and '.config/appA' in .homesick_subdir" do
|
||||||
|
let(:castle) { given_castle("glencairn", [".config", ".config/appA"]) }
|
||||||
|
it "can symlink under both of .config and .config/appA" do
|
||||||
|
config_dir = castle.directory(".config")
|
||||||
|
config_dotfile = config_dir.file(".some_dotfile")
|
||||||
|
appA_dir = config_dir.directory("appA")
|
||||||
|
appA_dotfile = appA_dir.file(".some_appfile")
|
||||||
|
|
||||||
|
homesick.symlink("glencairn")
|
||||||
|
|
||||||
|
home_config_dir = home.join(".config")
|
||||||
|
home_appA_dir = home_config_dir.join("appA")
|
||||||
|
home_config_dir.symlink?.should == false
|
||||||
|
home_config_dir.join(".some_dotfile").readlink.should == config_dotfile
|
||||||
|
home_appA_dir.symlink?.should == false
|
||||||
|
home_appA_dir.join(".some_appfile").readlink.should == appA_dotfile
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "list" do
|
describe "list" do
|
||||||
it "should say each castle in the castle directory" do
|
it "should say each castle in the castle directory" do
|
||||||
given_castle('zomg')
|
given_castle('zomg')
|
||||||
given_castle('zomg', 'wtf/zomg')
|
given_castle('wtf/zomg')
|
||||||
|
|
||||||
homesick.should_receive(:say_status).with("zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
|
homesick.should_receive(:say_status).with("zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
|
||||||
homesick.should_receive(:say_status).with("wtf/zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
|
homesick.should_receive(:say_status).with("wtf/zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
|
||||||
@@ -169,5 +216,70 @@ describe "homesick" do
|
|||||||
|
|
||||||
some_rc_file.readlink.should == tracked_file
|
some_rc_file.readlink.should == tracked_file
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should track a file in nested folder structure' do
|
||||||
|
castle = given_castle('castle_repo')
|
||||||
|
|
||||||
|
some_nested_file = home.file('some/nested/file.txt')
|
||||||
|
homesick.track(some_nested_file.to_s, 'castle_repo')
|
||||||
|
|
||||||
|
tracked_file = castle.join('some/nested/file.txt')
|
||||||
|
tracked_file.should exist
|
||||||
|
some_nested_file.readlink.should == tracked_file
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should track a nested directory' do
|
||||||
|
castle = given_castle('castle_repo')
|
||||||
|
|
||||||
|
some_nested_dir = home.directory('some/nested/directory/')
|
||||||
|
homesick.track(some_nested_dir.to_s, 'castle_repo')
|
||||||
|
|
||||||
|
tracked_file = castle.join('some/nested/directory/')
|
||||||
|
tracked_file.should exist
|
||||||
|
some_nested_dir.realpath.should == tracked_file.realpath
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "subdir_file" do
|
||||||
|
|
||||||
|
it 'should add the nested files parent to the subdir_file' do
|
||||||
|
castle = given_castle('castle_repo')
|
||||||
|
|
||||||
|
some_nested_file = home.file('some/nested/file.txt')
|
||||||
|
homesick.track(some_nested_file.to_s, 'castle_repo')
|
||||||
|
|
||||||
|
subdir_file = castle.parent.join(Homesick::SUBDIR_FILENAME)
|
||||||
|
File.open(subdir_file, 'r') do |f|
|
||||||
|
f.readline.should == "some/nested\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should NOT add anything if the files parent is already listed' do
|
||||||
|
castle = given_castle('castle_repo')
|
||||||
|
|
||||||
|
some_nested_file = home.file('some/nested/file.txt')
|
||||||
|
other_nested_file = home.file('some/nested/other.txt')
|
||||||
|
homesick.track(some_nested_file.to_s, 'castle_repo')
|
||||||
|
homesick.track(other_nested_file.to_s, 'castle_repo')
|
||||||
|
|
||||||
|
subdir_file = castle.parent.join(Homesick::SUBDIR_FILENAME)
|
||||||
|
File.open(subdir_file, 'r') do |f|
|
||||||
|
f.readlines.size.should == 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should remove the parent of a tracked file from the subdir_file if the parent itself is tracked' do
|
||||||
|
castle = given_castle('castle_repo')
|
||||||
|
|
||||||
|
some_nested_file = home.file('some/nested/file.txt')
|
||||||
|
nested_parent = home.directory('some/nested/')
|
||||||
|
homesick.track(some_nested_file.to_s, 'castle_repo')
|
||||||
|
homesick.track(nested_parent.to_s, 'castle_repo')
|
||||||
|
|
||||||
|
subdir_file = castle.parent.join(Homesick::SUBDIR_FILENAME)
|
||||||
|
File.open(subdir_file, 'r') do |f|
|
||||||
|
f.each_line { |line| line.should_not == "some/nested\n" }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -16,11 +16,18 @@ RSpec.configure do |config|
|
|||||||
homesick.stub(:say_status)
|
homesick.stub(:say_status)
|
||||||
end
|
end
|
||||||
|
|
||||||
def given_castle(name, path=name)
|
def given_castle(path, subdirs=[])
|
||||||
|
name = Pathname.new(path).basename
|
||||||
castles.directory(path) do |castle|
|
castles.directory(path) do |castle|
|
||||||
Dir.chdir(castle) do
|
Dir.chdir(castle) do
|
||||||
system "git init >/dev/null 2>&1"
|
system "git init >/dev/null 2>&1"
|
||||||
system "git remote add origin git://github.com/technicalpickles/#{name}.git >/dev/null 2>&1"
|
system "git remote add origin git://github.com/technicalpickles/#{name}.git >/dev/null 2>&1"
|
||||||
|
if subdirs then
|
||||||
|
subdir_file = castle.join(Homesick::SUBDIR_FILENAME)
|
||||||
|
subdirs.each do |subdir|
|
||||||
|
system "echo #{subdir} >> #{subdir_file}"
|
||||||
|
end
|
||||||
|
end
|
||||||
return castle.directory("home")
|
return castle.directory("home")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user