138 Commits

Author SHA1 Message Date
Jeremy Cook
db0f604faf Regenerate gemspec for version 1.0.0 2014-01-15 20:24:36 -05:00
Jeremy Cook
e5a6e43333 Preparing for 1.0.0 release. 2014-01-15 20:23:25 -05:00
Jeremy Cook
faa5f0b9ed Merge pull request #79 from JCook21/Tests
Added tests for untested methods
2014-01-15 16:43:35 -08:00
Jeremy Cook
7c13727978 Merge branch 'master' into Tests 2014-01-15 19:41:06 -05:00
Jeremy Cook
2dba8b6496 Merge branch 'master' of github.com:technicalpickles/homesick 2014-01-15 19:38:29 -05:00
Jeremy Cook
2dadd4e064 Removed libnotify which seems to be causing build errors. 2014-01-15 19:38:02 -05:00
Jeremy Cook
a60ca62eba Merge pull request #71 from thenickperson/master
Merging this one in following discussions on #80.
2014-01-15 16:35:17 -08:00
Nicolas McCurdy
674ffb6bb2 Merge remote-tracking branch 'upstream/master' 2014-01-15 16:57:41 -05:00
Jeremy Cook
5fa0fc037c Updated README for .homesickrc. 2014-01-10 09:36:09 -05:00
Nicolas McCurdy
8a537b8204 Add gem version, dependency status, and code quality badges to the readme 2014-01-10 09:36:09 -05:00
Jeremy Cook
6e25f13e06 Added libnotify Gem on *nix systems in case people want to use it for
Guard notifications.
2014-01-10 09:36:09 -05:00
Jeremy Cook
df8f6b1cb0 Added command to display current version of homesick. 2014-01-10 09:36:09 -05:00
Jeremy Cook
6050a9a7ac Updated README for .homesickrc. 2014-01-09 22:38:47 -05:00
Jeremy Cook
0abd9436ad Merge branch 'master' of github.com:technicalpickles/homesick 2014-01-09 22:34:36 -05:00
Jeremy Cook
af159f5b97 Added libnotify Gem on *nix systems in case people want to use it for
Guard notifications.
2014-01-09 17:45:05 -05:00
Josh Nichols
a657c5622e Merge pull request #77 from thenickperson/readme-badges
Add gem version, dependency status, and code quality badges to the readme
2014-01-09 08:11:56 -08:00
Nicolas McCurdy
6f216cd916 Add gem version, dependency status, and code quality badges to the readme 2014-01-09 02:59:26 -05:00
Nicolas McCurdy
8bf1864335 Switch from the test-construct gem (deprecated) to test_construct 2014-01-09 02:49:52 -05:00
Nicolas McCurdy
8931739e97 Travis: Don't test on Ruby 1.8 (it's deprecated, and it breaks the build) 2014-01-09 02:49:52 -05:00
Jeremy Cook
ab46cf7b2f Merge branch 'master' of github.com:technicalpickles/homesick into Tests 2014-01-06 21:47:17 -05:00
Jeremy Cook
d115714a9f Merge branch 'master' of github.com:technicalpickles/homesick 2014-01-06 21:45:04 -05:00
Jeremy Cook
e787abd3f3 Merge pull request #78 from JCook21/Docs
Added docs for the rc command.
2014-01-06 18:43:06 -08:00
Jeremy Cook
1c0fe66944 Added docs for the rc command. 2014-01-06 21:42:24 -05:00
Jeremy Cook
148d18565f Added tests for untested methods. 2014-01-06 21:24:24 -05:00
Jeremy Cook
264d586863 Updated tests to remove shell output from test results. 2014-01-06 21:24:24 -05:00
Jeremy Cook
76bee65475 Updated gems to use test_construct, removing warning message. 2014-01-06 21:24:24 -05:00
Jeremy Cook
8dac49548c Added command to display current version of homesick. 2014-01-06 19:12:13 -05:00
Jeremy Cook
5c5d204d15 Removed notification settings from project so that user can set them in
~/.guard.rb instead.
2014-01-05 10:08:29 -05:00
Jeremy Cook
e1f85973c1 Added documentation for the new commands to the readme file. 2014-01-02 10:03:24 -05:00
Jeremy Cook
3554806741 Updated gemspec file for homesick. 2013-12-31 21:50:17 -05:00
Jeremy Cook
e4cc308d43 Merge pull request #69 from JCook21/master
Added cd and open commands and tests for commit and status
2013-12-31 18:23:23 -08:00
Jeremy Cook
78271a9ed4 Added commands to cd into a castle and to open a shell and to open the
default editor in the root of a given castle.
2013-12-31 21:20:13 -05:00
Jeremy Cook
8f67188c19 Added new tests for status and commit 2013-12-31 21:18:14 -05:00
Jeremy Cook
c432b27c92 Added guard to project to run tests automatically. 2013-12-30 20:08:17 -05:00
Josh Nichols
30a3bbb198 Merge pull request #67 from technicalpickles/reword-third-person-to-second-person
Reword README's language from third person to second person
2013-12-17 14:21:17 -08:00
Josh Nichols
e7f9358f96 Update jeweler's gemspec language too 2013-12-17 17:18:51 -05:00
Josh Nichols
750c7773ae Reword 'A person's home is their case' to 'Your home directory is your casetle' 2013-12-17 17:16:54 -05:00
Trae Robrock
900277f426 Merge pull request #64 from zacharyalexstern/master
Update README.markdown to remove gendered terms
2013-12-01 16:38:57 -08:00
Zachary Alex Stern
208adeef6c Update README.markdown
Replaced gendered terms/pronouns.

This is a great project, and it can be even greater if it doesn't perpetuate the assumption-of-maleness that seems to pervade all tech spaces.

I do realize that "a man's home is his castle" is a saying, and not just arbitrary, but I counter that with the age old argument: But Still.
2013-11-30 14:23:47 -08:00
Thilko Richter
086828b12f Merge pull request #24 from thilko/master
Destroy your castles
2013-11-25 11:26:29 -08:00
Christian Bundy
c73d556e6f Merge branch 'thilko' into destroy-castles
Conflicts:
	lib/homesick/actions.rb
	spec/homesick_spec.rb
2013-11-24 19:01:30 -08:00
thilko
357e2f60f2 delete repo dir 2013-11-23 22:05:07 +01:00
thilko
243ba70b33 using rm_rf to avoid confirmations on delete 2013-11-23 21:54:40 +01:00
thilko
640da07089 call unlink before removing the castle repo 2013-11-23 21:06:41 +01:00
thilko
69c38774fe ask user before start destroying 2013-11-23 21:01:53 +01:00
Thilko Richter
44527850f6 destroy action implemented 2013-11-23 19:42:39 +01:00
Trae Robrock
8d96b2c31f Regenerate gemspec for version 0.9.7 2013-11-23 19:38:53 +01:00
Trae Robrock
0019e8c61c Bump version 2013-11-23 19:38:53 +01:00
bcd
545f5fc3e9 Git clone now uses config push.default upstream 2013-11-23 19:38:53 +01:00
Chris Ball
5108de20c3 Remove symlink shorthand note in README
Seems that using `homesick symlink <username>/<reponame>` after a clone does not locate the directory properly. `homesick symlink <reponame>` works in both cases regardless if the shorthand or full git url was used to clone.
2013-11-23 19:38:53 +01:00
Trae Robrock
9656be1dde Regenerate gemspec for version 0.9.6 2013-11-23 19:38:53 +01:00
Trae Robrock
09890e8048 Bump version 2013-11-23 19:38:53 +01:00
Trae Robrock
b672b4c526 Regenerate gemspec for version 0.9.5 2013-11-23 19:38:53 +01:00
mingkai
6ca49327c3 Change github-repo pattern to allow numbers for usernames/repos 2013-11-23 19:38:53 +01:00
bcd87
3d47cc44af Rake now passes on Ruby 1.8.7 on my machine 2013-11-23 19:38:52 +01:00
bcd87
e8b471ac97 Changed the spec, bundle exec rake works 2013-11-23 19:38:52 +01:00
bcd87
0e6915b860 Using the homesick clone github shortcut now clones to ~/.homesick/repos/repo/, in stead of ~/.homesick/repos/username/repo/ 2013-11-23 19:38:52 +01:00
Trae Robrock
0d48e517f8 Regenerate gemspec for version 0.9.5 2013-11-23 19:38:52 +01:00
Trae Robrock
f2469ecaaf Bump version the right way 2013-11-23 19:38:52 +01:00
Trae Robrock
c8451c7d3f Regenerate gemspec for version 0.9.4 2013-11-23 19:38:52 +01:00
Trae Robrock
d3025a34ca Bump version 2013-11-23 19:38:52 +01:00
Trae Robrock
17426583e0 Add test for parens in filenames, and fixed 2013-11-23 19:38:52 +01:00
muratayusuke
04c4a4c059 Regenerate gemspec for version 0.9.4 2013-11-23 19:38:52 +01:00
muratayusuke
6ae0aaa6f9 bump up version 2013-11-23 19:38:51 +01:00
muratayusuke
d22361f2ac Regenerate gemspec for version 0.9.3 2013-11-23 19:38:51 +01:00
muratayusuke
e21e608cca bump up version 2013-11-23 19:38:51 +01:00
muratayusuke
238658cf69 remove unused variables 2013-11-23 19:38:51 +01:00
muratayusuke
2a361d86e0 fix deprecated method: stub! -> stub 2013-11-23 19:38:51 +01:00
Trae Robrock
294fb3d4ce Add tests for the rc command 2013-11-23 19:38:51 +01:00
Trae Robrock
342da7e250 Adding test for clone running homesickrc 2013-11-23 19:38:51 +01:00
John Bellone
9c52108035 Update specs to for change to https vs. git protocol. 2013-11-23 19:38:51 +01:00
Trae Robrock
5b954b93e3 Fix #19 homesickrc pathname needs a to_s to eval
Also, moved the file evaluation into a new function so the script can be
ran manually which should make testing these scripts easier.
2013-11-23 19:38:50 +01:00
Trae Robrock
b596e063f5 Add unlink functionality 2013-11-23 19:38:50 +01:00
Trae Robrock
965b35b78c Ignore vendor dir 2013-11-23 19:37:25 +01:00
muratayusuke
9551b3acb4 Regenerate gemspec for version 0.9.3 2013-11-23 19:37:25 +01:00
muratayusuke
27ac1c7782 bump up version 2013-11-23 19:37:25 +01:00
muratayusuke
f9d0b69bce add recursive option to 'homesick clone' 2013-11-23 19:37:25 +01:00
muratayusuke
a91ce82d77 Regenerate gemspec for version 0.9.2 2013-11-23 19:37:25 +01:00
muratayusuke
d8b5d8163b remove Gemfile.lock from repository 2013-11-23 19:37:25 +01:00
muratayusuke
6fca06d341 bump up version 2013-11-23 19:37:24 +01:00
Austin Lin
44080829e3 Update readme with correct file path for .homesick_subdir per technicalpickles/homesick@360e8185f7 2013-11-23 19:37:24 +01:00
David Simon
651e028d5b Whoops, fixed typo 2013-11-23 19:37:24 +01:00
David Simon
6f3186df2f Using DEFAULT_CASTLE_NAME in show_path, diff, status 2013-11-23 19:37:24 +01:00
David Simon
92c61f928e Added three commands: show_path, status, diff 2013-11-23 19:37:24 +01:00
akahige
d3cb45f879 default castle name to constant 2013-11-23 19:37:24 +01:00
John Bellone
314e2932fb Update homesick.rb to make https default for GitHub clones.
If we use HTTPS it is a lot easier for corporate worlds to manage proxies since its usually already done for us. Also HTTPS cloning is just as fast as the git protocol as of more recent versions.
2013-11-23 19:37:24 +01:00
akahige
8ee5165ccf set default castle name: 'dotfiles' for some commands 2013-11-23 19:37:24 +01:00
muratayusuke
8f2a9e6703 remove duplicate spec 2013-11-23 19:37:24 +01:00
muratayusuke
f8a6fb9ce2 follow Ruby Style Guide for some points 2013-11-23 19:37:23 +01:00
muratayusuke
bf248cd645 don't fail test even if rubocop detects some offence 2013-11-23 19:36:38 +01:00
muratayusuke
1563814cb0 use single-quate if don't need double-quate 2013-11-23 19:36:37 +01:00
muratayusuke
91770998a7 don't install rubocop under ruby 1.9.2 2013-11-23 19:36:37 +01:00
muratayusuke
d7aca1025f don't run rubocode on ruby 1.8.7 2013-11-23 19:36:37 +01:00
muratayusuke
b3298d18c8 fix coding style 2013-11-23 19:36:37 +01:00
muratayusuke
359147e7e8 use rubocop 2013-11-23 19:36:37 +01:00
muratayusuke
937f1912d7 Regenerate gemspec for version 0.9.1 2013-11-23 19:36:37 +01:00
muratayusuke
18c0e32309 bump up version 2013-11-23 19:36:37 +01:00
Fletcher Nichol
1518cb1155 Remove .git suffix on destination directory if URL ends with it.
For example, the following:

    homesick clone git://github.com/technicalpickles/pickled-vim.git

should produce a castle directory of:

    $HOME/.homesick/repos/pickled-vim
2013-11-23 19:36:37 +01:00
muratayusuke
c5b7dd2918 fix #35 2013-11-23 19:36:36 +01:00
muratayusuke
b668b7eda2 Regenerate gemspec for version 0.9.0 2013-11-23 19:36:36 +01:00
muratayusuke
a595ead2c6 bump up version and update changelog 2013-11-23 19:36:36 +01:00
muratayusuke
cc1ee544c3 move castle/home/.homesick_subdir to castle/.homesick_subdir 2013-11-23 19:36:36 +01:00
Yusuke Murata
a0862936e8 fix typo 2013-11-23 19:36:36 +01:00
Yusuke Murata
f91f5743b6 fix style of README 2013-11-23 19:36:36 +01:00
Yusuke Murata
eb74b90b42 fix style of README 2013-11-23 19:36:36 +01:00
muratayusuke
c3c108bd50 add .homesick_subdir explanation to README 2013-11-23 19:36:36 +01:00
muratayusuke
06975f79f5 deal with edge case: the parent and descendant are both listed in the manifest 2013-11-23 19:36:36 +01:00
muratayusuke
830106a168 refactor symlink 2013-11-23 19:36:35 +01:00
muratayusuke
aa2dfcc42f refactor given_castle 2013-11-23 19:36:35 +01:00
muratayusuke
ed71fd6227 add ruby-2.0.0 to travis 2013-11-23 19:36:35 +01:00
muratayusuke
fd60528567 fix spec for ruby-1.8.7 2013-11-23 19:36:35 +01:00
muratayusuke
01934d5b00 replace .manifest to .homesick_subdir 2013-11-23 19:36:35 +01:00
muratayusuke
bba0e3ed7d support nested dir in .homesick_subdir 2013-11-23 19:36:35 +01:00
Eric West
7db0b13d30 refactor, cleanup and tweak 2013-11-23 19:36:35 +01:00
Eric West
b1c6c8f835 Handling edge cases
Covers only edge cases related to tracking, not yet
handling linking or updating. Getting a bit hairy,
must be refactored.
2013-11-23 19:36:35 +01:00
muratayusuke
7620f40cb2 symlink subdirs with .homesick_subdir 2013-11-23 19:36:34 +01:00
Eric West
cf9058be04 Track makes entries in .manifest
When a user tracks a file or directory that is in
a nested folder, Homesick creates a .manifest in the
user's castle (if there isn't one already) and adds
an entry listing the file or directory's parent
directory (if it isn't already listed).
2013-11-23 19:36:34 +01:00
Eric West
234532ebef Specs for track 2013-11-23 19:36:34 +01:00
Eric West
ccddbb1316 Track now properly traverses folder structure 2013-11-23 19:36:34 +01:00
muratayusuke
4ef315d4e2 Regenerate gemspec for version 0.8.1 2013-11-23 19:36:34 +01:00
muratayusuke
9b7fe331f6 update changelog 2013-11-23 19:36:34 +01:00
muratayusuke
eeff0b40fb update rake version
"rake spec" showed following warning
/home/muratayusuke/.rvm/gems/ruby-1.9.3-p392/gems/rake-0.8.7/lib/rake/alt_system.rb:32: Use RbConfig instead of obsolete and deprecated Config.
(in /mnt/projects/homesick)
/home/muratayusuke/.rvm/rubies/ruby-1.9.3-p392/bin/ruby -S rspec spec/homesick_spec.rb
so update rake version to fix it.
2013-11-23 19:36:34 +01:00
Eric West
0c933c0085 Fixes glob to work with 2.0.0
homesick list fails on ruby 2.0.0-rc2, I think because they fixed this
bug: https://bugs.ruby-lang.org/issues/6977, changing the way recursive
globs work. Test case:

```ruby
require "homesick"
require "pathname"

repos = Homesick.new.send :repos_dir

Dir.glob("#{repos}/**/*/.git") # => []

Dir.glob("#{repos}/**/*/.git", File::FNM_DOTMATCH) # => ["/home/eric/.homesick/repos/dotfiles/.git"]

```
This change, however, then broke 1.9.3, but removing the extra "/*"
works on both 1.9 and 2.0.
2013-11-23 19:36:34 +01:00
muratayusuke
a3d94fcca6 add build status to README 2013-11-23 19:36:33 +01:00
muratayusuke
9fe1d190da prepare for release 0.8.0 2013-11-23 19:36:33 +01:00
Jacob Buys
73981c2e75 Build with Travis CI 2013-11-23 19:36:33 +01:00
Josh Nichols
107dec388e Fix git_clone to work with github URLs like https://github.com/technicalpickles/dotpickles 2013-11-23 19:36:33 +01:00
muratayusuke
1df44aea40 enable recursive submodule 2013-11-23 19:36:33 +01:00
Jason Buckner
3bc623be7c perform a git add when doing a homesick track 2013-11-23 19:36:33 +01:00
Jason Buckner
123e6cf82d splits up castle commit from castle push for more fine-grained control 2013-11-23 19:34:08 +01:00
Jason Buckner
5e9d134021 update documentation for naming consistency 2013-11-23 19:34:08 +01:00
Jason Buckner
0a022fddcc fix homesick pull documentation 2013-11-23 19:34:08 +01:00
Jason Buckner
f18a4dc16f add homesick push to readme, a placeholder test, and removed the all option from git push 2013-11-23 19:34:07 +01:00
Jason Buckner
9ac754fd40 start adding git push functionality 2013-11-23 19:34:07 +01:00
Jorge
2667053fde Making git repos uri non greedy so it works with uris with / 2013-11-23 19:34:07 +01:00
Thilko Richter
54b2b9b339 correct typo 2012-09-06 21:23:45 +02:00
Thilko Richter
fede78c337 cleanup correctly 2012-09-06 21:12:31 +02:00
Thilko Richter
8a41dca46d destroy action implemented 2012-09-06 07:38:54 +02:00
12 changed files with 333 additions and 41 deletions

View File

@@ -2,4 +2,3 @@ language: ruby
rvm: rvm:
- 2.0.0 - 2.0.0
- 1.9.3 - 1.9.3
- 1.8.7

View File

@@ -1,3 +1,12 @@
#1.0.0
* Removed support for Ruby 1.8.7
* Added a version command
# 0.9.8
* Introduce new commands
* `homesick cd`
* `homesick open`
# 0.9.4 # 0.9.4
* Use https protocol instead of git protocol * Use https protocol instead of git protocol
* Introduce new commands * Introduce new commands

10
Gemfile
View File

@@ -1,3 +1,4 @@
require 'rbconfig'
source 'https://rubygems.org' source 'https://rubygems.org'
# Add dependencies required to use your gem here. # Add dependencies required to use your gem here.
@@ -8,10 +9,17 @@ gem "thor", ">= 0.14.0"
group :development do group :development do
gem "rake", ">= 0.8.7" gem "rake", ">= 0.8.7"
gem "rspec", "~> 2.10" gem "rspec", "~> 2.10"
gem "guard"
gem "guard-rspec"
gem "rb-readline", "~> 0.5.0"
gem "jeweler", ">= 1.6.2" gem "jeweler", ">= 1.6.2"
gem "rcov", :platforms => :mri_18 gem "rcov", :platforms => :mri_18
gem "simplecov", :platforms => :mri_19 gem "simplecov", :platforms => :mri_19
gem "test-construct" gem "test_construct"
gem "capture-output", "~> 1.0.0"
if RbConfig::CONFIG['host_os'] =~ /linux|freebsd|openbsd|sunos|solaris/
gem 'libnotify'
end
if RUBY_VERSION >= '1.9.2' if RUBY_VERSION >= '1.9.2'
gem "rubocop" gem "rubocop"
end end

6
Guardfile Normal file
View File

@@ -0,0 +1,6 @@
guard :rspec, :cmd => 'bundle exec rspec' do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^lib/homesick/.*\.rb}) { "spec" }
watch('spec/spec_helper.rb') { "spec" }
end

View File

@@ -1,8 +1,11 @@
# homesick # homesick
[![Gem Version](https://badge.fury.io/rb/homesick.png)](http://badge.fury.io/rb/homesick)
[![Build Status](https://travis-ci.org/technicalpickles/homesick.png?branch=master)](https://travis-ci.org/technicalpickles/homesick) [![Build Status](https://travis-ci.org/technicalpickles/homesick.png?branch=master)](https://travis-ci.org/technicalpickles/homesick)
[![Dependency Status](https://gemnasium.com/technicalpickles/homesick.png)](https://gemnasium.com/technicalpickles/homesick)
[![Code Climate](https://codeclimate.com/github/technicalpickles/homesick.png)](https://codeclimate.com/github/technicalpickles/homesick)
A man's home (directory) is his castle, so don't leave home with out it. Your home directory is your castle. Don't leave your dotfiles behind.
Homesick is sorta like [rip](http://github.com/defunkt/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. Homesick is sorta like [rip](http://github.com/defunkt/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.
@@ -27,11 +30,16 @@ With the castle cloned, you can now link its contents into your home dir:
homesick symlink pickled-vim homesick symlink pickled-vim
You can remove symlinks anytime when you don't need them anymore You can remove symlinks anytime when you don't need them anymore
homesick unlink pickled-vim homesick unlink pickled-vim
If you need to add further configuration steps you can add these in a file called '.homesickrc' in the root of a castle. Once you've cloned a castle with a .homesickrc run the configuration with:
homesick rc CASTLE
The contents of the .homesickrc file must be valid Ruby code as the file will be executed with Ruby's eval construct. The .homesickrc is also passed the current homesick object during its execution and this is available within the .homesickrc file as the 'self' variable.
If you're not sure what castles you have around, you can easily list them: If you're not sure what castles you have around, you can easily list them:
homesick list homesick list
@@ -48,10 +56,22 @@ To push your castle:
homesick push CASTLE homesick push CASTLE
To open a terminal in the root of a castle:
homesick cd CASTLE
To open your default editor in the root of a castle (the $EDITOR environment variable must be set):
homesick open CASTLE
Not sure what else homesick has up its sleeve? There's always the built in help: Not sure what else homesick has up its sleeve? There's always the built in help:
homesick help homesick help
If you ever want to see what version of homesick you have type:
homesick version|-v|--version
## .homesick_subdir ## .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. `homesick symlink` basically makes symlink to only first depth in `castle/home`. If you want to link nested files/directories, please use .homesick_subdir.
@@ -130,6 +150,13 @@ and castle
`-- .emacs.d `-- .emacs.d
`-- elisp `-- elisp
## Supported Ruby Versions
Homesick is tested on the following Ruby versions:
* 1.9.3
* 2.0.0
## Note on Patches/Pull Requests ## Note on Patches/Pull Requests
* Fork the project. * Fork the project.

View File

@@ -1,5 +1,6 @@
require 'rubygems' require 'rubygems'
require 'bundler' require 'bundler'
require_relative 'lib/homesick/version'
begin begin
Bundler.setup(:default, :development) Bundler.setup(:default, :development)
rescue Bundler::BundlerError => e rescue Bundler::BundlerError => e
@@ -12,9 +13,10 @@ require 'rake'
require 'jeweler' require 'jeweler'
Jeweler::Tasks.new do |gem| Jeweler::Tasks.new do |gem|
gem.name = "homesick" gem.name = "homesick"
gem.summary = %Q{A man's home is his castle. Never leave your dotfiles behind.} gem.summary = %Q{Your home directory is your castle. Don't leave your dotfiles behind.}
gem.description = %Q{ gem.description = %Q{
A man's home (directory) is his castle, so don't leave home with out it. Your home directory is your castle. Don't leave your dotfiles behind.
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. 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.
@@ -22,7 +24,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.9.7" gem.version = Homesick::Version::STRING
gem.license = "MIT" gem.license = "MIT"
# Have dependencies? Add them to Gemfile # Have dependencies? Add them to Gemfile

View File

@@ -2,15 +2,16 @@
# DO NOT EDIT THIS FILE DIRECTLY # DO NOT EDIT THIS FILE DIRECTLY
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec' # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
# stub: homesick 1.0.0 ruby lib
Gem::Specification.new do |s| Gem::Specification.new do |s|
s.name = "homesick" s.name = "homesick"
s.version = "0.9.7" s.version = "1.0.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-11-02" s.date = "2014-01-16"
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 Your home directory is your castle. Don't leave your dotfiles behind.\n \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"]
s.extra_rdoc_files = [ s.extra_rdoc_files = [
@@ -24,6 +25,7 @@ Gem::Specification.new do |s|
".travis.yml", ".travis.yml",
"ChangeLog.markdown", "ChangeLog.markdown",
"Gemfile", "Gemfile",
"Guardfile",
"LICENSE", "LICENSE",
"README.markdown", "README.markdown",
"Rakefile", "Rakefile",
@@ -32,6 +34,7 @@ Gem::Specification.new do |s|
"lib/homesick.rb", "lib/homesick.rb",
"lib/homesick/actions.rb", "lib/homesick/actions.rb",
"lib/homesick/shell.rb", "lib/homesick/shell.rb",
"lib/homesick/version.rb",
"spec/homesick_spec.rb", "spec/homesick_spec.rb",
"spec/spec.opts", "spec/spec.opts",
"spec/spec_helper.rb" "spec/spec_helper.rb"
@@ -39,39 +42,54 @@ Gem::Specification.new do |s|
s.homepage = "http://github.com/technicalpickles/homesick" s.homepage = "http://github.com/technicalpickles/homesick"
s.licenses = ["MIT"] s.licenses = ["MIT"]
s.require_paths = ["lib"] s.require_paths = ["lib"]
s.rubygems_version = "1.8.23" s.rubygems_version = "2.1.11"
s.summary = "A man's home is his castle. Never leave your dotfiles behind." s.summary = "Your home directory is your castle. Don't leave your dotfiles behind."
if s.respond_to? :specification_version then if s.respond_to? :specification_version then
s.specification_version = 3 s.specification_version = 4
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<thor>, [">= 0.14.0"]) s.add_runtime_dependency(%q<thor>, [">= 0.14.0"])
s.add_development_dependency(%q<rake>, [">= 0.8.7"]) s.add_development_dependency(%q<rake>, [">= 0.8.7"])
s.add_development_dependency(%q<rspec>, ["~> 2.10"]) s.add_development_dependency(%q<rspec>, ["~> 2.10"])
s.add_development_dependency(%q<guard>, [">= 0"])
s.add_development_dependency(%q<guard-rspec>, [">= 0"])
s.add_development_dependency(%q<rb-readline>, ["~> 0.5.0"])
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"]) s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
s.add_development_dependency(%q<rcov>, [">= 0"]) s.add_development_dependency(%q<rcov>, [">= 0"])
s.add_development_dependency(%q<simplecov>, [">= 0"]) s.add_development_dependency(%q<simplecov>, [">= 0"])
s.add_development_dependency(%q<test-construct>, [">= 0"]) s.add_development_dependency(%q<test_construct>, [">= 0"])
s.add_development_dependency(%q<capture-output>, ["~> 1.0.0"])
s.add_development_dependency(%q<libnotify>, [">= 0"])
s.add_development_dependency(%q<rubocop>, [">= 0"]) s.add_development_dependency(%q<rubocop>, [">= 0"])
else else
s.add_dependency(%q<thor>, [">= 0.14.0"]) s.add_dependency(%q<thor>, [">= 0.14.0"])
s.add_dependency(%q<rake>, [">= 0.8.7"]) s.add_dependency(%q<rake>, [">= 0.8.7"])
s.add_dependency(%q<rspec>, ["~> 2.10"]) s.add_dependency(%q<rspec>, ["~> 2.10"])
s.add_dependency(%q<guard>, [">= 0"])
s.add_dependency(%q<guard-rspec>, [">= 0"])
s.add_dependency(%q<rb-readline>, ["~> 0.5.0"])
s.add_dependency(%q<jeweler>, [">= 1.6.2"]) s.add_dependency(%q<jeweler>, [">= 1.6.2"])
s.add_dependency(%q<rcov>, [">= 0"]) s.add_dependency(%q<rcov>, [">= 0"])
s.add_dependency(%q<simplecov>, [">= 0"]) s.add_dependency(%q<simplecov>, [">= 0"])
s.add_dependency(%q<test-construct>, [">= 0"]) s.add_dependency(%q<test_construct>, [">= 0"])
s.add_dependency(%q<capture-output>, ["~> 1.0.0"])
s.add_dependency(%q<libnotify>, [">= 0"])
s.add_dependency(%q<rubocop>, [">= 0"]) s.add_dependency(%q<rubocop>, [">= 0"])
end end
else else
s.add_dependency(%q<thor>, [">= 0.14.0"]) s.add_dependency(%q<thor>, [">= 0.14.0"])
s.add_dependency(%q<rake>, [">= 0.8.7"]) s.add_dependency(%q<rake>, [">= 0.8.7"])
s.add_dependency(%q<rspec>, ["~> 2.10"]) s.add_dependency(%q<rspec>, ["~> 2.10"])
s.add_dependency(%q<guard>, [">= 0"])
s.add_dependency(%q<guard-rspec>, [">= 0"])
s.add_dependency(%q<rb-readline>, ["~> 0.5.0"])
s.add_dependency(%q<jeweler>, [">= 1.6.2"]) s.add_dependency(%q<jeweler>, [">= 1.6.2"])
s.add_dependency(%q<rcov>, [">= 0"]) s.add_dependency(%q<rcov>, [">= 0"])
s.add_dependency(%q<simplecov>, [">= 0"]) s.add_dependency(%q<simplecov>, [">= 0"])
s.add_dependency(%q<test-construct>, [">= 0"]) s.add_dependency(%q<test_construct>, [">= 0"])
s.add_dependency(%q<capture-output>, ["~> 1.0.0"])
s.add_dependency(%q<libnotify>, [">= 0"])
s.add_dependency(%q<rubocop>, [">= 0"]) s.add_dependency(%q<rubocop>, [">= 0"])
end end
end end

View File

@@ -1,11 +1,14 @@
# -*- encoding : utf-8 -*-
require 'thor' require 'thor'
class Homesick < Thor class Homesick < Thor
autoload :Shell, 'homesick/shell' autoload :Shell, 'homesick/shell'
autoload :Actions, 'homesick/actions' autoload :Actions, 'homesick/actions'
autoload :Version, 'homesick/version'
include Thor::Actions include Thor::Actions
include Homesick::Actions include Homesick::Actions
include Homesick::Version
add_runtime_options! add_runtime_options!
@@ -14,6 +17,9 @@ class Homesick < Thor
DEFAULT_CASTLE_NAME = 'dotfiles' DEFAULT_CASTLE_NAME = 'dotfiles'
map '-v' => :version
map '--version' => :version
def initialize(args = [], options = {}, config = {}) def initialize(args = [], options = {}, config = {})
super super
self.shell = Homesick::Shell.new self.shell = Homesick::Shell.new
@@ -89,9 +95,9 @@ class Homesick < Thor
end end
desc 'commit CASTLE', "Commit the specified castle's changes" desc 'commit CASTLE MESSAGE', "Commit the specified castle's changes"
def commit(name = DEFAULT_CASTLE_NAME) def commit(name = DEFAULT_CASTLE_NAME, message = nil)
commit_castle name commit_castle name, message
end end
@@ -227,6 +233,46 @@ class Homesick < Thor
end end
end end
desc "destroy CASTLE", "Delete all symlinks and remove the cloned repository"
def destroy(name)
check_castle_existance name, "destroy"
if shell.yes?("This will destroy your castle irreversible! Are you sure?")
unlink(name)
rm_rf repos_dir.join(name)
end
end
desc "cd CASTLE", "Open a new shell in the root of the given castle"
def cd(castle = DEFAULT_CASTLE_NAME)
check_castle_existance castle, "cd"
castle_dir = repos_dir.join(castle)
say_status "cd #{castle_dir.realpath}", "Opening a new shell in castle '#{castle}'. To return to the original one exit from the new shell.", :green
inside castle_dir do
system(ENV['SHELL'])
end
end
desc "open CASTLE", "Open your default editor in the root of the given castle"
def open(castle = DEFAULT_CASTLE_NAME)
if ! ENV['EDITOR']
say_status :error,"The $EDITOR environment variable must be set to use this command", :red
exit(1)
end
check_castle_existance castle, "open"
castle_dir = repos_dir.join(castle)
say_status "#{ENV['EDITOR']} #{castle_dir.realpath}", "Opening the root directory of castle '#{castle}' in editor '#{ENV['EDITOR']}'.", :green
inside castle_dir do
system(ENV['EDITOR'])
end
end
desc 'version', 'Display the current version of homesick'
def version
say Homesick::Version::STRING
end
protected protected
@@ -278,10 +324,10 @@ class Homesick < Thor
end end
end end
def commit_castle(castle) def commit_castle(castle, message)
check_castle_existance(castle, 'commit') check_castle_existance(castle, 'commit')
inside repos_dir.join(castle) do inside repos_dir.join(castle) do
git_commit_all git_commit_all :message => message
end end
end end
@@ -386,7 +432,7 @@ class Homesick < Thor
home_path = home_dir.join(relative_dir).join(path) home_path = home_dir.join(relative_dir).join(path)
yield(absolute_path, home_path) yield(absolute_path, home_path)
end end
end end
end end

View File

@@ -1,3 +1,4 @@
# -*- encoding : utf-8 -*-
class Homesick class Homesick
module Actions module Actions
# TODO move this to be more like thor's template, empty_directory, etc # TODO move this to be more like thor's template, empty_directory, etc
@@ -63,7 +64,11 @@ class Homesick
def git_commit_all(config = {}) def git_commit_all(config = {})
say_status 'git commit all', '', :green unless options[:quiet] say_status 'git commit all', '', :green unless options[:quiet]
system 'git commit -v -a' unless options[:pretend] if config[:message]
system "git commit -a -m '#{config[:message]}'" unless options[:pretend]
else
system 'git commit -v -a' unless options[:pretend]
end
end end
def git_add(file, config = {}) def git_add(file, config = {})
@@ -108,6 +113,37 @@ class Homesick
end end
end end
def rm(file)
say_status "rm #{file}", '', :green unless options[:quiet]
system "rm #{file}" if File.exists?(file)
end
def rm_rf(dir)
say_status "rm -rf #{dir}", '', :green unless options[:quiet]
system "rm -rf #{dir}"
end
def rm_link(target)
target = Pathname.new(target)
if target.symlink?
say_status :unlink, "#{target.expand_path}", :green unless options[:quiet]
FileUtils.rm_rf target
else
say_status :conflict, "#{target} is not a symlink", :red unless options[:quiet]
end
end
def rm(file)
say_status "rm #{file}", '', :green unless options[:quiet]
system "rm #{file}"
end
def rm_r(dir)
say_status "rm -r #{dir}", '', :green unless options[:quiet]
system "rm -r #{dir}"
end
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)

10
lib/homesick/version.rb Normal file
View File

@@ -0,0 +1,10 @@
# -*- encoding : utf-8 -*-
class Homesick
module Version
MAJOR = 1
MINOR = 0
PATCH = 0
STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
end
end

View File

@@ -1,4 +1,6 @@
# -*- encoding : utf-8 -*-
require 'spec_helper' require 'spec_helper'
require 'capture-output'
describe 'homesick' do describe 'homesick' do
let(:home) { create_construct } let(:home) { create_construct }
@@ -21,6 +23,7 @@ describe 'homesick' do
expect($stdout).to receive(:print) expect($stdout).to receive(:print)
expect($stdin).to receive(:gets).and_return('y') expect($stdin).to receive(:gets).and_return('y')
expect_any_instance_of(Thor::Shell::Basic).to receive(:say_status).with('eval', kind_of(Pathname))
homesick.clone local_repo homesick.clone local_repo
castles.join('some_repo').join('testing').should exist castles.join('some_repo').join('testing').should exist
@@ -53,8 +56,10 @@ describe 'homesick' do
it 'should clone git repo like file:///path/to.git' do it 'should clone git repo like file:///path/to.git' do
bare_repo = File.join(create_construct.to_s, 'dotfiles.git') bare_repo = File.join(create_construct.to_s, 'dotfiles.git')
system "git init --bare #{bare_repo} >/dev/null 2>&1" system "git init --bare #{bare_repo} >/dev/null 2>&1"
# Capture stderr to suppress message about cloning an empty repo.
homesick.clone "file://#{bare_repo}" Capture.stderr do
homesick.clone "file://#{bare_repo}"
end
File.directory?(File.join(home.to_s, '.homesick/repos/dotfiles')).should be_true File.directory?(File.join(home.to_s, '.homesick/repos/dotfiles')).should be_true
end end
@@ -114,6 +119,7 @@ describe 'homesick' do
file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }" file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }"
end end
expect_any_instance_of(Thor::Shell::Basic).to receive(:say_status).with('eval', kind_of(Pathname))
homesick.rc castle homesick.rc castle
castle.join('testing').should exist castle.join('testing').should exist
@@ -131,6 +137,7 @@ describe 'homesick' do
file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }" file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }"
end end
expect_any_instance_of(Thor::Shell::Basic).to receive(:say_status).with('eval skip', /not evaling.+/, :blue)
homesick.rc castle homesick.rc castle
castle.join('testing').should_not exist castle.join('testing').should_not exist
@@ -340,15 +347,42 @@ describe 'homesick' do
end end
describe 'status' do describe 'status' do
it 'should say "nothing to commit" when there are no changes' do
given_castle('castle_repo')
text = Capture.stdout { homesick.status('castle_repo') }
text.should =~ /nothing to commit \(create\/copy files and use "git add" to track\)$/
end
xit 'needs testing' it 'should say "Changes to be committed" when there are changes' do
given_castle('castle_repo')
some_rc_file = home.file '.some_rc_file'
homesick.track(some_rc_file.to_s, 'castle_repo')
text = Capture.stdout { homesick.status('castle_repo') }
text.should =~ /Changes to be committed:.*new file:\s*home\/.some_rc_file/m
end
end end
describe 'diff' do describe 'diff' do
it 'should output an empty message when there are no changes to commit' do
given_castle('castle_repo')
some_rc_file = home.file '.some_rc_file'
homesick.track(some_rc_file.to_s, 'castle_repo')
Capture.stdout { homesick.commit 'castle_repo', 'Adding a file to the test' }
text = Capture.stdout { homesick.diff('castle_repo') }
text.should eq('')
end
xit 'needs testing' it 'should output a diff message when there are changes to commit' do
given_castle('castle_repo')
some_rc_file = home.file '.some_rc_file'
homesick.track(some_rc_file.to_s, 'castle_repo')
Capture.stdout { homesick.commit 'castle_repo', 'Adding a file to the test' }
File.open(some_rc_file.to_s, 'w') do |file|
file.puts "Some test text"
end
text = Capture.stdout { homesick.diff('castle_repo') }
text.should =~ /diff --git.+Some test text$/m
end
end end
describe 'show_path' do describe 'show_path' do
@@ -362,25 +396,43 @@ describe 'homesick' do
end end
describe 'pull' do describe 'pull' do
it 'should perform a pull, submodule init and update when the given castle exists' do
given_castle('castle_repo')
homesick.stub(:system).once.with('git pull --quiet')
homesick.stub(:system).once.with('git submodule --quiet init')
homesick.stub(:system).once.with('git submodule --quiet update --init --recursive >/dev/null 2>&1')
homesick.pull 'castle_repo'
end
xit 'needs testing' it 'should print an error message when trying to pull a non-existant castle' do
homesick.should_receive("say_status").once.with(:error, /Could not pull castle_repo, expected \/tmp\/construct_container.* exist and contain dotfiles/, :red)
expect { homesick.pull "castle_repo" }.to raise_error(SystemExit)
end
describe '--all' do describe '--all' do
xit 'needs testing' it 'should pull each castle when invoked with --all' do
given_castle('castle_repo')
given_castle('glencairn')
homesick.stub(:system).exactly(2).times.with('git pull --quiet')
homesick.stub(:system).exactly(2).times.with('git submodule --quiet init')
homesick.stub(:system).exactly(2).times.with('git submodule --quiet update --init --recursive >/dev/null 2>&1')
Capture.stdout { Capture.stderr { homesick.invoke 'pull', [], all: true } }
end
end end
end end
describe 'commit' do
xit 'needs testing'
end
describe 'push' do describe 'push' do
it 'should perform a git push on the given castle' do
given_castle('castle_repo')
homesick.stub(:system).once.with('git push')
homesick.push 'castle_repo'
end
xit 'needs testing' it 'should print an error message when trying to push a non-existant castle' do
homesick.should_receive("say_status").once.with(:error, /Could not push castle_repo, expected \/tmp\/construct_container.* exist and contain dotfiles/, :red)
expect { homesick.push "castle_repo" }.to raise_error(SystemExit)
end
end end
describe 'track' do describe 'track' do
@@ -447,6 +499,16 @@ describe 'homesick' do
end end
end end
describe 'commit' do
it 'should have a commit message when the commit succeeds' do
given_castle('castle_repo')
some_rc_file = home.file '.a_random_rc_file'
homesick.track(some_rc_file.to_s, 'castle_repo')
text = Capture.stdout { homesick.commit('castle_repo', 'Test message') }
text.should =~ /^\[master \(root-commit\) \w+\] Test message/
end
end
describe 'subdir_file' do describe 'subdir_file' do
it 'should add the nested files parent to the subdir_file' do it 'should add the nested files parent to the subdir_file' do
@@ -490,4 +552,70 @@ describe 'homesick' do
end end
end end
end end
describe "destroy" do
it "removes the symlink files" do
expect_any_instance_of(Thor::Shell::Basic).to receive(:yes?).and_return('y')
given_castle("stronghold")
some_rc_file = home.file '.some_rc_file'
homesick.track(some_rc_file.to_s, "stronghold")
homesick.destroy('stronghold')
some_rc_file.should_not be_exist
end
it "deletes the cloned repository" do
expect_any_instance_of(Thor::Shell::Basic).to receive(:yes?).and_return('y')
castle = given_castle("stronghold")
some_rc_file = home.file '.some_rc_file'
homesick.track(some_rc_file.to_s, "stronghold")
homesick.destroy('stronghold')
castle.should_not be_exist
end
end
describe "cd" do
it "cd's to the root directory of the given castle" do
given_castle('castle_repo')
homesick.should_receive("inside").once.with(kind_of(Pathname)).and_yield
homesick.should_receive("system").once.with(ENV["SHELL"])
Capture.stdout { homesick.cd 'castle_repo' }
end
it "returns an error message when the given castle does not exist" do
homesick.should_receive("say_status").once.with(:error, /Could not cd castle_repo, expected \/tmp\/construct_container.* exist and contain dotfiles/, :red)
expect { homesick.cd "castle_repo" }.to raise_error(SystemExit)
end
end
describe "open" do
it "opens the system default editor in the root of the given castle" do
ENV.stub(:[]).and_call_original # Make sure calls to ENV use default values for most things...
ENV.stub(:[]).with('EDITOR').and_return('vim') # Set a default value for 'EDITOR' just in case none is set
given_castle 'castle_repo'
homesick.should_receive("inside").once.with(kind_of(Pathname)).and_yield
homesick.should_receive("system").once.with('vim')
Capture.stdout { homesick.open 'castle_repo' }
end
it "returns an error message when the $EDITOR environment variable is not set" do
ENV.stub(:[]).with('EDITOR').and_return(nil) # Set the default editor to make sure it fails.
homesick.should_receive("say_status").once.with(:error, "The $EDITOR environment variable must be set to use this command", :red)
expect { homesick.open "castle_repo" }.to raise_error(SystemExit)
end
it "returns an error message when the given castle does not exist" do
ENV.stub(:[]).with('EDITOR').and_return('vim') # Set a default just in case none is set
homesick.should_receive("say_status").once.with(:error, /Could not open castle_repo, expected \/tmp\/construct_container.* exist and contain dotfiles/, :red)
expect { homesick.open "castle_repo" }.to raise_error(SystemExit)
end
end
describe 'version' do
it 'should print the current version of homesick' do
text = Capture.stdout { homesick.version }
text.chomp.should =~ /\d+\.\d+\.\d+/
end
end
end end

View File

@@ -3,10 +3,11 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
require 'homesick' require 'homesick'
require 'rspec' require 'rspec'
require 'rspec/autorun' require 'rspec/autorun'
require 'construct' require 'test_construct'
require 'tempfile'
RSpec.configure do |config| RSpec.configure do |config|
config.include Construct::Helpers config.include TestConstruct::Helpers
config.before { ENV['HOME'] = home.to_s } config.before { ENV['HOME'] = home.to_s }
@@ -21,6 +22,8 @@ RSpec.configure do |config|
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 config user.email "test@test.com"'
system 'git config user.name "Test Name"'
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 if subdirs
subdir_file = castle.join(Homesick::SUBDIR_FILENAME) subdir_file = castle.join(Homesick::SUBDIR_FILENAME)