148 Commits

Author SHA1 Message Date
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
Trae Robrock
8874994feb Regenerate gemspec for version 0.9.7 2013-11-02 16:03:57 -07:00
Trae Robrock
5a8b92f556 Bump version 2013-11-02 16:03:51 -07:00
Trae Robrock
a65c2e6a1f Merge pull request #57 from boyvanduuren/issue_54
Git clone now uses config push.default upstream
2013-11-02 16:02:20 -07:00
bcd
2d0304feb1 Git clone now uses config push.default upstream 2013-11-02 21:15:51 +01:00
Trae Robrock
34fec63234 Merge pull request #56 from cball/update-readme
Remove symlink shorthand note in README
2013-10-30 15:20:33 -07:00
Chris Ball
1d5f27f567 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-10-30 14:01:40 -04:00
Trae Robrock
093db8bdac Regenerate gemspec for version 0.9.6 2013-10-18 07:18:15 -07:00
Trae Robrock
04602efd6e Bump version 2013-10-18 07:18:07 -07:00
Trae Robrock
3265de0c1d Regenerate gemspec for version 0.9.5 2013-10-18 07:17:39 -07:00
Trae Robrock
e4a428e0c5 Merge pull request #55 from mingkai0812/master
Change github-repo pattern to allow numbers for usernames/repos
2013-10-18 07:15:05 -07:00
mingkai
6cc28450a4 Change github-repo pattern to allow numbers for usernames/repos 2013-10-18 14:35:56 +02:00
Yusuke Murata
a0c7fbacb7 Merge pull request #53 from boyvanduuren/issue52
Change the destination for the github clone shortcut
2013-10-07 09:39:40 -07:00
bcd87
b750094934 Rake now passes on Ruby 1.8.7 on my machine 2013-09-24 08:15:56 +02:00
bcd87
d953a964cd Changed the spec, bundle exec rake works 2013-09-23 20:58:16 +02:00
bcd87
aa95ffac82 Using the homesick clone github shortcut now clones to ~/.homesick/repos/repo/, in stead of ~/.homesick/repos/username/repo/ 2013-09-23 20:30:10 +02:00
Trae Robrock
9c345828b0 Regenerate gemspec for version 0.9.5 2013-09-18 09:48:33 -07:00
Trae Robrock
59c137c653 Bump version the right way 2013-09-18 09:48:26 -07:00
Trae Robrock
3d405542af Regenerate gemspec for version 0.9.4 2013-09-18 09:47:46 -07:00
Trae Robrock
88ff4b85ce Bump version 2013-09-18 09:47:36 -07:00
Trae Robrock
461ac5f226 Merge pull request #51 from trobrock/fix-quoting
Files with parentheses in filename fail to symlink/track
2013-09-18 09:46:40 -07:00
Trae Robrock
a7d2d0a3f3 Add test for parens in filenames, and fixed 2013-09-18 09:25:09 -07:00
muratayusuke
191ce11d8e Regenerate gemspec for version 0.9.4 2013-07-31 23:41:49 +09:00
muratayusuke
0d28a3ef9b bump up version 2013-07-31 23:41:36 +09:00
muratayusuke
ac34249afe Regenerate gemspec for version 0.9.3 2013-07-31 23:40:22 +09:00
muratayusuke
d1f87be435 bump up version 2013-07-31 23:38:37 +09:00
muratayusuke
cbb6117d69 remove unused variables 2013-07-31 23:21:46 +09:00
muratayusuke
334a1db262 fix deprecated method: stub! -> stub 2013-07-31 23:14:51 +09:00
Yusuke Murata
e3bee69b27 Merge pull request #48 from trobrock/fix-homesickrc
Fix #19 homesickrc pathname needs a to_s to eval
2013-07-30 09:54:48 -07:00
Yusuke Murata
0ff5325e3e Merge pull request #43 from johnbellone/master
Default GitHub to use HTTPS protocol.
2013-07-21 10:47:31 -07:00
Yusuke Murata
40efb2f58a Merge pull request #47 from trobrock/unlink
Adding unlink function
2013-07-21 10:37:16 -07:00
Trae Robrock
4b20c7224e Add tests for the rc command 2013-07-17 08:04:34 -07:00
Trae Robrock
8e06beced6 Ignore vendor 2013-07-17 07:26:00 -07:00
Trae Robrock
b043f2a5ed Adding test for clone running homesickrc 2013-07-17 07:23:35 -07:00
John Bellone
3d59bc7a97 Update specs to for change to https vs. git protocol. 2013-07-17 07:28:39 -04:00
Trae Robrock
75dcad8ea4 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-07-16 21:13:09 -07:00
Trae Robrock
4b38eb848f Add unlink functionality 2013-07-16 20:50:36 -07:00
Trae Robrock
bfce04e63c Ignore vendor dir 2013-07-16 20:49:40 -07:00
John Bellone
92dc611bb1 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-06-21 09:45:26 -03: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
11 changed files with 428 additions and 43 deletions

1
.gitignore vendored
View File

@@ -45,3 +45,4 @@ pkg
*.iml *.iml
Gemfile.lock Gemfile.lock
vendor/

View File

@@ -1,3 +1,14 @@
# 0.9.8
* Introduce new commands
* `homesick cd`
* `homesick open`
# 0.9.4
* Use https protocol instead of git protocol
* Introduce new commands
* `homesick unlink`
* `homesick rc`
# 0.9.3 # 0.9.3
* Add recursive option to `homesick clone` * Add recursive option to `homesick clone`

View File

@@ -8,10 +8,14 @@ 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 RUBY_VERSION >= '1.9.2' if RUBY_VERSION >= '1.9.2'
gem "rubocop" gem "rubocop"
end end

9
Guardfile Normal file
View File

@@ -0,0 +1,9 @@
guard :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" }
notification :tmux, display_message: true
end

View File

@@ -2,7 +2,7 @@
[![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)
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,9 +27,10 @@ With the castle cloned, you can now link its contents into your home dir:
homesick symlink pickled-vim homesick symlink pickled-vim
If you use the shorthand syntax for GitHub repositories in your clone, please note you will instead need to run:
homesick symlink technicalpickles/pickled-vim You can remove symlinks anytime when you don't need them anymore
homesick unlink pickled-vim
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:
@@ -47,6 +48,14 @@ 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

View File

@@ -12,9 +12,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 +23,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.3" gem.version = "0.9.7"
gem.license = "MIT" gem.license = "MIT"
# Have dependencies? Add them to Gemfile # Have dependencies? Add them to Gemfile

View File

@@ -5,11 +5,11 @@
Gem::Specification.new do |s| Gem::Specification.new do |s|
s.name = "homesick" s.name = "homesick"
s.version = "0.9.3" s.version = "0.9.8"
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-07-06" s.date = "2013-12-31"
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"]
@@ -39,11 +39,11 @@ 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 = "2.0.3" s.rubygems_version = "1.8.23"
s.summary = "A man's home is his castle. Never leave your dotfiles behind." s.summary = "A man's home is his castle. Never leave your dotfiles behind."
if s.respond_to? :specification_version then if s.respond_to? :specification_version then
s.specification_version = 4 s.specification_version = 3
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"])

View File

@@ -1,3 +1,4 @@
# -*- encoding : utf-8 -*-
require 'thor' require 'thor'
class Homesick < Thor class Homesick < Thor
@@ -9,7 +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-z0-9_-]+\/[A-Za-z0-9_-]+)\Z/
SUBDIR_FILENAME = '.homesick_subdir' SUBDIR_FILENAME = '.homesick_subdir'
DEFAULT_CASTLE_NAME = 'dotfiles' DEFAULT_CASTLE_NAME = 'dotfiles'
@@ -33,8 +34,8 @@ class Homesick < Thor
ln_s uri, destination ln_s uri, destination
elsif uri =~ GITHUB_NAME_REPO_PATTERN elsif uri =~ GITHUB_NAME_REPO_PATTERN
destination = Pathname.new($1) destination = Pathname.new(uri).basename
git_clone "git://github.com/#{$1}.git", :destination => destination git_clone "https://github.com/#{$1}.git", :destination => destination
elsif uri =~ /%r([^%r]*?)(\.git)?\Z/ elsif uri =~ /%r([^%r]*?)(\.git)?\Z/
destination = Pathname.new($1) destination = Pathname.new($1)
git_clone uri git_clone uri
@@ -52,13 +53,21 @@ class Homesick < Thor
end end
end end
rc(destination)
end
end
desc 'rc CASTLE', 'Run the .homesickrc for the specified castle'
def rc(name = DEFAULT_CASTLE_NAME)
inside repos_dir do
destination = Pathname.new(name)
homesickrc = destination.join('.homesickrc').expand_path homesickrc = destination.join('.homesickrc').expand_path
if homesickrc.exist? if homesickrc.exist?
proceed = shell.yes?("#{uri} has a .homesickrc. Proceed with evaling it? (This could be destructive)") proceed = shell.yes?("#{name} has a .homesickrc. Proceed with evaling it? (This could be destructive)")
if proceed if proceed
shell.say_status 'eval', homesickrc shell.say_status 'eval', homesickrc
inside destination do inside destination do
eval homesickrc.read, binding, homesickrc.expand_path eval homesickrc.read, binding, homesickrc.expand_path.to_s
end end
else else
shell.say_status 'eval skip', "not evaling #{homesickrc}, #{destination} may need manual configuration", :blue shell.say_status 'eval skip', "not evaling #{homesickrc}, #{destination} may need manual configuration", :blue
@@ -81,16 +90,32 @@ 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
desc 'push CASTLE', 'Push the specified castle' desc 'push CASTLE', 'Push the specified castle'
def push(name = DEFAULT_CASTLE_NAME) def push(name = DEFAULT_CASTLE_NAME)
push_castle name push_castle name
end
desc 'unlink CASTLE', 'Unsymlinks all dotfiles from the specified castle'
def unlink(name = DEFAULT_CASTLE_NAME)
check_castle_existance(name, 'symlink')
inside castle_dir(name) do
subdirs = subdirs(name)
# unlink files
unsymlink_each(name, castle_dir(name), subdirs)
# unlink files in subdirs
subdirs.each do |subdir|
unsymlink_each(name, subdir, subdirs)
end
end
end end
desc 'symlink CASTLE', 'Symlinks all dotfiles from the specified castle' desc 'symlink CASTLE', 'Symlinks all dotfiles from the specified castle'
@@ -203,6 +228,41 @@ 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
protected protected
@@ -254,10 +314,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
@@ -331,7 +391,7 @@ class Homesick < Thor
first_p.mtime > second_p.mtime && !first_p.symlink? first_p.mtime > second_p.mtime && !first_p.symlink?
end end
def symlink_each(castle, basedir, subdirs) def each_file(castle, basedir, subdirs)
absolute_basedir = Pathname.new(basedir).expand_path absolute_basedir = Pathname.new(basedir).expand_path
inside basedir do inside basedir do
files = Pathname.glob('{.*,*}').reject{ |a| ['.', '..'].include?(a.to_s) } files = Pathname.glob('{.*,*}').reject{ |a| ['.', '..'].include?(a.to_s) }
@@ -360,8 +420,21 @@ class Homesick < Thor
relative_dir = absolute_basedir.relative_path_from(castle_home) relative_dir = absolute_basedir.relative_path_from(castle_home)
home_path = home_dir.join(relative_dir).join(path) home_path = home_dir.join(relative_dir).join(path)
yield(absolute_path, home_path)
end
end
end
def unsymlink_each(castle, basedir, subdirs)
each_file(castle, basedir, subdirs) do |absolute_path, home_path|
rm_link home_path
end
end
def symlink_each(castle, basedir, subdirs)
each_file(castle, basedir, subdirs) do |absolute_path, home_path|
ln_s absolute_path, home_path ln_s absolute_path, home_path
end 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
@@ -10,7 +11,7 @@ class Homesick
if ! destination.directory? if ! destination.directory?
say_status 'git clone', "#{repo} to #{destination.expand_path}", :green unless options[:quiet] say_status 'git clone', "#{repo} to #{destination.expand_path}", :green unless options[:quiet]
system "git clone -q --recursive #{repo} #{destination}" unless options[:pretend] system "git clone -q --config push.default=upstream --recursive #{repo} #{destination}" unless options[:pretend]
else else
say_status :exist, destination.expand_path, :blue unless options[:quiet] say_status :exist, destination.expand_path, :blue unless options[:quiet]
end end
@@ -63,12 +64,16 @@ 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]
if config[:message]
system "git commit -a -m '#{config[:message]}'" unless options[:pretend]
else
system 'git commit -v -a' unless options[:pretend] system 'git commit -v -a' unless options[:pretend]
end end
end
def git_add(file, config = {}) def git_add(file, config = {})
say_status 'git add file', '', :green unless options[:quiet] say_status 'git add file', '', :green unless options[:quiet]
system "git add #{file}" unless options[:pretend] system "git add '#{file}'" unless options[:pretend]
end end
def git_status(config = {}) def git_status(config = {})
@@ -89,14 +94,56 @@ class Homesick
say_status :conflict, "#{destination} exists", :red unless options[:quiet] say_status :conflict, "#{destination} exists", :red unless options[:quiet]
if options[:force] || shell.file_collision(destination) { source } if options[:force] || shell.file_collision(destination) { source }
system "mv #{source} #{destination}" unless options[:pretend] system "mv '#{source}' '#{destination}'" unless options[:pretend]
end end
else else
# this needs some sort of message here. # this needs some sort of message here.
system "mv #{source} #{destination}" unless options[:pretend] system "mv '#{source}' '#{destination}'" unless options[:pretend]
end end
end 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}" 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)
@@ -109,19 +156,19 @@ class Homesick
say_status :conflict, "#{destination} exists and points to #{destination.readlink}", :red unless options[:quiet] say_status :conflict, "#{destination} exists and points to #{destination.readlink}", :red unless options[:quiet]
if options[:force] || shell.file_collision(destination) { source } if options[:force] || shell.file_collision(destination) { source }
system "ln -nsf #{source} #{destination}" unless options[:pretend] system "ln -nsf '#{source}' '#{destination}'" unless options[:pretend]
end end
end end
elsif destination.exist? elsif destination.exist?
say_status :conflict, "#{destination} exists", :red unless options[:quiet] say_status :conflict, "#{destination} exists", :red unless options[:quiet]
if options[:force] || shell.file_collision(destination) { source } if options[:force] || shell.file_collision(destination) { source }
system "rm -rf #{destination}" unless options[:pretend] system "rm -rf '#{destination}'" unless options[:pretend]
system "ln -sf #{source} #{destination}" unless options[:pretend] system "ln -sf '#{source}' '#{destination}'" unless options[:pretend]
end end
else else
say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green unless options[:quiet] say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green unless options[:quiet]
system "ln -s #{source} #{destination}" unless options[:pretend] system "ln -s '#{source}' '#{destination}'" unless options[:pretend]
end end
end end
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 }
@@ -8,9 +10,25 @@ describe 'homesick' do
let(:homesick) { Homesick.new } let(:homesick) { Homesick.new }
before { homesick.stub!(:repos_dir).and_return(castles) } before { homesick.stub(:repos_dir).and_return(castles) }
describe 'clone' do describe 'clone' do
context 'has a .homesickrc' do
it 'should run the .homesickrc' do
somewhere = create_construct
local_repo = somewhere.directory('some_repo')
local_repo.file('.homesickrc') do |file|
file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }"
end
expect($stdout).to receive(:print)
expect($stdin).to receive(:gets).and_return('y')
homesick.clone local_repo
castles.join('some_repo').join('testing').should exist
end
end
context 'of a file' do context 'of a file' do
it 'should symlink existing directories' do it 'should symlink existing directories' do
somewhere = create_construct somewhere = create_construct
@@ -78,12 +96,50 @@ describe 'homesick' do
end end
it 'should clone a github repo' do it 'should clone a github repo' do
homesick.should_receive(:git_clone).with('git://github.com/wfarr/dotfiles.git', :destination => Pathname.new('wfarr/dotfiles')) homesick.should_receive(:git_clone).with('https://github.com/wfarr/dotfiles.git', :destination => Pathname.new('dotfiles'))
homesick.clone 'wfarr/dotfiles' homesick.clone 'wfarr/dotfiles'
end end
end end
describe 'rc' do
let(:castle) { given_castle('glencairn') }
context 'when told to do so' do
before do
expect($stdout).to receive(:print)
expect($stdin).to receive(:gets).and_return('y')
end
it 'executes the .homesickrc' do
castle.file('.homesickrc') do |file|
file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }"
end
homesick.rc castle
castle.join('testing').should exist
end
end
context 'when told not to do so' do
before do
expect($stdout).to receive(:print)
expect($stdin).to receive(:gets).and_return('n')
end
it 'does not execute the .homesickrc' do
castle.file('.homesickrc') do |file|
file << "File.open(Dir.pwd + '/testing', 'w') { |f| f.print 'testing' }"
end
homesick.rc castle
castle.join('testing').should_not exist
end
end
end
describe 'symlink' do describe 'symlink' do
let(:castle) { given_castle('glencairn') } let(:castle) { given_castle('glencairn') }
@@ -188,6 +244,91 @@ describe 'homesick' do
end end
end end
describe 'unlink' do
let(:castle) { given_castle('glencairn') }
it 'unlinks dotfiles in the home folder' do
castle.file('.some_dotfile')
homesick.symlink('glencairn')
homesick.unlink('glencairn')
home.join('.some_dotfile').should_not exist
end
it 'unlinks non-dotfiles from the home folder' do
castle.file('bin')
homesick.symlink('glencairn')
homesick.unlink('glencairn')
home.join('bin').should_not exist
end
context "with '.config' in .homesick_subdir" do
let(:castle) { given_castle('glencairn', ['.config']) }
it 'can unlink sub directories' do
castle.directory('.config').file('.some_dotfile')
homesick.symlink('glencairn')
homesick.unlink('glencairn')
home_dotdir = home.join('.config')
home_dotdir.should exist
home_dotdir.join('.some_dotfile').should_not exist
end
end
context "with '.config/appA' in .homesick_subdir" do
let(:castle) { given_castle('glencairn', ['.config/appA']) }
it 'can unsymlink in nested sub directory' do
castle.directory('.config').directory('appA').file('.some_dotfile')
homesick.symlink('glencairn')
homesick.unlink('glencairn')
home_dotdir = home.join('.config').join('appA')
home_dotdir.should exist
home_dotdir.join('.some_dotfile').should_not exist
end
end
context "with '.config' and '.config/someapp' in .homesick_subdir" do
let(:castle) { given_castle('glencairn', ['.config', '.config/someapp']) }
it 'can unsymlink under both of .config and .config/someapp' do
config_dir = castle.directory('.config')
config_dir.file('.some_dotfile')
config_dir.directory('someapp').file('.some_appfile')
homesick.symlink('glencairn')
homesick.unlink('glencairn')
home_config_dir = home.join('.config')
home_someapp_dir = home_config_dir.join('someapp')
home_config_dir.should exist
home_config_dir.join('.some_dotfile').should_not exist
home_someapp_dir.should exist
home_someapp_dir.join('.some_appfile').should_not exist
end
end
context "when call with no castle name" do
let(:castle) { given_castle('dotfiles') }
it 'using default castle name: "dotfiles"' do
castle.file('.some_dotfile')
homesick.symlink
homesick.unlink
home.join('.some_dotfile').should_not exist
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')
@@ -201,9 +342,19 @@ 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
@@ -232,12 +383,6 @@ describe 'homesick' do
end end
describe 'commit' do
xit 'needs testing'
end
describe 'push' do describe 'push' do
xit 'needs testing' xit 'needs testing'
@@ -258,6 +403,19 @@ describe 'homesick' do
some_rc_file.readlink.should == tracked_file some_rc_file.readlink.should == tracked_file
end end
it 'should handle files with parens' do
castle = given_castle('castle_repo')
some_rc_file = home.file 'Default (Linux).sublime-keymap'
homesick.track(some_rc_file.to_s, 'castle_repo')
tracked_file = castle.join('Default (Linux).sublime-keymap')
tracked_file.should exist
some_rc_file.readlink.should == tracked_file
end
it 'should track a file in nested folder structure' do it 'should track a file in nested folder structure' do
castle = given_castle('castle_repo') castle = given_castle('castle_repo')
@@ -295,6 +453,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
@@ -338,4 +506,63 @@ 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
end end

View File

@@ -4,6 +4,7 @@ require 'homesick'
require 'rspec' require 'rspec'
require 'rspec/autorun' require 'rspec/autorun'
require 'construct' require 'construct'
require 'tempfile'
RSpec.configure do |config| RSpec.configure do |config|
config.include Construct::Helpers config.include Construct::Helpers
@@ -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)