lace 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MjlhNmZlYTA1ZDNhM2FjNGRiM2E2YWU1YTBkNGJjNmM5ZDcwMjkzMw==
5
- data.tar.gz: !binary |-
6
- ZjkzNjE1ZTY5NTA1ZjEzODkxYjQ3YmMxNzQyMDkzYTU5NTYyN2E1MA==
2
+ SHA256:
3
+ metadata.gz: d98c40941c6f892e520dbd99ba1d29f7a3485ce59353e12efbe8268ec38cbe68
4
+ data.tar.gz: 6f04e59649921e470016585f28390e13c3b3e6fed0c229bb47cf291d2c795999
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- N2NkYTRiZTkzOTQyYTI4ZjBiZTE4ZjkyZDA3ZDg0YTVjMjVhYmViNjFhMTRm
10
- M2U0MjJmOTM1NzhmNTc5ZDUyYzgxNWMxNzM0YjZjYmFhMjE2MzFjYzc4YTdk
11
- NDU4ZTczMmQ4NWM3MDM5ZjY0Y2RjMzBmMTY0NDg0ZjBkOWU3MmI=
12
- data.tar.gz: !binary |-
13
- M2JlY2ZmNDZjZjY0OWQ1NDNlOWMzNWQwYjQzMjliYjg1YTE5ZTNmNTNlYzM5
14
- ZjkwZDQzZDdhODc2OTRiNzI3ZmUwNjllMGM3OTE3OTEwYzM3MjI4YmE0ZTAw
15
- NWVjZDYwMGQ5MmU2NDM5ODdjZmUxMTUwOWUxZDljZTQ5MDgxMDY=
6
+ metadata.gz: 2972f704cc11a8e6075bd3a2adff8cc560a318af551bc91dbb751f82777f75b23d0419c4fc43f7618f2d02dcdce79fab57757ab1ba9e1f9dda70f090ef8e0dc8
7
+ data.tar.gz: e367b0b4e7e5faf9ae965a8cd807b5ac775e8e4b431604ec5500590308488d960523fff4fd8b1b5a0c687425e466eb8be98d5b8e136baeb491d3b74f667fc672
data/bin/lace CHANGED
@@ -36,10 +36,6 @@ require "extend/pathname"
36
36
 
37
37
  ARGV.extend(LaceArgvExtension)
38
38
 
39
- if ARGV.debug?
40
- require 'pry'
41
- end
42
-
43
39
  def require? path
44
40
  require path.to_s.chomp
45
41
  rescue LoadError => e
@@ -55,12 +51,6 @@ case ARGV.first when '-h', '--help', '--usage', '-?', 'help', nil
55
51
  when '--version'
56
52
  puts Lace::VERSION
57
53
  exit 0
58
- when '-v'
59
- puts "lace #{Lace::VERSION}"
60
- # Shift the -v to the end of the parameter list
61
- ARGV << ARGV.shift
62
- # If no other arguments, just quit here.
63
- exit 0 if ARGV.length == 1
64
54
  end
65
55
 
66
56
 
@@ -99,7 +89,6 @@ rescue Interrupt => e
99
89
  rescue RuntimeError, SystemCallError => e
100
90
  raise if e.message.empty?
101
91
  onoe e
102
- puts e.backtrace if false
103
92
  exit 1
104
93
  rescue Exception => e
105
94
  onoe e
data/lib/cmd/activate.rb CHANGED
@@ -1,12 +1,11 @@
1
-
2
1
  require 'lace/package'
3
2
  require 'lace/exceptions'
4
3
 
5
4
  module Lace extend self
6
- def activate
7
- package_name = ARGV.shift
8
- raise ResourceNotSpecified unless package_name
9
- PackageUtils.activate package_name
10
- end
5
+ def activate
6
+ package_name = ARGV.shift
7
+ raise ResourceNotSpecified unless package_name
8
+ PackageUtils.activate package_name
9
+ end
11
10
  end
12
11
 
@@ -2,10 +2,10 @@ require 'lace/package'
2
2
  require 'lace/exceptions'
3
3
 
4
4
  module Lace extend self
5
- def deactivate
6
- package_name = ARGV.shift
7
- raise ResourceNotSpecified unless package_name
8
- PackageUtils.deactivate package_name
9
- end
5
+ def deactivate
6
+ package_name = ARGV.shift
7
+ raise ResourceNotSpecified unless package_name
8
+ PackageUtils.deactivate package_name
9
+ end
10
10
  end
11
11
 
data/lib/cmd/fetch.rb CHANGED
@@ -2,18 +2,18 @@ require 'lace/package'
2
2
  require 'lace/exceptions'
3
3
 
4
4
  module Lace extend self
5
- def fetch
6
- resource = ARGV.shift
5
+ def fetch
6
+ resource = ARGV.shift
7
7
  desired_package_name = ARGV.value "name"
8
- raise ResourceNotSpecified unless resource
9
- package_name, target_folder = PackageUtils.fetch(resource, desired_package_name)
8
+ raise ResourceNotSpecified unless resource
9
+ package_name, target_folder = PackageUtils.fetch(resource, desired_package_name)
10
10
  begin
11
- Package.new(package_name, false)
11
+ Package.new(package_name, false)
12
12
  rescue PackageFactsNotFound => e
13
- onoe e.message
14
- onoe "Removing fetched files"
15
- FileUtils.rm_rf(target_folder)
16
- Lace.failed = true
13
+ onoe e.message
14
+ onoe "Removing fetched files"
15
+ FileUtils.rm_rf(target_folder)
16
+ Lace.failed = true
17
17
  end
18
- end
18
+ end
19
19
  end
data/lib/cmd/list.rb CHANGED
@@ -3,11 +3,18 @@ require 'lace/package'
3
3
  module Lace extend self
4
4
 
5
5
  def linked_files
6
- home_dir = ENV["HOME"]
7
- Dir.foreach(home_dir).map do |filename|
8
- next if filename == '.' or filename == '..'
9
- File.readlink File.join(home_dir, filename) if File.symlink? File.join(home_dir, filename)
10
- end.compact.uniq
6
+ home_dir = Pathname.new ENV["HOME"]
7
+ find_links home_dir
8
+ end
9
+
10
+ def find_links dir
11
+ dir.children.map do |path|
12
+ if path.directory? && !path.symlink?
13
+ find_links path
14
+ else
15
+ File.readlink path if path.symlink?
16
+ end
17
+ end.flatten.compact.uniq
11
18
  end
12
19
 
13
20
  def active_packages
data/lib/cmd/remove.rb CHANGED
@@ -2,10 +2,10 @@ require 'lace/package'
2
2
  require 'lace/exceptions'
3
3
 
4
4
  module Lace extend self
5
- def remove
6
- package_name = ARGV.shift
7
- raise ResourceNotSpecified unless package_name
8
- PackageUtils.remove package_name
9
- end
5
+ def remove
6
+ package_name = ARGV.shift
7
+ raise ResourceNotSpecified unless package_name
8
+ PackageUtils.remove package_name
9
+ end
10
10
  end
11
11
 
data/lib/cmd/setup.rb CHANGED
@@ -2,8 +2,8 @@ require 'lace/package'
2
2
  require 'lace/exceptions'
3
3
 
4
4
  module Lace extend self
5
- def setup
6
- package_name = ARGV.shift
7
- PackageUtils.setup package_name
8
- end
5
+ def setup
6
+ package_name = ARGV.shift
7
+ PackageUtils.setup package_name
8
+ end
9
9
  end
data/lib/cmd/update.rb CHANGED
@@ -2,9 +2,9 @@ require 'lace/package'
2
2
  require 'lace/exceptions'
3
3
 
4
4
  module Lace extend self
5
- def update
6
- resource = ARGV.shift
7
- raise ResourceNotSpecified unless resource
8
- PackageUtils.update resource
9
- end
5
+ def update
6
+ resource = ARGV.shift
7
+ raise ResourceNotSpecified unless resource
8
+ PackageUtils.update resource
9
+ end
10
10
  end
data/lib/cmd/upgrade.rb CHANGED
@@ -2,7 +2,7 @@ require 'lace/package'
2
2
  require 'lace/exceptions'
3
3
 
4
4
  module Lace extend self
5
- def upgrade
5
+ def upgrade
6
6
  require 'cmd/list'
7
7
  if Lace.active_packages.empty?
8
8
  upgrade_lace_folder
@@ -10,7 +10,7 @@ module Lace extend self
10
10
  onoe "Please deactivate all packages before continuing"
11
11
  Lace.failed = true
12
12
  end
13
- end
13
+ end
14
14
  def upgrade_lace_folder
15
15
  old_dir = Pathname.new(ENV["HOME"])/".cassias"
16
16
  if old_dir.exist?
data/lib/cmd/validate.rb CHANGED
@@ -17,14 +17,14 @@ Lace-Manifest Validation Report:
17
17
  EOS
18
18
 
19
19
  module Lace extend self
20
- def validate
21
- resource = ARGV.shift
20
+ def validate
21
+ resource = ARGV.shift
22
22
  flavor = ARGV.shift
23
- raise ResourceNotSpecified unless resource
23
+ raise ResourceNotSpecified unless resource
24
24
  validation = PackageValidator.new(PackageFacts.new(resource), flavor)
25
25
  puts ERB.new(VALIDATE, nil, '-').result(binding)
26
26
  Lace.failed = true if validation.has_errors?
27
- end
27
+ end
28
28
  end
29
29
 
30
30
  class PackageValidator
@@ -58,7 +58,7 @@ class PackageValidator
58
58
  def check_hooks hook_cmd
59
59
  hook_cmd.map do |cmd|
60
60
  if !File.exist? cmd
61
- "#{cmd} cannot be found"
61
+ "#{cmd} cannot be found"
62
62
  elsif !File.executable? cmd
63
63
  "#{cmd} is not executable"
64
64
  end
data/lib/cmd/where.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'lace/package'
2
+ require 'lace/exceptions'
3
+
4
+ module Lace extend self
5
+ def where
6
+ package_name = ARGV.shift
7
+ raise ResourceNotSpecified unless package_name
8
+ begin
9
+ package = Package.new(package_name, false)
10
+ puts "#{package.path}"
11
+ rescue PackageFactsNotFound => e
12
+ onoe "asd"
13
+ Lace.failed = true
14
+ end
15
+ end
16
+ end
@@ -155,9 +155,9 @@ class GitDownloadStrategy < AbstractDownloadStrategy
155
155
  if super
156
156
  super
157
157
  elsif @uri.include? "github.com"
158
- @uri.split("/")[-2]
158
+ @uri.split("/")[-2]
159
159
  elsif File.directory? @uri
160
- File.basename(@uri)
160
+ File.basename(@uri)
161
161
  else
162
162
  raise "Cannot determine a proper name with #@uri"
163
163
  end
@@ -177,15 +177,8 @@ end
177
177
 
178
178
 
179
179
  class DownloadStrategyDetector
180
- def self.detect(uri, strategy=nil)
181
- if strategy.nil?
180
+ def self.detect(uri)
182
181
  detect_from_uri(uri)
183
- elsif Symbol === strategy
184
- detect_from_symbol(strategy)
185
- else
186
- raise TypeError,
187
- "Unknown download strategy specification #{strategy.inspect}"
188
- end
189
182
  end
190
183
 
191
184
  def self.detect_from_uri(uri)
@@ -200,20 +193,11 @@ class DownloadStrategyDetector
200
193
  end
201
194
 
202
195
  case uri
203
- when %r[^git://] then GitDownloadStrategy
204
- when %r[^https?://.+\.git$] then GitDownloadStrategy
196
+ when %r[^git://] then GitDownloadStrategy
197
+ when %r[^https?://.+\.git$] then GitDownloadStrategy
205
198
  # else CurlDownloadStrategy
206
199
  else
207
200
  raise "Cannot determine download startegy from #{uri}"
208
201
  end
209
202
  end
210
-
211
- def self.detect_from_symbol(symbol)
212
- case symbol
213
- when :git then GitDownloadStrategy
214
- when :local_file then LocalFileStrategy
215
- else
216
- raise "Unknown download strategy #{strategy} was requested."
217
- end
218
- end
219
203
  end
@@ -21,8 +21,8 @@ class NonActiveFlavorError < RuntimeError
21
21
  end
22
22
 
23
23
  class PackageAlreadyInstalled < RuntimeError
24
- def initialize
25
- super "Package already installed"
24
+ def initialize location
25
+ super "Package already installed at #{location}"
26
26
  end
27
27
  end
28
28
 
@@ -58,6 +58,14 @@ class PackageFlavorDoesNotExist < FlavorError
58
58
  end
59
59
  end
60
60
 
61
+ class WouldOverwriteError < RuntimeError
62
+ def initialize dest, src
63
+ super %Q(Refusing to overwrite #{dest} with #{src}
64
+ Use glob pattern in .lace.yaml like #{src.basename}/**/*
65
+ or invoke lace with `--force` to create backup of #{dest})
66
+ end
67
+ end
68
+
61
69
  class ManifestErbError < RuntimeError
62
70
  def initialize fact, exception
63
71
  super "#{exception.to_s}\nin #{fact.facts_file}"
@@ -43,7 +43,7 @@ class PackageFacts
43
43
  end
44
44
 
45
45
  def has_key? key
46
- @unflavorable_facts && ( @unflavorable_facts.has_key?(key) or @facts.has_key?(key))
46
+ @unflavorable_facts && (@unflavorable_facts.has_key?(key) or @facts.has_key?(key))
47
47
  end
48
48
 
49
49
  def version
@@ -87,11 +87,11 @@ class PackageFacts
87
87
  protected
88
88
  def facts_file_to_hash
89
89
  begin
90
- rendered_manifest = ERB.new(@facts_file.read, nil, '-').result(binding)
90
+ rendered_manifest = ERB.new(@facts_file.read, trim_mode: '-').result(binding)
91
91
  rescue Exception => e
92
92
  raise ManifestErbError.new(self, e)
93
93
  end
94
- value = YAML.load rendered_manifest
94
+ value = YAML.load rendered_manifest, aliases: true
95
95
  if value.is_a?(String) && value == "---"
96
96
  return Hash.new
97
97
  else
@@ -82,14 +82,15 @@ class Package
82
82
  # if ends in erb -> generate it
83
83
  src = file
84
84
  dest = src.as_dotfile(home_dir, @path)
85
- if dest.exist? && dest.directory? && ARGV.force?
85
+ if dest.exist? && dest.directory?
86
+ raise WouldOverwriteError.new(dest, src) unless ARGV.force?
86
87
  FileUtils.mv dest, dest.as_backup
87
88
  end
88
89
  link_file_or_directory src, dest
89
90
  end
90
91
 
91
92
  def link_file_or_directory(src, dest)
92
- if !dest.dirname.exist?
93
+ unless dest.dirname.exist?
93
94
  dest.dirname.mkpath
94
95
  end
95
96
  FileUtils.ln_s src, dest, :force => ARGV.force?
@@ -5,7 +5,7 @@ class PackageUtils
5
5
  def self.fetch uri, desired_package_name=nil
6
6
  downloader_cls = DownloadStrategyDetector.detect(uri)
7
7
  downloader = downloader_cls.new(uri, desired_package_name)
8
- raise PackageAlreadyInstalled.new if downloader.target_folder.exist?
8
+ raise PackageAlreadyInstalled.new(downloader.target_folder) if downloader.target_folder.exist?
9
9
  downloader.fetch
10
10
  return downloader.name, downloader.target_folder
11
11
  end
data/lib/lace/package.rb CHANGED
@@ -1,5 +1,3 @@
1
1
  require 'lace/package/utils'
2
2
  require 'lace/package/facts'
3
3
  require 'lace/package/package'
4
-
5
-
data/lib/lace/utils.rb CHANGED
@@ -90,9 +90,9 @@ end
90
90
 
91
91
  def determine_os
92
92
  case RUBY_PLATFORM
93
- when /darwin/ then :mac
94
- when /linux/ then :linux
95
- else raise InvalidOSError
93
+ when /darwin/ then :mac
94
+ when /linux/ then :linux
95
+ else raise InvalidOSError
96
96
  end
97
97
  end
98
98
 
data/lib/lace/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lace
2
- VERSION = "0.4.3"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,22 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kai Richard Koenig
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-22 00:00:00.000000000 Z
11
+ date: 2024-12-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Lace lets you manage your dotfiles when using them on multiple machines
14
- email: kai@kairichardkoenig.de
14
+ email: kai.richard.koenig@gmail.com
15
15
  executables:
16
16
  - lace
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - bin/lace
20
21
  - lib/cmd/activate.rb
21
22
  - lib/cmd/deactivate.rb
22
23
  - lib/cmd/fetch.rb
@@ -28,40 +29,39 @@ files:
28
29
  - lib/cmd/update.rb
29
30
  - lib/cmd/upgrade.rb
30
31
  - lib/cmd/validate.rb
32
+ - lib/cmd/where.rb
31
33
  - lib/extend/ARGV.rb
32
34
  - lib/extend/pathname.rb
35
+ - lib/lace.rb
33
36
  - lib/lace/download_strategy.rb
34
37
  - lib/lace/exceptions.rb
38
+ - lib/lace/package.rb
35
39
  - lib/lace/package/facts.rb
36
40
  - lib/lace/package/package.rb
37
41
  - lib/lace/package/utils.rb
38
- - lib/lace/package.rb
39
42
  - lib/lace/utils.rb
40
43
  - lib/lace/version.rb
41
- - lib/lace.rb
42
- - bin/lace
43
44
  homepage: https://github.com/kairichard/lace
44
45
  licenses:
45
46
  - MIT
46
47
  metadata: {}
47
- post_install_message:
48
+ post_install_message:
48
49
  rdoc_options: []
49
50
  require_paths:
50
51
  - lib
51
52
  required_ruby_version: !ruby/object:Gem::Requirement
52
53
  requirements:
53
- - - ! '>='
54
+ - - ">="
54
55
  - !ruby/object:Gem::Version
55
- version: 1.8.6
56
+ version: 3.0.0
56
57
  required_rubygems_version: !ruby/object:Gem::Requirement
57
58
  requirements:
58
- - - ! '>='
59
+ - - ">="
59
60
  - !ruby/object:Gem::Version
60
61
  version: '0'
61
62
  requirements: []
62
- rubyforge_project:
63
- rubygems_version: 2.1.11
64
- signing_key:
63
+ rubygems_version: 3.5.22
64
+ signing_key:
65
65
  specification_version: 4
66
66
  summary: Manage your .dotfiles
67
67
  test_files: []