Apply fixes suggested by Rubocop.

This commit is contained in:
Jeremy Cook
2019-01-19 07:41:56 -05:00
parent ff387280d5
commit fdb57cd846
7 changed files with 70 additions and 76 deletions

View File

@@ -1,4 +1,3 @@
# -*- encoding : utf-8 -*-
require 'homesick/actions/file_actions' require 'homesick/actions/file_actions'
require 'homesick/actions/git_actions' require 'homesick/actions/git_actions'
require 'homesick/version' require 'homesick/version'
@@ -7,8 +6,8 @@ require 'homesick/cli'
# Homesick's top-level module # Homesick's top-level module
module Homesick module Homesick
GITHUB_NAME_REPO_PATTERN = %r{\A([A-Za-z0-9_-]+/[A-Za-z0-9_-]+)\Z} GITHUB_NAME_REPO_PATTERN = %r{\A([A-Za-z0-9_-]+/[A-Za-z0-9_-]+)\Z}.freeze
SUBDIR_FILENAME = '.homesick_subdir' SUBDIR_FILENAME = '.homesick_subdir'.freeze
DEFAULT_CASTLE_NAME = 'dotfiles' DEFAULT_CASTLE_NAME = 'dotfiles'.freeze
end end

View File

@@ -5,9 +5,7 @@ module Homesick
def mv(source, destination) def mv(source, destination)
source = Pathname.new(source) source = Pathname.new(source)
destination = Pathname.new(destination + source.basename) destination = Pathname.new(destination + source.basename)
if destination.exist? && (options[:force] || shell.file_collision(destination) { source }) say_status :conflict, "#{destination} exists", :red if destination.exist? && (options[:force] || shell.file_collision(destination) { source })
say_status :conflict, "#{destination} exists", :red
end
FileUtils.mv source, destination unless options[:pretend] FileUtils.mv source, destination unless options[:pretend]
end end
@@ -42,41 +40,36 @@ module Homesick
destination = Pathname.new(destination) destination = Pathname.new(destination)
FileUtils.mkdir_p destination.dirname FileUtils.mkdir_p destination.dirname
action = if destination.symlink? && destination.readlink == source action = :success
:identical action = :identical if destination.symlink? && destination.readlink == source
elsif destination.symlink? action = :symlink_conflict if destination.symlink?
:symlink_conflict action = :conflict if destination.exist?
elsif destination.exist?
:conflict
else
:success
end
handle_symlink_action action, source, destination handle_symlink_action action, source, destination
end end
def handle_symlink_action(action, source, destination) def handle_symlink_action(action, source, destination)
case action if action == :identical
when :identical
say_status :identical, destination.expand_path, :blue say_status :identical, destination.expand_path, :blue
when :symlink_conflict, :conflict return
if action == :conflict
say_status :conflict, "#{destination} exists", :red
else
say_status :conflict,
"#{destination} exists and points to #{destination.readlink}",
:red
end end
message = generate_symlink_message action, source, destination
if %i[symlink_conflict conflict].include?(action)
say_status :conflict, message, :red
if collision_accepted?(destination, source) if collision_accepted?(destination, source)
FileUtils.rm_r destination, force: true unless options[:pretend] FileUtils.rm_r destination, force: true unless options[:pretend]
FileUtils.ln_s source, destination, force: true unless options[:pretend]
end end
else else
say_status :symlink, say_status :symlink, message, :green
"#{source.expand_path} to #{destination.expand_path}",
:green
FileUtils.ln_s source, destination unless options[:pretend]
end end
FileUtils.ln_s source, destination, force: true unless options[:pretend]
end
def generate_symlink_message(action, source, destination)
message = "#{source.expand_path} to #{destination.expand_path}"
message = "#{destination} exists and points to #{destination.readlink}" if action == :symlink_conflict
message = "#{destination} exists" if action == :conflict
message
end end
end end
end end

View File

@@ -1,4 +1,3 @@
# -*- encoding : utf-8 -*-
module Homesick module Homesick
module Actions module Actions
# Git-related helper methods for Homesick # Git-related helper methods for Homesick
@@ -8,18 +7,20 @@ module Homesick
major: 1, major: 1,
minor: 8, minor: 8,
patch: 0 patch: 0
} }.freeze
STRING = MIN_VERSION.values.join('.') STRING = MIN_VERSION.values.join('.')
def git_version_correct? def git_version_correct?
info = `git --version`.scan(/(\d+)\.(\d+)\.(\d+)/).flatten.map(&:to_i) info = `git --version`.scan(/(\d+)\.(\d+)\.(\d+)/).flatten.map(&:to_i)
return false unless info.count == 3 return false unless info.count == 3
current_version = Hash[[:major, :minor, :patch].zip(info)]
return true if current_version.eql?(MIN_VERSION) current_version = Hash[%i[major minor patch].zip(info)]
return true if current_version[:major] > MIN_VERSION[:major] major_equals = current_version.eql?(MIN_VERSION)
return true if current_version[:major] == MIN_VERSION[:major] && current_version[:minor] > MIN_VERSION[:minor] major_greater = current_version[:major] > MIN_VERSION[:major]
return true if current_version[:major] == MIN_VERSION[:major] && current_version[:minor] == MIN_VERSION[:minor] && current_version[:patch] >= MIN_VERSION[:patch] minor_greater = current_version[:major] == MIN_VERSION[:major] && current_version[:minor] > MIN_VERSION[:minor]
false patch_greater = current_version[:major] == MIN_VERSION[:major] && current_version[:minor] == MIN_VERSION[:minor] && current_version[:patch] >= MIN_VERSION[:patch]
major_equals || major_greater || minor_greater || patch_greater
end end
# TODO: move this to be more like thor's template, empty_directory, etc # TODO: move this to be more like thor's template, empty_directory, etc

View File

@@ -1,4 +1,3 @@
# -*- encoding : utf-8 -*-
require 'fileutils' require 'fileutils'
require 'thor' require 'thor'
@@ -33,19 +32,20 @@ module Homesick
source = Pathname.new(source) source = Pathname.new(source)
return 'Unable to create diff: destination or content is a directory' if destination.directory? || source.directory? return 'Unable to create diff: destination or content is a directory' if destination.directory? || source.directory?
return super(destination, File.binread(source)) unless destination.symlink? return super(destination, File.binread(source)) unless destination.symlink?
say "- #{destination.readlink}", :red, true say "- #{destination.readlink}", :red, true
say "+ #{source.expand_path}", :green, true say "+ #{source.expand_path}", :green, true
end end
end end
desc 'clone URI CASTLE_NAME', 'Clone +uri+ as a castle with name CASTLE_NAME for homesick' desc 'clone URI CASTLE_NAME', 'Clone +uri+ as a castle with name CASTLE_NAME for homesick'
def clone(uri, destination=nil) def clone(uri, destination = nil)
destination = Pathname.new(destination) unless destination.nil? destination = Pathname.new(destination) unless destination.nil?
inside repos_dir do inside repos_dir do
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) raise "Castle already cloned to #{uri}" if uri.to_s.start_with?(repos_dir.to_s)
destination = uri.basename if destination.nil? destination = uri.basename if destination.nil?
@@ -58,7 +58,7 @@ module Homesick
destination = Pathname.new(Regexp.last_match[1].gsub(/\.git$/, '')).basename if destination.nil? 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}" raise "Unknown URI format: #{uri}"
end end
setup_castle(destination) setup_castle(destination)
@@ -75,8 +75,10 @@ module Homesick
destination = Pathname.new(name) destination = Pathname.new(name)
homesickrc = destination.join('.homesickrc').expand_path homesickrc = destination.join('.homesickrc').expand_path
return unless homesickrc.exist? return unless homesickrc.exist?
proceed = options[:force] || shell.yes?("#{name} has a .homesickrc. Proceed with evaling it? (This could be destructive)") proceed = options[:force] || shell.yes?("#{name} has a .homesickrc. Proceed with evaling it? (This could be destructive)")
return say_status 'eval skip', "not evaling #{homesickrc}, #{destination} may need manual configuration", :blue unless proceed return say_status 'eval skip', "not evaling #{homesickrc}, #{destination} may need manual configuration", :blue unless proceed
say_status 'eval', homesickrc say_status 'eval', homesickrc
inside destination do inside destination do
eval homesickrc.read, binding, homesickrc.expand_path.to_s eval homesickrc.read, binding, homesickrc.expand_path.to_s

View File

@@ -1,12 +1,11 @@
# -*- encoding : utf-8 -*-
require 'pathname' require 'pathname'
module Homesick module Homesick
# Various utility methods that are used by Homesick # Various utility methods that are used by Homesick
module Utils module Utils
QUIETABLE = [:say_status] QUIETABLE = [:say_status].freeze
PRETENDABLE = [:system] PRETENDABLE = [:system].freeze
QUIETABLE.each do |method_name| QUIETABLE.each do |method_name|
define_method(method_name) do |*args| define_method(method_name) do |*args|
@@ -36,6 +35,7 @@ module Homesick
def check_castle_existance(name, action) def check_castle_existance(name, action)
return if castle_dir(name).exist? return if castle_dir(name).exist?
say_status :error, say_status :error,
"Could not #{action} #{name}, expected #{castle_dir(name)} to exist and contain dotfiles", "Could not #{action} #{name}, expected #{castle_dir(name)} to exist and contain dotfiles",
:red :red
@@ -149,7 +149,8 @@ module Homesick
end end
def collision_accepted?(destination, source) def collision_accepted?(destination, source)
fail "Arguments must be instances of Pathname, #{destination.class.name} and #{source.class.name} given" unless destination.instance_of?(Pathname) && source.instance_of?(Pathname) raise "Arguments must be instances of Pathname, #{destination.class.name} and #{source.class.name} given" unless destination.instance_of?(Pathname) && source.instance_of?(Pathname)
options[:force] || shell.file_collision(destination) { source } options[:force] || shell.file_collision(destination) { source }
end end

View File

@@ -1,4 +1,3 @@
# -*- encoding : utf-8 -*-
module Homesick module Homesick
# A representation of Homesick's version number in constants, including a # A representation of Homesick's version number in constants, including a
# String of the entire version number # String of the entire version number

View File

@@ -1,4 +1,3 @@
# -*- encoding : utf-8 -*-
require 'spec_helper' require 'spec_helper'
require 'capture-output' require 'capture-output'
require 'pathname' require 'pathname'
@@ -334,7 +333,7 @@ describe Homesick::CLI do
context 'when call and some files conflict' do context 'when call and some files conflict' do
it 'shows differences for conflicting text files' do it 'shows differences for conflicting text files' do
contents = {:castle => 'castle has new content', :home => 'home already has content'} contents = { castle: 'castle has new content', home: 'home already has content' }
dotfile = castle.file('text') dotfile = castle.file('text')
File.open(dotfile.to_s, 'w') do |f| File.open(dotfile.to_s, 'w') do |f|
@@ -348,7 +347,7 @@ describe Homesick::CLI do
end end
it 'shows message or differences for conflicting binary files' do it 'shows message or differences for conflicting binary files' do
# content which contains NULL character, without any parentheses, braces, ... # content which contains NULL character, without any parentheses, braces, ...
contents = {:castle => (0..255).step(30).map{|e| e.chr}.join(), :home => (0..255).step(30).reverse_each.map{|e| e.chr}.join()} contents = { castle: (0..255).step(30).map(&:chr).join, home: (0..255).step(30).reverse_each.map(&:chr).join }
dotfile = castle.file('binary') dotfile = castle.file('binary')
File.open(dotfile.to_s, 'w') do |f| File.open(dotfile.to_s, 'w') do |f|
@@ -798,7 +797,7 @@ describe Homesick::CLI do
allow(homesick).to receive('say_status').once allow(homesick).to receive('say_status').once
.with(be_a(String), match(/.*Would execute.*/), :green) .with(be_a(String), match(/.*Would execute.*/), :green)
expect(homesick).to receive('system').never expect(homesick).to receive('system').never
Capture.stdout { homesick.invoke 'exec', %w(castle_repo ls -la), pretend: true } Capture.stdout { homesick.invoke 'exec', %w[castle_repo ls -la], pretend: true }
end end
end end
@@ -807,7 +806,7 @@ describe Homesick::CLI do
expect(homesick).to receive('say_status').never expect(homesick).to receive('say_status').never
allow(homesick).to receive('system').once allow(homesick).to receive('system').once
.with('ls -la') .with('ls -la')
Capture.stdout { homesick.invoke 'exec', %w(castle_repo ls -la), quiet: true } Capture.stdout { homesick.invoke 'exec', %w[castle_repo ls -la], quiet: true }
end end
end end
end end
@@ -846,7 +845,7 @@ describe Homesick::CLI do
allow(homesick).to receive('say_status').at_least(:once) allow(homesick).to receive('say_status').at_least(:once)
.with(be_a(String), match(/.*Would execute.*/), :green) .with(be_a(String), match(/.*Would execute.*/), :green)
expect(homesick).to receive('system').never expect(homesick).to receive('system').never
Capture.stdout { homesick.invoke 'exec_all', %w(ls -la), pretend: true } Capture.stdout { homesick.invoke 'exec_all', %w[ls -la], pretend: true }
end end
end end
@@ -855,7 +854,7 @@ describe Homesick::CLI do
expect(homesick).to receive('say_status').never expect(homesick).to receive('say_status').never
allow(homesick).to receive('system').at_least(:once) allow(homesick).to receive('system').at_least(:once)
.with('ls -la') .with('ls -la')
Capture.stdout { homesick.invoke 'exec_all', %w(ls -la), quiet: true } Capture.stdout { homesick.invoke 'exec_all', %w[ls -la], quiet: true }
end end
end end
end end