homesick 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.travis.yml +1 -0
 - data/ChangeLog.markdown +6 -0
 - data/Gemfile +3 -0
 - data/homesick.gemspec +3 -3
 - data/lib/homesick.rb +1 -1
 - data/lib/homesick/actions/file_actions.rb +6 -8
 - data/lib/homesick/actions/git_actions.rb +10 -10
 - data/lib/homesick/cli.rb +28 -36
 - data/lib/homesick/utils.rb +11 -11
 - data/lib/homesick/version.rb +1 -1
 - data/spec/homesick_cli_spec.rb +42 -69
 - metadata +4 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b921342f64064305be6b441b198208c20c3d6477
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8dee41e99c1fa490e46ff6aa3824b42c90bf9542
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 477bdf748078093e787b8ac05b400dc7841ab9510813f850a608a5363804a91d463b71753cddd6c751b093b549040dd9d3854c95a8949e659f70e74a8407c192
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 0cca501be8f34e94fdc02a86c7dc6e2d4ac96d707ad32289f5177b579906b4f74ad1484b3997c8c5acceb375e007f726838bd248609df4b659321671b5efcc58
         
     | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/ChangeLog.markdown
    CHANGED
    
    | 
         @@ -1,3 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #1.1.3
         
     | 
| 
      
 2 
     | 
    
         
            +
             * Allow a destinaton to be passed when cloning a castle
         
     | 
| 
      
 3 
     | 
    
         
            +
             * Make sure `homesick edit` opens default editor in the root of the given castle
         
     | 
| 
      
 4 
     | 
    
         
            +
             * Fixed bug when diffing edited files
         
     | 
| 
      
 5 
     | 
    
         
            +
             * Fixed crashing bug when attempting to diff directories
         
     | 
| 
      
 6 
     | 
    
         
            +
             * Ensure that messages are escaped correctly on `git commit all`
         
     | 
| 
       1 
7 
     | 
    
         
             
            #1.1.2
         
     | 
| 
       2 
8 
     | 
    
         
             
             * Added '--force' option to the rc command to bypass confirmation checks when running a .homesickrc file
         
     | 
| 
       3 
9 
     | 
    
         
             
             * Added a check to make sure that a minimum of Git 1.8.0 is installed. This stops Homesick failing silently if Git is not installed.
         
     | 
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -19,6 +19,9 @@ group :development do 
     | 
|
| 
       19 
19 
     | 
    
         
             
              if RbConfig::CONFIG['host_os'] =~ /linux|freebsd|openbsd|sunos|solaris/
         
     | 
| 
       20 
20 
     | 
    
         
             
                gem 'libnotify'
         
     | 
| 
       21 
21 
     | 
    
         
             
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
              if RbConfig::CONFIG['host_os'] =~ /darwin|mac os/
         
     | 
| 
      
 23 
     | 
    
         
            +
                gem 'terminal-notifier-guard', '~> 1.6.1'
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
       22 
25 
     | 
    
         
             
              if RUBY_VERSION >= '1.9.2'
         
     | 
| 
       23 
26 
     | 
    
         
             
                gem "rubocop"
         
     | 
| 
       24 
27 
     | 
    
         
             
              end
         
     | 
    
        data/homesick.gemspec
    CHANGED
    
    | 
         @@ -2,16 +2,16 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            # DO NOT EDIT THIS FILE DIRECTLY
         
     | 
| 
       3 
3 
     | 
    
         
             
            # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
         
     | 
| 
       4 
4 
     | 
    
         
             
            # -*- encoding: utf-8 -*-
         
     | 
| 
       5 
     | 
    
         
            -
            # stub: homesick 1.1. 
     | 
| 
      
 5 
     | 
    
         
            +
            # stub: homesick 1.1.3 ruby lib
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       8 
8 
     | 
    
         
             
              s.name = "homesick"
         
     | 
| 
       9 
     | 
    
         
            -
              s.version = "1.1. 
     | 
| 
      
 9 
     | 
    
         
            +
              s.version = "1.1.3"
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       12 
12 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.authors = ["Joshua Nichols", "Yusuke Murata"]
         
     | 
| 
       14 
     | 
    
         
            -
              s.date = "2015- 
     | 
| 
      
 14 
     | 
    
         
            +
              s.date = "2015-10-31"
         
     | 
| 
       15 
15 
     | 
    
         
             
              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  "
         
     | 
| 
       16 
16 
     | 
    
         
             
              s.email = ["josh@technicalpickles.com", "info@muratayusuke.com"]
         
     | 
| 
       17 
17 
     | 
    
         
             
              s.executables = ["homesick"]
         
     | 
    
        data/lib/homesick.rb
    CHANGED
    
    | 
         @@ -7,7 +7,7 @@ require 'homesick/cli' 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            # Homesick's top-level module
         
     | 
| 
       9 
9 
     | 
    
         
             
            module Homesick
         
     | 
| 
       10 
     | 
    
         
            -
              GITHUB_NAME_REPO_PATTERN =  
     | 
| 
      
 10 
     | 
    
         
            +
              GITHUB_NAME_REPO_PATTERN = %r{\A([A-Za-z0-9_-]+/[A-Za-z0-9_-]+)\Z}
         
     | 
| 
       11 
11 
     | 
    
         
             
              SUBDIR_FILENAME = '.homesick_subdir'
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
              DEFAULT_CASTLE_NAME = 'dotfiles'
         
     | 
| 
         @@ -3,16 +3,14 @@ module Homesick 
     | 
|
| 
       3 
3 
     | 
    
         
             
              module Actions
         
     | 
| 
       4 
4 
     | 
    
         
             
                # File-related helper methods for Homesick
         
     | 
| 
       5 
5 
     | 
    
         
             
                module FileActions
         
     | 
| 
       6 
     | 
    
         
            -
                  def mv(source, destination 
     | 
| 
      
 6 
     | 
    
         
            +
                  def mv(source, destination)
         
     | 
| 
       7 
7 
     | 
    
         
             
                    source = Pathname.new(source)
         
     | 
| 
       8 
8 
     | 
    
         
             
                    destination = Pathname.new(destination + source.basename)
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                     
     | 
| 
      
 9 
     | 
    
         
            +
                    case
         
     | 
| 
      
 10 
     | 
    
         
            +
                    when destination.exist? && (options[:force] || shell.file_collision(destination) { source })
         
     | 
| 
       11 
11 
     | 
    
         
             
                      say_status :conflict, "#{destination} exists", :red
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                      FileUtils.mv source, destination if (options[:force] || shell.file_collision(destination) { source }) && !options[:pretend]
         
     | 
| 
      
 12 
     | 
    
         
            +
                      FileUtils.mv source, destination unless options[:pretend]
         
     | 
| 
       14 
13 
     | 
    
         
             
                    else
         
     | 
| 
       15 
     | 
    
         
            -
                      # this needs some sort of message here.
         
     | 
| 
       16 
14 
     | 
    
         
             
                      FileUtils.mv source, destination unless options[:pretend]
         
     | 
| 
       17 
15 
     | 
    
         
             
                    end
         
     | 
| 
       18 
16 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -43,7 +41,7 @@ module Homesick 
     | 
|
| 
       43 
41 
     | 
    
         
             
                    FileUtils.rm_r dir
         
     | 
| 
       44 
42 
     | 
    
         
             
                  end
         
     | 
| 
       45 
43 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                  def ln_s(source, destination 
     | 
| 
      
 44 
     | 
    
         
            +
                  def ln_s(source, destination)
         
     | 
| 
       47 
45 
     | 
    
         
             
                    source = Pathname.new(source)
         
     | 
| 
       48 
46 
     | 
    
         
             
                    destination = Pathname.new(destination)
         
     | 
| 
       49 
47 
     | 
    
         
             
                    FileUtils.mkdir_p destination.dirname
         
     | 
| 
         @@ -75,7 +73,7 @@ module Homesick 
     | 
|
| 
       75 
73 
     | 
    
         
             
                    when :conflict
         
     | 
| 
       76 
74 
     | 
    
         
             
                      say_status :conflict, "#{destination} exists", :red
         
     | 
| 
       77 
75 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                      if collision_accepted?(destination)
         
     | 
| 
      
 76 
     | 
    
         
            +
                      if collision_accepted?(destination, source)
         
     | 
| 
       79 
77 
     | 
    
         
             
                        FileUtils.rm_r destination, force: true unless options[:pretend]
         
     | 
| 
       80 
78 
     | 
    
         
             
                        FileUtils.ln_s source, destination, force: true unless options[:pretend]
         
     | 
| 
       81 
79 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -14,7 +14,7 @@ module Homesick 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  def git_version_correct?
         
     | 
| 
       15 
15 
     | 
    
         
             
                    info = `git --version`.scan(/(\d+)\.(\d+)\.(\d+)/).flatten.map(&:to_i)
         
     | 
| 
       16 
16 
     | 
    
         
             
                    return false unless info.count == 3
         
     | 
| 
       17 
     | 
    
         
            -
                    current_version = Hash[ 
     | 
| 
      
 17 
     | 
    
         
            +
                    current_version = Hash[[:major, :minor, :patch].zip(info)]
         
     | 
| 
       18 
18 
     | 
    
         
             
                    return true if current_version.eql?(MIN_VERSION)
         
     | 
| 
       19 
19 
     | 
    
         
             
                    return true if current_version[:major] > MIN_VERSION[:major]
         
     | 
| 
       20 
20 
     | 
    
         
             
                    return true if current_version[:major] == MIN_VERSION[:major] && current_version[:minor] > MIN_VERSION[:minor]
         
     | 
| 
         @@ -27,7 +27,7 @@ module Homesick 
     | 
|
| 
       27 
27 
     | 
    
         
             
                    config ||= {}
         
     | 
| 
       28 
28 
     | 
    
         
             
                    destination = config[:destination] || File.basename(repo, '.git')
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
                    destination = Pathname.new(destination) unless destination. 
     | 
| 
      
 30 
     | 
    
         
            +
                    destination = Pathname.new(destination) unless destination.is_a?(Pathname)
         
     | 
| 
       31 
31 
     | 
    
         
             
                    FileUtils.mkdir_p destination.dirname
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                    if destination.directory?
         
     | 
| 
         @@ -65,22 +65,22 @@ module Homesick 
     | 
|
| 
       65 
65 
     | 
    
         
             
                    end
         
     | 
| 
       66 
66 
     | 
    
         
             
                  end
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
                  def git_submodule_init 
     | 
| 
      
 68 
     | 
    
         
            +
                  def git_submodule_init
         
     | 
| 
       69 
69 
     | 
    
         
             
                    say_status 'git submodule', 'init', :green
         
     | 
| 
       70 
70 
     | 
    
         
             
                    system 'git submodule --quiet init'
         
     | 
| 
       71 
71 
     | 
    
         
             
                  end
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                  def git_submodule_update 
     | 
| 
      
 73 
     | 
    
         
            +
                  def git_submodule_update
         
     | 
| 
       74 
74 
     | 
    
         
             
                    say_status 'git submodule', 'update', :green
         
     | 
| 
       75 
75 
     | 
    
         
             
                    system 'git submodule --quiet update --init --recursive >/dev/null 2>&1'
         
     | 
| 
       76 
76 
     | 
    
         
             
                  end
         
     | 
| 
       77 
77 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                  def git_pull 
     | 
| 
      
 78 
     | 
    
         
            +
                  def git_pull
         
     | 
| 
       79 
79 
     | 
    
         
             
                    say_status 'git pull', '', :green
         
     | 
| 
       80 
80 
     | 
    
         
             
                    system 'git pull --quiet'
         
     | 
| 
       81 
81 
     | 
    
         
             
                  end
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                  def git_push 
     | 
| 
      
 83 
     | 
    
         
            +
                  def git_push
         
     | 
| 
       84 
84 
     | 
    
         
             
                    say_status 'git push', '', :green
         
     | 
| 
       85 
85 
     | 
    
         
             
                    system 'git push'
         
     | 
| 
       86 
86 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -88,23 +88,23 @@ module Homesick 
     | 
|
| 
       88 
88 
     | 
    
         
             
                  def git_commit_all(config = {})
         
     | 
| 
       89 
89 
     | 
    
         
             
                    say_status 'git commit all', '', :green
         
     | 
| 
       90 
90 
     | 
    
         
             
                    if config[:message]
         
     | 
| 
       91 
     | 
    
         
            -
                      system  
     | 
| 
      
 91 
     | 
    
         
            +
                      system %(git commit -a -m "#{config[:message]}")
         
     | 
| 
       92 
92 
     | 
    
         
             
                    else
         
     | 
| 
       93 
93 
     | 
    
         
             
                      system 'git commit -v -a'
         
     | 
| 
       94 
94 
     | 
    
         
             
                    end
         
     | 
| 
       95 
95 
     | 
    
         
             
                  end
         
     | 
| 
       96 
96 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                  def git_add(file 
     | 
| 
      
 97 
     | 
    
         
            +
                  def git_add(file)
         
     | 
| 
       98 
98 
     | 
    
         
             
                    say_status 'git add file', '', :green
         
     | 
| 
       99 
99 
     | 
    
         
             
                    system "git add '#{file}'"
         
     | 
| 
       100 
100 
     | 
    
         
             
                  end
         
     | 
| 
       101 
101 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
                  def git_status 
     | 
| 
      
 102 
     | 
    
         
            +
                  def git_status
         
     | 
| 
       103 
103 
     | 
    
         
             
                    say_status 'git status', '', :green
         
     | 
| 
       104 
104 
     | 
    
         
             
                    system 'git status'
         
     | 
| 
       105 
105 
     | 
    
         
             
                  end
         
     | 
| 
       106 
106 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
                  def git_diff 
     | 
| 
      
 107 
     | 
    
         
            +
                  def git_diff
         
     | 
| 
       108 
108 
     | 
    
         
             
                    say_status 'git diff', '', :green
         
     | 
| 
       109 
109 
     | 
    
         
             
                    system 'git diff'
         
     | 
| 
       110 
110 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/homesick/cli.rb
    CHANGED
    
    | 
         @@ -25,38 +25,37 @@ module Homesick 
     | 
|
| 
       25 
25 
     | 
    
         
             
                    exit(1)
         
     | 
| 
       26 
26 
     | 
    
         
             
                  end
         
     | 
| 
       27 
27 
     | 
    
         
             
                  # Hack in support for diffing symlinks
         
     | 
| 
       28 
     | 
    
         
            -
                   
     | 
| 
       29 
     | 
    
         
            -
                  class << shell
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                      end
         
     | 
| 
       38 
     | 
    
         
            -
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  # Also adds support for checking if destination or content is a directory
         
     | 
| 
      
 29 
     | 
    
         
            +
                  shell_metaclass = class << shell; self; end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  shell_metaclass.send(:define_method, :show_diff) do |destination, content|
         
     | 
| 
      
 31 
     | 
    
         
            +
                    destination = Pathname.new(destination)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    content = Pathname.new(content)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    return 'Unable to create diff: destination or content is a directory' if destination.directory? || content.directory?
         
     | 
| 
      
 34 
     | 
    
         
            +
                    return super(destination, content) unless destination.symlink?
         
     | 
| 
      
 35 
     | 
    
         
            +
                    say "- #{destination.readlink}", :red, true
         
     | 
| 
      
 36 
     | 
    
         
            +
                    say "+ #{content.expand_path}", :green, true
         
     | 
| 
       39 
37 
     | 
    
         
             
                  end
         
     | 
| 
       40 
38 
     | 
    
         
             
                end
         
     | 
| 
       41 
39 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                desc 'clone URI', 'Clone +uri+ as a castle for homesick'
         
     | 
| 
       43 
     | 
    
         
            -
                def clone(uri)
         
     | 
| 
      
 40 
     | 
    
         
            +
                desc 'clone URI CASTLE_NAME', 'Clone +uri+ as a castle with name CASTLE_NAME for homesick'
         
     | 
| 
      
 41 
     | 
    
         
            +
                def clone(uri, destination=nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  destination = Pathname.new(destination) unless destination.nil?
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
       44 
44 
     | 
    
         
             
                  inside repos_dir do
         
     | 
| 
       45 
     | 
    
         
            -
                    destination = nil
         
     | 
| 
       46 
45 
     | 
    
         
             
                    if File.exist?(uri)
         
     | 
| 
       47 
46 
     | 
    
         
             
                      uri = Pathname.new(uri).expand_path
         
     | 
| 
       48 
47 
     | 
    
         
             
                      fail "Castle already cloned to #{uri}" if uri.to_s.start_with?(repos_dir.to_s)
         
     | 
| 
       49 
48 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                      destination = uri.basename
         
     | 
| 
      
 49 
     | 
    
         
            +
                      destination = uri.basename if destination.nil?
         
     | 
| 
       51 
50 
     | 
    
         | 
| 
       52 
51 
     | 
    
         
             
                      ln_s uri, destination
         
     | 
| 
       53 
52 
     | 
    
         
             
                    elsif uri =~ GITHUB_NAME_REPO_PATTERN
         
     | 
| 
       54 
     | 
    
         
            -
                      destination = Pathname.new(uri).basename
         
     | 
| 
      
 53 
     | 
    
         
            +
                      destination = Pathname.new(uri).basename if destination.nil?
         
     | 
| 
       55 
54 
     | 
    
         
             
                      git_clone "https://github.com/#{Regexp.last_match[1]}.git",
         
     | 
| 
       56 
55 
     | 
    
         
             
                                destination: destination
         
     | 
| 
       57 
56 
     | 
    
         
             
                    elsif uri =~ /%r([^%r]*?)(\.git)?\Z/ || uri =~ /[^:]+:([^:]+)(\.git)?\Z/
         
     | 
| 
       58 
     | 
    
         
            -
                      destination = Pathname.new(Regexp.last_match[1])
         
     | 
| 
       59 
     | 
    
         
            -
                      git_clone uri
         
     | 
| 
      
 57 
     | 
    
         
            +
                      destination = Pathname.new(Regexp.last_match[1].gsub(/\.git$/, '')).basename if destination.nil?
         
     | 
| 
      
 58 
     | 
    
         
            +
                      git_clone uri, destination: destination
         
     | 
| 
       60 
59 
     | 
    
         
             
                    else
         
     | 
| 
       61 
60 
     | 
    
         
             
                      fail "Unknown URI format: #{uri}"
         
     | 
| 
       62 
61 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -73,18 +72,12 @@ module Homesick 
     | 
|
| 
       73 
72 
     | 
    
         
             
                  inside repos_dir do
         
     | 
| 
       74 
73 
     | 
    
         
             
                    destination = Pathname.new(name)
         
     | 
| 
       75 
74 
     | 
    
         
             
                    homesickrc = destination.join('.homesickrc').expand_path
         
     | 
| 
       76 
     | 
    
         
            -
                     
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                        end
         
     | 
| 
       83 
     | 
    
         
            -
                      else
         
     | 
| 
       84 
     | 
    
         
            -
                        say_status 'eval skip',
         
     | 
| 
       85 
     | 
    
         
            -
                                   "not evaling #{homesickrc}, #{destination} may need manual configuration",
         
     | 
| 
       86 
     | 
    
         
            -
                                   :blue
         
     | 
| 
       87 
     | 
    
         
            -
                      end
         
     | 
| 
      
 75 
     | 
    
         
            +
                    return unless homesickrc.exist?
         
     | 
| 
      
 76 
     | 
    
         
            +
                    proceed = options[:force] || shell.yes?("#{name} has a .homesickrc. Proceed with evaling it? (This could be destructive)")
         
     | 
| 
      
 77 
     | 
    
         
            +
                    return say_status 'eval skip', "not evaling #{homesickrc}, #{destination} may need manual configuration", :blue unless proceed
         
     | 
| 
      
 78 
     | 
    
         
            +
                    say_status 'eval', homesickrc
         
     | 
| 
      
 79 
     | 
    
         
            +
                    inside destination do
         
     | 
| 
      
 80 
     | 
    
         
            +
                      eval homesickrc.read, binding, homesickrc.expand_path.to_s
         
     | 
| 
       88 
81 
     | 
    
         
             
                    end
         
     | 
| 
       89 
82 
     | 
    
         
             
                  end
         
     | 
| 
       90 
83 
     | 
    
         
             
                end
         
     | 
| 
         @@ -252,11 +245,10 @@ module Homesick 
     | 
|
| 
       252 
245 
     | 
    
         
             
                desc 'destroy CASTLE', 'Delete all symlinks and remove the cloned repository'
         
     | 
| 
       253 
246 
     | 
    
         
             
                def destroy(name)
         
     | 
| 
       254 
247 
     | 
    
         
             
                  check_castle_existance name, 'destroy'
         
     | 
| 
      
 248 
     | 
    
         
            +
                  return unless shell.yes?('This will destroy your castle irreversible! Are you sure?')
         
     | 
| 
       255 
249 
     | 
    
         | 
| 
       256 
     | 
    
         
            -
                   
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
                    rm_rf repos_dir.join(name)
         
     | 
| 
       259 
     | 
    
         
            -
                  end
         
     | 
| 
      
 250 
     | 
    
         
            +
                  unlink(name)
         
     | 
| 
      
 251 
     | 
    
         
            +
                  rm_rf repos_dir.join(name)
         
     | 
| 
       260 
252 
     | 
    
         
             
                end
         
     | 
| 
       261 
253 
     | 
    
         | 
| 
       262 
254 
     | 
    
         
             
                desc 'cd CASTLE', 'Open a new shell in the root of the given castle'
         
     | 
| 
         @@ -283,11 +275,11 @@ module Homesick 
     | 
|
| 
       283 
275 
     | 
    
         
             
                  end
         
     | 
| 
       284 
276 
     | 
    
         
             
                  check_castle_existance castle, 'open'
         
     | 
| 
       285 
277 
     | 
    
         
             
                  castle_dir = repos_dir.join(castle)
         
     | 
| 
       286 
     | 
    
         
            -
                  say_status "#{ENV['EDITOR']}  
     | 
| 
      
 278 
     | 
    
         
            +
                  say_status "#{castle_dir.realpath}: #{ENV['EDITOR']} .",
         
     | 
| 
       287 
279 
     | 
    
         
             
                             "Opening the root directory of castle '#{castle}' in editor '#{ENV['EDITOR']}'.",
         
     | 
| 
       288 
280 
     | 
    
         
             
                             :green
         
     | 
| 
       289 
281 
     | 
    
         
             
                  inside castle_dir do
         
     | 
| 
       290 
     | 
    
         
            -
                    system(ENV['EDITOR'])
         
     | 
| 
      
 282 
     | 
    
         
            +
                    system("#{ENV['EDITOR']} .")
         
     | 
| 
       291 
283 
     | 
    
         
             
                  end
         
     | 
| 
       292 
284 
     | 
    
         
             
                end
         
     | 
| 
       293 
285 
     | 
    
         | 
    
        data/lib/homesick/utils.rb
    CHANGED
    
    | 
         @@ -1,4 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- encoding : utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'pathname'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
       2 
4 
     | 
    
         
             
            module Homesick
         
     | 
| 
       3 
5 
     | 
    
         
             
              # Various utility methods that are used by Homesick
         
     | 
| 
       4 
6 
     | 
    
         
             
              module Utils
         
     | 
| 
         @@ -33,12 +35,11 @@ module Homesick 
     | 
|
| 
       33 
35 
     | 
    
         
             
                end
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
       35 
37 
     | 
    
         
             
                def check_castle_existance(name, action)
         
     | 
| 
       36 
     | 
    
         
            -
                   
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
                  return if castle_dir(name).exist?
         
     | 
| 
      
 39 
     | 
    
         
            +
                  say_status :error,
         
     | 
| 
      
 40 
     | 
    
         
            +
                             "Could not #{action} #{name}, expected #{castle_dir(name)} exist and contain dotfiles",
         
     | 
| 
      
 41 
     | 
    
         
            +
                             :red
         
     | 
| 
      
 42 
     | 
    
         
            +
                  exit(1)
         
     | 
| 
       42 
43 
     | 
    
         
             
                end
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
                def all_castles
         
     | 
| 
         @@ -51,7 +52,7 @@ module Homesick 
     | 
|
| 
       51 
52 
     | 
    
         
             
                  end
         
     | 
| 
       52 
53 
     | 
    
         
             
                end
         
     | 
| 
       53 
54 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                def inside_each_castle 
     | 
| 
      
 55 
     | 
    
         
            +
                def inside_each_castle
         
     | 
| 
       55 
56 
     | 
    
         
             
                  all_castles.each do |git_dir|
         
     | 
| 
       56 
57 
     | 
    
         
             
                    castle = git_dir.dirname
         
     | 
| 
       57 
58 
     | 
    
         
             
                    Dir.chdir castle do # so we can call git config from the right contxt
         
     | 
| 
         @@ -128,7 +129,6 @@ module Homesick 
     | 
|
| 
       128 
129 
     | 
    
         
             
                def move_dir_contents(target, dir_path)
         
     | 
| 
       129 
130 
     | 
    
         
             
                  child_files = dir_path.children
         
     | 
| 
       130 
131 
     | 
    
         
             
                  child_files.each do |child|
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
132 
     | 
    
         
             
                    target_path = target.join(child.basename)
         
     | 
| 
       133 
133 
     | 
    
         
             
                    if target_path.exist?
         
     | 
| 
       134 
134 
     | 
    
         
             
                      if more_recent?(child, target_path) && target.file?
         
     | 
| 
         @@ -148,8 +148,8 @@ module Homesick 
     | 
|
| 
       148 
148 
     | 
    
         
             
                  first_p.mtime > second_p.mtime && !first_p.symlink?
         
     | 
| 
       149 
149 
     | 
    
         
             
                end
         
     | 
| 
       150 
150 
     | 
    
         | 
| 
       151 
     | 
    
         
            -
                def collision_accepted?(destination)
         
     | 
| 
       152 
     | 
    
         
            -
                  fail " 
     | 
| 
      
 151 
     | 
    
         
            +
                def collision_accepted?(destination, source)
         
     | 
| 
      
 152 
     | 
    
         
            +
                  fail "Arguments must be instances of Pathname, #{destination.class.name} and #{source.class.name} given" unless destination.instance_of?(Pathname) && source.instance_of?(Pathname)
         
     | 
| 
       153 
153 
     | 
    
         
             
                  options[:force] || shell.file_collision(destination) { source }
         
     | 
| 
       154 
154 
     | 
    
         
             
                end
         
     | 
| 
       155 
155 
     | 
    
         | 
| 
         @@ -191,7 +191,7 @@ module Homesick 
     | 
|
| 
       191 
191 
     | 
    
         
             
                end
         
     | 
| 
       192 
192 
     | 
    
         | 
| 
       193 
193 
     | 
    
         
             
                def unsymlink_each(castle, basedir, subdirs)
         
     | 
| 
       194 
     | 
    
         
            -
                  each_file(castle, basedir, subdirs) do | 
     | 
| 
      
 194 
     | 
    
         
            +
                  each_file(castle, basedir, subdirs) do |_absolute_path, home_path|
         
     | 
| 
       195 
195 
     | 
    
         
             
                    rm_link home_path
         
     | 
| 
       196 
196 
     | 
    
         
             
                  end
         
     | 
| 
       197 
197 
     | 
    
         
             
                end
         
     | 
    
        data/lib/homesick/version.rb
    CHANGED
    
    
    
        data/spec/homesick_cli_spec.rb
    CHANGED
    
    | 
         @@ -26,10 +26,10 @@ describe Homesick::CLI do 
     | 
|
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                context 'when a git version that doesn\'t meet the minimum required is installed' do
         
     | 
| 
       28 
28 
     | 
    
         
             
                  before do
         
     | 
| 
       29 
     | 
    
         
            -
                    expect_any_instance_of(Homesick::Actions::GitActions).to receive(:`).and_return( 
     | 
| 
      
 29 
     | 
    
         
            +
                    expect_any_instance_of(Homesick::Actions::GitActions).to receive(:`).and_return('git version 1.7.6')
         
     | 
| 
       30 
30 
     | 
    
         
             
                  end
         
     | 
| 
       31 
31 
     | 
    
         
             
                  it 'should raise an exception' do
         
     | 
| 
       32 
     | 
    
         
            -
                    output = Capture.stdout{ expect{Homesick::CLI.new}.to raise_error SystemExit }
         
     | 
| 
      
 32 
     | 
    
         
            +
                    output = Capture.stdout { expect { Homesick::CLI.new }.to raise_error SystemExit }
         
     | 
| 
       33 
33 
     | 
    
         
             
                    expect(output.chomp).to include(Homesick::Actions::GitActions::STRING)
         
     | 
| 
       34 
34 
     | 
    
         
             
                  end
         
     | 
| 
       35 
35 
     | 
    
         
             
                end
         
     | 
| 
         @@ -39,20 +39,19 @@ describe Homesick::CLI do 
     | 
|
| 
       39 
39 
     | 
    
         
             
                    expect_any_instance_of(Homesick::Actions::GitActions).to receive(:`).at_least(:once).and_return("git version #{Homesick::Actions::GitActions::STRING}")
         
     | 
| 
       40 
40 
     | 
    
         
             
                  end
         
     | 
| 
       41 
41 
     | 
    
         
             
                  it 'should not raise an exception' do
         
     | 
| 
       42 
     | 
    
         
            -
                    output = Capture.stdout{ expect{Homesick::CLI.new}.not_to raise_error }
         
     | 
| 
      
 42 
     | 
    
         
            +
                    output = Capture.stdout { expect { Homesick::CLI.new }.not_to raise_error }
         
     | 
| 
       43 
43 
     | 
    
         
             
                    expect(output.chomp).not_to include(Homesick::Actions::GitActions::STRING)
         
     | 
| 
       44 
44 
     | 
    
         
             
                  end
         
     | 
| 
       45 
45 
     | 
    
         
             
                end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                context 'when a git version that is greater than the minimum required is installed' do
         
     | 
| 
       48 
48 
     | 
    
         
             
                  before do
         
     | 
| 
       49 
     | 
    
         
            -
                    expect_any_instance_of(Homesick::Actions::GitActions).to receive(:`).at_least(:once).and_return( 
     | 
| 
      
 49 
     | 
    
         
            +
                    expect_any_instance_of(Homesick::Actions::GitActions).to receive(:`).at_least(:once).and_return('git version 3.9.8')
         
     | 
| 
       50 
50 
     | 
    
         
             
                  end
         
     | 
| 
       51 
51 
     | 
    
         
             
                  it 'should not raise an exception' do
         
     | 
| 
       52 
     | 
    
         
            -
                    output = Capture.stdout{ expect{Homesick::CLI.new}.not_to raise_error }
         
     | 
| 
      
 52 
     | 
    
         
            +
                    output = Capture.stdout { expect { Homesick::CLI.new }.not_to raise_error }
         
     | 
| 
       53 
53 
     | 
    
         
             
                    expect(output.chomp).not_to include(Homesick::Actions::GitActions::STRING)
         
     | 
| 
       54 
54 
     | 
    
         
             
                  end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
55 
     | 
    
         
             
                end
         
     | 
| 
       57 
56 
     | 
    
         
             
              end
         
     | 
| 
       58 
57 
     | 
    
         | 
| 
         @@ -112,34 +111,35 @@ describe Homesick::CLI do 
     | 
|
| 
       112 
111 
     | 
    
         | 
| 
       113 
112 
     | 
    
         
             
                it 'clones git repo like git://host/path/to.git' do
         
     | 
| 
       114 
113 
     | 
    
         
             
                  expect(homesick).to receive(:git_clone)
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
      
 114 
     | 
    
         
            +
                    .with('git://github.com/technicalpickles/pickled-vim.git', destination: Pathname.new('pickled-vim'))
         
     | 
| 
       116 
115 
     | 
    
         | 
| 
       117 
116 
     | 
    
         
             
                  homesick.clone 'git://github.com/technicalpickles/pickled-vim.git'
         
     | 
| 
       118 
117 
     | 
    
         
             
                end
         
     | 
| 
       119 
118 
     | 
    
         | 
| 
       120 
119 
     | 
    
         
             
                it 'clones git repo like git@host:path/to.git' do
         
     | 
| 
       121 
120 
     | 
    
         
             
                  expect(homesick).to receive(:git_clone)
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
      
 121 
     | 
    
         
            +
                    .with('git@github.com:technicalpickles/pickled-vim.git', destination: Pathname.new('pickled-vim'))
         
     | 
| 
       123 
122 
     | 
    
         | 
| 
       124 
123 
     | 
    
         
             
                  homesick.clone 'git@github.com:technicalpickles/pickled-vim.git'
         
     | 
| 
       125 
124 
     | 
    
         
             
                end
         
     | 
| 
       126 
125 
     | 
    
         | 
| 
       127 
126 
     | 
    
         
             
                it 'clones git repo like http://host/path/to.git' do
         
     | 
| 
       128 
127 
     | 
    
         
             
                  expect(homesick).to receive(:git_clone)
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
      
 128 
     | 
    
         
            +
                    .with('http://github.com/technicalpickles/pickled-vim.git', destination: Pathname.new('pickled-vim'))
         
     | 
| 
       130 
129 
     | 
    
         | 
| 
       131 
130 
     | 
    
         
             
                  homesick.clone 'http://github.com/technicalpickles/pickled-vim.git'
         
     | 
| 
       132 
131 
     | 
    
         
             
                end
         
     | 
| 
       133 
132 
     | 
    
         | 
| 
       134 
133 
     | 
    
         
             
                it 'clones git repo like http://host/path/to' do
         
     | 
| 
       135 
134 
     | 
    
         
             
                  expect(homesick).to receive(:git_clone)
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
      
 135 
     | 
    
         
            +
                    .with('http://github.com/technicalpickles/pickled-vim', destination: Pathname.new('pickled-vim'))
         
     | 
| 
       137 
136 
     | 
    
         | 
| 
       138 
137 
     | 
    
         
             
                  homesick.clone 'http://github.com/technicalpickles/pickled-vim'
         
     | 
| 
       139 
138 
     | 
    
         
             
                end
         
     | 
| 
       140 
139 
     | 
    
         | 
| 
       141 
140 
     | 
    
         
             
                it 'clones git repo like host-alias:repos.git' do
         
     | 
| 
       142 
     | 
    
         
            -
                  expect(homesick).to receive(:git_clone).with('gitolite:pickled-vim.git' 
     | 
| 
      
 141 
     | 
    
         
            +
                  expect(homesick).to receive(:git_clone).with('gitolite:pickled-vim.git',
         
     | 
| 
      
 142 
     | 
    
         
            +
                                                               destination: Pathname.new('pickled-vim'))
         
     | 
| 
       143 
143 
     | 
    
         | 
| 
       144 
144 
     | 
    
         
             
                  homesick.clone 'gitolite:pickled-vim.git'
         
     | 
| 
       145 
145 
     | 
    
         
             
                end
         
     | 
| 
         @@ -151,11 +151,18 @@ describe Homesick::CLI do 
     | 
|
| 
       151 
151 
     | 
    
         | 
| 
       152 
152 
     | 
    
         
             
                it 'clones a github repo' do
         
     | 
| 
       153 
153 
     | 
    
         
             
                  expect(homesick).to receive(:git_clone)
         
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
       155 
     | 
    
         
            -
                                destination: Pathname.new('dotfiles'))
         
     | 
| 
      
 154 
     | 
    
         
            +
                    .with('https://github.com/wfarr/dotfiles.git', destination: Pathname.new('dotfiles'))
         
     | 
| 
       156 
155 
     | 
    
         | 
| 
       157 
156 
     | 
    
         
             
                  homesick.clone 'wfarr/dotfiles'
         
     | 
| 
       158 
157 
     | 
    
         
             
                end
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
                it 'accepts a destination', :focus do
         
     | 
| 
      
 160 
     | 
    
         
            +
                  expect(homesick).to receive(:git_clone)
         
     | 
| 
      
 161 
     | 
    
         
            +
                  .with('https://github.com/wfarr/dotfiles.git',
         
     | 
| 
      
 162 
     | 
    
         
            +
                        destination: Pathname.new('other-name'))
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                  homesick.clone 'wfarr/dotfiles', 'other-name'
         
     | 
| 
      
 165 
     | 
    
         
            +
                end
         
     | 
| 
       159 
166 
     | 
    
         
             
              end
         
     | 
| 
       160 
167 
     | 
    
         | 
| 
       161 
168 
     | 
    
         
             
              describe 'rc' do
         
     | 
| 
         @@ -220,7 +227,7 @@ describe Homesick::CLI do 
     | 
|
| 
       220 
227 
     | 
    
         
             
                end
         
     | 
| 
       221 
228 
     | 
    
         
             
              end
         
     | 
| 
       222 
229 
     | 
    
         | 
| 
       223 
     | 
    
         
            -
              describe ' 
     | 
| 
      
 230 
     | 
    
         
            +
              describe 'link_castle' do
         
     | 
| 
       224 
231 
     | 
    
         
             
                let(:castle) { given_castle('glencairn') }
         
     | 
| 
       225 
232 
     | 
    
         | 
| 
       226 
233 
     | 
    
         
             
                it 'links dotfiles from a castle to the home folder' do
         
     | 
| 
         @@ -308,11 +315,9 @@ describe Homesick::CLI do 
     | 
|
| 
       308 
315 
     | 
    
         
             
                    home_config_dir = home.join('.config')
         
     | 
| 
       309 
316 
     | 
    
         
             
                    home_someapp_dir = home_config_dir.join('someapp')
         
     | 
| 
       310 
317 
     | 
    
         
             
                    expect(home_config_dir.symlink?).to eq(false)
         
     | 
| 
       311 
     | 
    
         
            -
                    expect(home_config_dir.join('.some_dotfile').readlink)
         
     | 
| 
       312 
     | 
    
         
            -
                                   .to eq(config_dotfile)
         
     | 
| 
      
 318 
     | 
    
         
            +
                    expect(home_config_dir.join('.some_dotfile').readlink).to eq(config_dotfile)
         
     | 
| 
       313 
319 
     | 
    
         
             
                    expect(home_someapp_dir.symlink?).to eq(false)
         
     | 
| 
       314 
     | 
    
         
            -
                    expect(home_someapp_dir.join('.some_appfile').readlink)
         
     | 
| 
       315 
     | 
    
         
            -
                                    .to eq(someapp_dotfile)
         
     | 
| 
      
 320 
     | 
    
         
            +
                    expect(home_someapp_dir.join('.some_appfile').readlink).to eq(someapp_dotfile)
         
     | 
| 
       316 
321 
     | 
    
         
             
                  end
         
     | 
| 
       317 
322 
     | 
    
         
             
                end
         
     | 
| 
       318 
323 
     | 
    
         | 
| 
         @@ -421,13 +426,9 @@ describe Homesick::CLI do 
     | 
|
| 
       421 
426 
     | 
    
         
             
                  given_castle('wtf/zomg')
         
     | 
| 
       422 
427 
     | 
    
         | 
| 
       423 
428 
     | 
    
         
             
                  expect(homesick).to receive(:say_status)
         
     | 
| 
       424 
     | 
    
         
            -
             
     | 
| 
       425 
     | 
    
         
            -
                                'git://github.com/technicalpickles/zomg.git',
         
     | 
| 
       426 
     | 
    
         
            -
                                :cyan)
         
     | 
| 
      
 429 
     | 
    
         
            +
                    .with('zomg', 'git://github.com/technicalpickles/zomg.git', :cyan)
         
     | 
| 
       427 
430 
     | 
    
         
             
                  expect(homesick).to receive(:say_status)
         
     | 
| 
       428 
     | 
    
         
            -
             
     | 
| 
       429 
     | 
    
         
            -
                                'git://github.com/technicalpickles/zomg.git',
         
     | 
| 
       430 
     | 
    
         
            -
                                :cyan)
         
     | 
| 
      
 431 
     | 
    
         
            +
                    .with('wtf/zomg', 'git://github.com/technicalpickles/zomg.git', :cyan)
         
     | 
| 
       431 
432 
     | 
    
         | 
| 
       432 
433 
     | 
    
         
             
                  homesick.list
         
     | 
| 
       433 
434 
     | 
    
         
             
                end
         
     | 
| 
         @@ -437,7 +438,7 @@ describe Homesick::CLI do 
     | 
|
| 
       437 
438 
     | 
    
         
             
                it 'says "nothing to commit" when there are no changes' do
         
     | 
| 
       438 
439 
     | 
    
         
             
                  given_castle('castle_repo')
         
     | 
| 
       439 
440 
     | 
    
         
             
                  text = Capture.stdout { homesick.status('castle_repo') }
         
     | 
| 
       440 
     | 
    
         
            -
                  expect(text).to match( 
     | 
| 
      
 441 
     | 
    
         
            +
                  expect(text).to match(%r{nothing to commit \(create/copy files and use "git add" to track\)$})
         
     | 
| 
       441 
442 
     | 
    
         
             
                end
         
     | 
| 
       442 
443 
     | 
    
         | 
| 
       443 
444 
     | 
    
         
             
                it 'says "Changes to be committed" when there are changes' do
         
     | 
| 
         @@ -445,9 +446,7 @@ describe Homesick::CLI do 
     | 
|
| 
       445 
446 
     | 
    
         
             
                  some_rc_file = home.file '.some_rc_file'
         
     | 
| 
       446 
447 
     | 
    
         
             
                  homesick.track(some_rc_file.to_s, 'castle_repo')
         
     | 
| 
       447 
448 
     | 
    
         
             
                  text = Capture.stdout { homesick.status('castle_repo') }
         
     | 
| 
       448 
     | 
    
         
            -
                  expect(text).to match(
         
     | 
| 
       449 
     | 
    
         
            -
                    /Changes to be committed:.*new file:\s*home\/.some_rc_file/m
         
     | 
| 
       450 
     | 
    
         
            -
                  )
         
     | 
| 
      
 449 
     | 
    
         
            +
                  expect(text).to match(%r{Changes to be committed:.*new file:\s*home\/.some_rc_file}m)
         
     | 
| 
       451 
450 
     | 
    
         
             
                end
         
     | 
| 
       452 
451 
     | 
    
         
             
              end
         
     | 
| 
       453 
452 
     | 
    
         | 
| 
         @@ -519,7 +518,6 @@ describe Homesick::CLI do 
     | 
|
| 
       519 
518 
     | 
    
         
             
                    end
         
     | 
| 
       520 
519 
     | 
    
         
             
                  end
         
     | 
| 
       521 
520 
     | 
    
         
             
                end
         
     | 
| 
       522 
     | 
    
         
            -
             
     | 
| 
       523 
521 
     | 
    
         
             
              end
         
     | 
| 
       524 
522 
     | 
    
         | 
| 
       525 
523 
     | 
    
         
             
              describe 'push' do
         
     | 
| 
         @@ -531,9 +529,7 @@ describe Homesick::CLI do 
     | 
|
| 
       531 
529 
     | 
    
         | 
| 
       532 
530 
     | 
    
         
             
                it 'prints an error message when trying to push a non-existant castle' do
         
     | 
| 
       533 
531 
     | 
    
         
             
                  expect(homesick).to receive('say_status').once
         
     | 
| 
       534 
     | 
    
         
            -
             
     | 
| 
       535 
     | 
    
         
            -
                                /Could not push castle_repo, expected .* exist and contain dotfiles/,
         
     | 
| 
       536 
     | 
    
         
            -
                                :red)
         
     | 
| 
      
 532 
     | 
    
         
            +
                    .with(:error, /Could not push castle_repo, expected .* exist and contain dotfiles/, :red)
         
     | 
| 
       537 
533 
     | 
    
         
             
                  expect { homesick.push 'castle_repo' }.to raise_error(SystemExit)
         
     | 
| 
       538 
534 
     | 
    
         
             
                end
         
     | 
| 
       539 
535 
     | 
    
         
             
              end
         
     | 
| 
         @@ -617,7 +613,6 @@ describe Homesick::CLI do 
     | 
|
| 
       617 
613 
     | 
    
         
             
                # Note that this is a test for the subdir_file related feature of track,
         
     | 
| 
       618 
614 
     | 
    
         
             
                # not for the subdir_file method itself.
         
     | 
| 
       619 
615 
     | 
    
         
             
                describe 'subdir_file' do
         
     | 
| 
       620 
     | 
    
         
            -
             
     | 
| 
       621 
616 
     | 
    
         
             
                  it 'adds the nested files parent to the subdir_file' do
         
     | 
| 
       622 
617 
     | 
    
         
             
                    castle = given_castle('castle_repo')
         
     | 
| 
       623 
618 
     | 
    
         | 
| 
         @@ -692,9 +687,7 @@ describe Homesick::CLI do 
     | 
|
| 
       692 
687 
     | 
    
         | 
| 
       693 
688 
     | 
    
         
             
                it 'returns an error message when the given castle does not exist' do
         
     | 
| 
       694 
689 
     | 
    
         
             
                  expect(homesick).to receive('say_status').once
         
     | 
| 
       695 
     | 
    
         
            -
             
     | 
| 
       696 
     | 
    
         
            -
                                /Could not cd castle_repo, expected .* exist and contain dotfiles/,
         
     | 
| 
       697 
     | 
    
         
            -
                                :red)
         
     | 
| 
      
 690 
     | 
    
         
            +
                    .with(:error, /Could not cd castle_repo, expected .* exist and contain dotfiles/, :red)
         
     | 
| 
       698 
691 
     | 
    
         
             
                  expect { homesick.cd 'castle_repo' }.to raise_error(SystemExit)
         
     | 
| 
       699 
692 
     | 
    
         
             
                end
         
     | 
| 
       700 
693 
     | 
    
         
             
              end
         
     | 
| 
         @@ -707,7 +700,7 @@ describe Homesick::CLI do 
     | 
|
| 
       707 
700 
     | 
    
         
             
                  allow(ENV).to receive(:[]).with('EDITOR').and_return('vim')
         
     | 
| 
       708 
701 
     | 
    
         
             
                  given_castle 'castle_repo'
         
     | 
| 
       709 
702 
     | 
    
         
             
                  expect(homesick).to receive('inside').once.with(kind_of(Pathname)).and_yield
         
     | 
| 
       710 
     | 
    
         
            -
                  expect(homesick).to receive('system').once.with('vim')
         
     | 
| 
      
 703 
     | 
    
         
            +
                  expect(homesick).to receive('system').once.with('vim .')
         
     | 
| 
       711 
704 
     | 
    
         
             
                  Capture.stdout { homesick.open 'castle_repo' }
         
     | 
| 
       712 
705 
     | 
    
         
             
                end
         
     | 
| 
       713 
706 
     | 
    
         | 
| 
         @@ -715,9 +708,7 @@ describe Homesick::CLI do 
     | 
|
| 
       715 
708 
     | 
    
         
             
                  # Set the default editor to make sure it fails.
         
     | 
| 
       716 
709 
     | 
    
         
             
                  allow(ENV).to receive(:[]).with('EDITOR').and_return(nil)
         
     | 
| 
       717 
710 
     | 
    
         
             
                  expect(homesick).to receive('say_status').once
         
     | 
| 
       718 
     | 
    
         
            -
             
     | 
| 
       719 
     | 
    
         
            -
                                'The $EDITOR environment variable must be set to use this command',
         
     | 
| 
       720 
     | 
    
         
            -
                                :red)
         
     | 
| 
      
 711 
     | 
    
         
            +
                    .with(:error, 'The $EDITOR environment variable must be set to use this command', :red)
         
     | 
| 
       721 
712 
     | 
    
         
             
                  expect { homesick.open 'castle_repo' }.to raise_error(SystemExit)
         
     | 
| 
       722 
713 
     | 
    
         
             
                end
         
     | 
| 
       723 
714 
     | 
    
         | 
| 
         @@ -725,9 +716,7 @@ describe Homesick::CLI do 
     | 
|
| 
       725 
716 
     | 
    
         
             
                  # Set a default just in case none is set
         
     | 
| 
       726 
717 
     | 
    
         
             
                  allow(ENV).to receive(:[]).with('EDITOR').and_return('vim')
         
     | 
| 
       727 
718 
     | 
    
         
             
                  allow(homesick).to receive('say_status').once
         
     | 
| 
       728 
     | 
    
         
            -
             
     | 
| 
       729 
     | 
    
         
            -
                                /Could not open castle_repo, expected .* exist and contain dotfiles/,
         
     | 
| 
       730 
     | 
    
         
            -
                                :red)
         
     | 
| 
      
 719 
     | 
    
         
            +
                    .with(:error, /Could not open castle_repo, expected .* exist and contain dotfiles/, :red)
         
     | 
| 
       731 
720 
     | 
    
         
             
                  expect { homesick.open 'castle_repo' }.to raise_error(SystemExit)
         
     | 
| 
       732 
721 
     | 
    
         
             
                end
         
     | 
| 
       733 
722 
     | 
    
         
             
              end
         
     | 
| 
         @@ -746,9 +735,7 @@ describe Homesick::CLI do 
     | 
|
| 
       746 
735 
     | 
    
         
             
                it 'executes a single command with no arguments inside a given castle' do
         
     | 
| 
       747 
736 
     | 
    
         
             
                  allow(homesick).to receive('inside').once.with(kind_of(Pathname)).and_yield
         
     | 
| 
       748 
737 
     | 
    
         
             
                  allow(homesick).to receive('say_status').once
         
     | 
| 
       749 
     | 
    
         
            -
             
     | 
| 
       750 
     | 
    
         
            -
                                be_a(String),
         
     | 
| 
       751 
     | 
    
         
            -
                                :green)
         
     | 
| 
      
 738 
     | 
    
         
            +
                    .with(be_a(String), be_a(String), :green)
         
     | 
| 
       752 
739 
     | 
    
         
             
                  allow(homesick).to receive('system').once.with('ls')
         
     | 
| 
       753 
740 
     | 
    
         
             
                  Capture.stdout { homesick.exec 'castle_repo', 'ls' }
         
     | 
| 
       754 
741 
     | 
    
         
             
                end
         
     | 
| 
         @@ -756,18 +743,14 @@ describe Homesick::CLI do 
     | 
|
| 
       756 
743 
     | 
    
         
             
                it 'executes a single command with arguments inside a given castle' do
         
     | 
| 
       757 
744 
     | 
    
         
             
                  allow(homesick).to receive('inside').once.with(kind_of(Pathname)).and_yield
         
     | 
| 
       758 
745 
     | 
    
         
             
                  allow(homesick).to receive('say_status').once
         
     | 
| 
       759 
     | 
    
         
            -
             
     | 
| 
       760 
     | 
    
         
            -
                                be_a(String),
         
     | 
| 
       761 
     | 
    
         
            -
                                :green)
         
     | 
| 
      
 746 
     | 
    
         
            +
                    .with(be_a(String), be_a(String), :green)
         
     | 
| 
       762 
747 
     | 
    
         
             
                  allow(homesick).to receive('system').once.with('ls -la')
         
     | 
| 
       763 
748 
     | 
    
         
             
                  Capture.stdout { homesick.exec 'castle_repo', 'ls', '-la' }
         
     | 
| 
       764 
749 
     | 
    
         
             
                end
         
     | 
| 
       765 
750 
     | 
    
         | 
| 
       766 
751 
     | 
    
         
             
                it 'raises an error when the method is called without a command' do
         
     | 
| 
       767 
752 
     | 
    
         
             
                  allow(homesick).to receive('say_status').once
         
     | 
| 
       768 
     | 
    
         
            -
             
     | 
| 
       769 
     | 
    
         
            -
                                be_a(String),
         
     | 
| 
       770 
     | 
    
         
            -
                                :red)
         
     | 
| 
      
 753 
     | 
    
         
            +
                    .with(:error, be_a(String), :red)
         
     | 
| 
       771 
754 
     | 
    
         
             
                  allow(homesick).to receive('exit').once.with(1)
         
     | 
| 
       772 
755 
     | 
    
         
             
                  Capture.stdout { homesick.exec 'castle_repo' }
         
     | 
| 
       773 
756 
     | 
    
         
             
                end
         
     | 
| 
         @@ -775,9 +758,7 @@ describe Homesick::CLI do 
     | 
|
| 
       775 
758 
     | 
    
         
             
                context 'pretend' do
         
     | 
| 
       776 
759 
     | 
    
         
             
                  it 'does not execute a command when the pretend option is passed' do
         
     | 
| 
       777 
760 
     | 
    
         
             
                    allow(homesick).to receive('say_status').once
         
     | 
| 
       778 
     | 
    
         
            -
             
     | 
| 
       779 
     | 
    
         
            -
                                match(/.*Would execute.*/),
         
     | 
| 
       780 
     | 
    
         
            -
                                :green)
         
     | 
| 
      
 761 
     | 
    
         
            +
                      .with(be_a(String), match(/.*Would execute.*/), :green)
         
     | 
| 
       781 
762 
     | 
    
         
             
                    expect(homesick).to receive('system').never
         
     | 
| 
       782 
763 
     | 
    
         
             
                    Capture.stdout { homesick.invoke 'exec', %w(castle_repo ls -la), pretend: true }
         
     | 
| 
       783 
764 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -787,7 +768,7 @@ describe Homesick::CLI do 
     | 
|
| 
       787 
768 
     | 
    
         
             
                  it 'does not print status information when quiet is passed' do
         
     | 
| 
       788 
769 
     | 
    
         
             
                    expect(homesick).to receive('say_status').never
         
     | 
| 
       789 
770 
     | 
    
         
             
                    allow(homesick).to receive('system').once
         
     | 
| 
       790 
     | 
    
         
            -
             
     | 
| 
      
 771 
     | 
    
         
            +
                      .with('ls -la')
         
     | 
| 
       791 
772 
     | 
    
         
             
                    Capture.stdout { homesick.invoke 'exec', %w(castle_repo ls -la), quiet: true }
         
     | 
| 
       792 
773 
     | 
    
         
             
                  end
         
     | 
| 
       793 
774 
     | 
    
         
             
                end
         
     | 
| 
         @@ -802,9 +783,7 @@ describe Homesick::CLI do 
     | 
|
| 
       802 
783 
     | 
    
         
             
                it 'executes a command without arguments inside the root of each cloned castle' do
         
     | 
| 
       803 
784 
     | 
    
         
             
                  allow(homesick).to receive('inside_each_castle').exactly(:twice).and_yield('castle_repo').and_yield('another_castle_repo')
         
     | 
| 
       804 
785 
     | 
    
         
             
                  allow(homesick).to receive('say_status').at_least(:once)
         
     | 
| 
       805 
     | 
    
         
            -
             
     | 
| 
       806 
     | 
    
         
            -
                                be_a(String),
         
     | 
| 
       807 
     | 
    
         
            -
                                :green)
         
     | 
| 
      
 786 
     | 
    
         
            +
                    .with(be_a(String), be_a(String), :green)
         
     | 
| 
       808 
787 
     | 
    
         
             
                  allow(homesick).to receive('system').at_least(:once).with('ls')
         
     | 
| 
       809 
788 
     | 
    
         
             
                  Capture.stdout { homesick.exec_all 'ls' }
         
     | 
| 
       810 
789 
     | 
    
         
             
                end
         
     | 
| 
         @@ -812,18 +791,14 @@ describe Homesick::CLI do 
     | 
|
| 
       812 
791 
     | 
    
         
             
                it 'executes a command with arguments inside the root of each cloned castle' do
         
     | 
| 
       813 
792 
     | 
    
         
             
                  allow(homesick).to receive('inside_each_castle').exactly(:twice).and_yield('castle_repo').and_yield('another_castle_repo')
         
     | 
| 
       814 
793 
     | 
    
         
             
                  allow(homesick).to receive('say_status').at_least(:once)
         
     | 
| 
       815 
     | 
    
         
            -
             
     | 
| 
       816 
     | 
    
         
            -
                                be_a(String),
         
     | 
| 
       817 
     | 
    
         
            -
                                :green)
         
     | 
| 
      
 794 
     | 
    
         
            +
                    .with(be_a(String), be_a(String), :green)
         
     | 
| 
       818 
795 
     | 
    
         
             
                  allow(homesick).to receive('system').at_least(:once).with('ls -la')
         
     | 
| 
       819 
796 
     | 
    
         
             
                  Capture.stdout { homesick.exec_all 'ls', '-la' }
         
     | 
| 
       820 
797 
     | 
    
         
             
                end
         
     | 
| 
       821 
798 
     | 
    
         | 
| 
       822 
799 
     | 
    
         
             
                it 'raises an error when the method is called without a command' do
         
     | 
| 
       823 
800 
     | 
    
         
             
                  allow(homesick).to receive('say_status').once
         
     | 
| 
       824 
     | 
    
         
            -
             
     | 
| 
       825 
     | 
    
         
            -
                                be_a(String),
         
     | 
| 
       826 
     | 
    
         
            -
                                :red)
         
     | 
| 
      
 801 
     | 
    
         
            +
                    .with(:error, be_a(String), :red)
         
     | 
| 
       827 
802 
     | 
    
         
             
                  allow(homesick).to receive('exit').once.with(1)
         
     | 
| 
       828 
803 
     | 
    
         
             
                  Capture.stdout { homesick.exec_all }
         
     | 
| 
       829 
804 
     | 
    
         
             
                end
         
     | 
| 
         @@ -831,9 +806,7 @@ describe Homesick::CLI do 
     | 
|
| 
       831 
806 
     | 
    
         
             
                context 'pretend' do
         
     | 
| 
       832 
807 
     | 
    
         
             
                  it 'does not execute a command when the pretend option is passed' do
         
     | 
| 
       833 
808 
     | 
    
         
             
                    allow(homesick).to receive('say_status').at_least(:once)
         
     | 
| 
       834 
     | 
    
         
            -
             
     | 
| 
       835 
     | 
    
         
            -
                                match(/.*Would execute.*/),
         
     | 
| 
       836 
     | 
    
         
            -
                                :green)
         
     | 
| 
      
 809 
     | 
    
         
            +
                      .with(be_a(String), match(/.*Would execute.*/), :green)
         
     | 
| 
       837 
810 
     | 
    
         
             
                    expect(homesick).to receive('system').never
         
     | 
| 
       838 
811 
     | 
    
         
             
                    Capture.stdout { homesick.invoke 'exec_all', %w(ls -la), pretend: true }
         
     | 
| 
       839 
812 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -843,7 +816,7 @@ describe Homesick::CLI do 
     | 
|
| 
       843 
816 
     | 
    
         
             
                  it 'does not print status information when quiet is passed' do
         
     | 
| 
       844 
817 
     | 
    
         
             
                    expect(homesick).to receive('say_status').never
         
     | 
| 
       845 
818 
     | 
    
         
             
                    allow(homesick).to receive('system').at_least(:once)
         
     | 
| 
       846 
     | 
    
         
            -
             
     | 
| 
      
 819 
     | 
    
         
            +
                      .with('ls -la')
         
     | 
| 
       847 
820 
     | 
    
         
             
                    Capture.stdout { homesick.invoke 'exec_all', %w(ls -la), quiet: true }
         
     | 
| 
       848 
821 
     | 
    
         
             
                  end
         
     | 
| 
       849 
822 
     | 
    
         
             
                end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: homesick
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Joshua Nichols
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2015- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2015-10-31 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: thor
         
     | 
| 
         @@ -221,8 +221,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       221 
221 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       222 
222 
     | 
    
         
             
            requirements: []
         
     | 
| 
       223 
223 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       224 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 224 
     | 
    
         
            +
            rubygems_version: 2.4.8
         
     | 
| 
       225 
225 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       226 
226 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       227 
227 
     | 
    
         
             
            summary: Your home directory is your castle. Don't leave your dotfiles behind.
         
     | 
| 
       228 
228 
     | 
    
         
             
            test_files: []
         
     | 
| 
      
 229 
     | 
    
         
            +
            has_rdoc: 
         
     |