Update linker string
This commit is contained in:
parent
33880507d3
commit
c9e8e938b6
69
dotlinker
69
dotlinker
@ -1,12 +1,6 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
#/ Usage: dotlinker <command>
|
||||
#/
|
||||
#/ list List files to link
|
||||
#/ update Update dotfiles repo
|
||||
#/ symlink Symlink all files
|
||||
#/ unsymlink Unsymlink all files
|
||||
|
||||
require 'optparse'
|
||||
require 'pathname'
|
||||
require 'fileutils'
|
||||
|
||||
@ -29,10 +23,6 @@ module ShellHelpers
|
||||
"\033[0;#{COLOR_CODES[color] + 30}m#{str}\033[0m"
|
||||
end
|
||||
|
||||
def say_help
|
||||
exec "grep ^#/<'#{__FILE__}'|cut -c4-"
|
||||
end
|
||||
|
||||
def say(message, color = :default)
|
||||
$stdout.print(colorify_string(message, color))
|
||||
$stdout.flush
|
||||
@ -135,7 +125,7 @@ module FileHelpers
|
||||
elsif destination.exist?
|
||||
say_status(:conflict, "#{destination} exists", :red)
|
||||
|
||||
if collision_accepted?(destination)
|
||||
if options[:force] || collision_accepted?(destination)
|
||||
FileUtils.rm_r(destination, force: true)
|
||||
FileUtils.ln_s(source, destination, force: true)
|
||||
end
|
||||
@ -147,25 +137,17 @@ module FileHelpers
|
||||
end
|
||||
end
|
||||
|
||||
module GitHelpers
|
||||
extend self
|
||||
|
||||
def git_pull
|
||||
say_status(:git, "Pulling #{`git config --get remote.origin.url`}", :green)
|
||||
system 'git pull'
|
||||
end
|
||||
end
|
||||
|
||||
class Linker
|
||||
include GitHelpers
|
||||
include FileHelpers
|
||||
include ShellHelpers
|
||||
|
||||
VERSION = '0.1.0'.freeze
|
||||
VERSION = '0.2.1'.freeze
|
||||
LINKDIR_FILENAME = '.linkdir'.freeze
|
||||
|
||||
def git_dir
|
||||
@git_dir ||= Pathname.new(File.dirname(__FILE__)).realpath
|
||||
attr_reader :options
|
||||
|
||||
def initialize(options = {})
|
||||
@options = options
|
||||
end
|
||||
|
||||
def home_dir
|
||||
@ -176,10 +158,6 @@ class Linker
|
||||
@repo_dir ||= Pathname.new(File.dirname(__FILE__)).join('home').realpath
|
||||
end
|
||||
|
||||
def update
|
||||
inside(git_dir) { git_pull }
|
||||
end
|
||||
|
||||
def each_file
|
||||
skip_dirs = []
|
||||
|
||||
@ -206,7 +184,7 @@ class Linker
|
||||
|
||||
def symlink_all
|
||||
each_file do |absolute_path, home_path|
|
||||
ln_s(absolute_path, home_path)
|
||||
ln_s(absolute_path, home_path, options)
|
||||
end
|
||||
end
|
||||
|
||||
@ -217,24 +195,37 @@ class Linker
|
||||
end
|
||||
end
|
||||
|
||||
COMMANDS = ['list', 'update', 'symlink', 'unsymlink'].freeze
|
||||
COMMANDS = ['list', 'update', 'link', 'unlink'].freeze
|
||||
|
||||
options = {}
|
||||
opt_parser = OptionParser.new do |opts|
|
||||
opts.banner = "Usage: #{__FILE__} <command> [options]"
|
||||
|
||||
opts.separator ''
|
||||
opts.separator 'Commands:'
|
||||
opts.separator 'list List files to link'
|
||||
opts.separator 'link Symlink all files'
|
||||
opts.separator 'unlink Unsymlink all files'
|
||||
|
||||
opts.separator ''
|
||||
opts.separator 'Options:'
|
||||
opts.on('-f', '--force', 'Force overwrite all files') { |force| options[:force] = force }
|
||||
opts.on('-v', '--version', 'Show version information') { |_| ShellHelpers.say(Linker::VERSION); exit(0) }
|
||||
end
|
||||
|
||||
opt_parser.parse!
|
||||
command = ARGV.pop
|
||||
if command.nil? || !COMMANDS.include?(command)
|
||||
ShellHelpers.say_help
|
||||
ShellHelpers.say(opt_parser.help)
|
||||
else
|
||||
linker = Linker.new
|
||||
linker = Linker.new(options)
|
||||
|
||||
case command
|
||||
when 'list'
|
||||
linker.list_all
|
||||
when 'update'
|
||||
linker.update
|
||||
when 'symlink'
|
||||
when 'link'
|
||||
linker.symlink_all
|
||||
when 'unsymlink'
|
||||
when 'unlink'
|
||||
linker.unsymlink_all
|
||||
else
|
||||
ShellHelpers.say_help
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user