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