add option to pass in destination to homesick clone

This commit is contained in:
Robin Wenglewski
2015-10-11 18:21:22 +02:00
parent 60d4458bbc
commit 171b4c1fb8
2 changed files with 15 additions and 6 deletions

View File

@@ -39,23 +39,24 @@ module Homesick
end end
end end
desc 'clone URI', 'Clone +uri+ as a castle for homesick' desc 'clone URI CASTLE_NAME', 'Clone +uri+ as a castle with name CASTLE_NAME for homesick'
def clone(uri) def clone(uri, destination=nil)
destination = Pathname.new(destination) unless destination.nil?
inside repos_dir do inside repos_dir do
destination = nil
if File.exist?(uri) if File.exist?(uri)
uri = Pathname.new(uri).expand_path uri = Pathname.new(uri).expand_path
fail "Castle already cloned to #{uri}" if uri.to_s.start_with?(repos_dir.to_s) fail "Castle already cloned to #{uri}" if uri.to_s.start_with?(repos_dir.to_s)
destination = uri.basename destination = uri.basename if destination.nil?
ln_s uri, destination ln_s uri, destination
elsif uri =~ GITHUB_NAME_REPO_PATTERN elsif uri =~ GITHUB_NAME_REPO_PATTERN
destination = Pathname.new(uri).basename destination = Pathname.new(uri).basename if destination.nil?
git_clone "https://github.com/#{Regexp.last_match[1]}.git", git_clone "https://github.com/#{Regexp.last_match[1]}.git",
destination: destination destination: destination
elsif uri =~ /%r([^%r]*?)(\.git)?\Z/ || uri =~ /[^:]+:([^:]+)(\.git)?\Z/ elsif uri =~ /%r([^%r]*?)(\.git)?\Z/ || uri =~ /[^:]+:([^:]+)(\.git)?\Z/
destination = Pathname.new(Regexp.last_match[1].gsub(/\.git$/,'')).basename destination = Pathname.new(Regexp.last_match[1].gsub(/\.git$/,'')).basename if destination.nil?
git_clone uri, destination: destination git_clone uri, destination: destination
else else
fail "Unknown URI format: #{uri}" fail "Unknown URI format: #{uri}"

View File

@@ -161,6 +161,14 @@ describe Homesick::CLI do
homesick.clone 'wfarr/dotfiles' homesick.clone 'wfarr/dotfiles'
end end
it 'accepts a destination', :focus do
expect(homesick).to receive(:git_clone)
.with('https://github.com/wfarr/dotfiles.git',
destination: Pathname.new('other-name'))
homesick.clone 'wfarr/dotfiles', 'other-name'
end
end end
describe 'rc' do describe 'rc' do