Shuffled some stuff out of main homesick.rb
This commit is contained in:
@@ -1,23 +1,11 @@
|
|||||||
require 'thor'
|
require 'thor'
|
||||||
|
|
||||||
class Homesick < Thor
|
class Homesick < Thor
|
||||||
|
autoload :Shell, 'homesick/shell'
|
||||||
|
autoload :Actions, 'homesick/actions'
|
||||||
|
|
||||||
include Thor::Actions
|
include Thor::Actions
|
||||||
|
include Homesick::Actions
|
||||||
# Hack in support for diffing symlinks
|
|
||||||
class Shell < Thor::Shell::Color
|
|
||||||
|
|
||||||
def show_diff(destination, content)
|
|
||||||
destination = Pathname.new(destination)
|
|
||||||
|
|
||||||
if destination.symlink?
|
|
||||||
say "- #{destination.readlink}", :red, true
|
|
||||||
say "+ #{content.expand_path}", :green, true
|
|
||||||
else
|
|
||||||
super
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize(args=[], options={}, config={})
|
def initialize(args=[], options={}, config={})
|
||||||
super
|
super
|
||||||
@@ -91,43 +79,6 @@ class Homesick < Thor
|
|||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
# TODO move this to be more like thor's template, empty_directory, etc
|
|
||||||
def git_clone(repo, config = {})
|
|
||||||
config ||= {}
|
|
||||||
destination = config[:destination] || begin
|
|
||||||
repo =~ /([^\/]+)\.git$/
|
|
||||||
$1
|
|
||||||
end
|
|
||||||
|
|
||||||
destination = Pathname.new(destination) unless destination.kind_of?(Pathname)
|
|
||||||
|
|
||||||
if ! destination.directory?
|
|
||||||
say_status 'git clone', "#{repo} to #{destination.expand_path}", :green if config.fetch(:verbose, true)
|
|
||||||
system "git clone #{repo} #{destination}" unless options[:pretend]
|
|
||||||
else
|
|
||||||
say_status :exist, destination.expand_path, :blue
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def symlink(source, destination, config = {})
|
|
||||||
destination = Pathname.new(destination)
|
|
||||||
|
|
||||||
if destination.symlink?
|
|
||||||
if destination.readlink == source
|
|
||||||
say_status :identical, destination.expand_path, :blue
|
|
||||||
else
|
|
||||||
say_status :conflict, "#{destination} exists and points to #{destination.readlink}", :red
|
|
||||||
|
|
||||||
if shell.file_collision(destination) { source }
|
|
||||||
system "ln -sf #{source} #{destination}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green
|
|
||||||
system "ln -s #{source} #{destination}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def user_dir
|
def user_dir
|
||||||
self.class.user_dir
|
self.class.user_dir
|
||||||
end
|
end
|
||||||
|
|||||||
40
lib/homesick/actions.rb
Normal file
40
lib/homesick/actions.rb
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
class Homesick
|
||||||
|
module Actions
|
||||||
|
# TODO move this to be more like thor's template, empty_directory, etc
|
||||||
|
def git_clone(repo, config = {})
|
||||||
|
config ||= {}
|
||||||
|
destination = config[:destination] || begin
|
||||||
|
repo =~ /([^\/]+)\.git$/
|
||||||
|
$1
|
||||||
|
end
|
||||||
|
|
||||||
|
destination = Pathname.new(destination) unless destination.kind_of?(Pathname)
|
||||||
|
|
||||||
|
if ! destination.directory?
|
||||||
|
say_status 'git clone', "#{repo} to #{destination.expand_path}", :green if config.fetch(:verbose, true)
|
||||||
|
system "git clone #{repo} #{destination}" unless options[:pretend]
|
||||||
|
else
|
||||||
|
say_status :exist, destination.expand_path, :blue
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def symlink(source, destination, config = {})
|
||||||
|
destination = Pathname.new(destination)
|
||||||
|
|
||||||
|
if destination.symlink?
|
||||||
|
if destination.readlink == source
|
||||||
|
say_status :identical, destination.expand_path, :blue
|
||||||
|
else
|
||||||
|
say_status :conflict, "#{destination} exists and points to #{destination.readlink}", :red
|
||||||
|
|
||||||
|
if shell.file_collision(destination) { source }
|
||||||
|
system "ln -sf #{source} #{destination}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green
|
||||||
|
system "ln -s #{source} #{destination}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
17
lib/homesick/shell.rb
Normal file
17
lib/homesick/shell.rb
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
class Homesick
|
||||||
|
# Hack in support for diffing symlinks
|
||||||
|
class Shell < Thor::Shell::Color
|
||||||
|
|
||||||
|
def show_diff(destination, content)
|
||||||
|
destination = Pathname.new(destination)
|
||||||
|
|
||||||
|
if destination.symlink?
|
||||||
|
say "- #{destination.readlink}", :red, true
|
||||||
|
say "+ #{content.expand_path}", :green, true
|
||||||
|
else
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user