lace 0.4.4 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80eaddd6780262b38522e7d8d6f65871b9ab81197b5704133d71e2b4662882c3
4
- data.tar.gz: 3ad1dc409bb5423a65ddd2f5a5ba01e8da64d6dbd571ea4ff66b8de9b5d87336
3
+ metadata.gz: 46881767c22f451c4e42104713158a054acfe41eee483ab2cac43416d8e99738
4
+ data.tar.gz: b8d483c8695e034ddd022522362b8aaad46a9947c98bf02bd92f9880cbda3280
5
5
  SHA512:
6
- metadata.gz: 9197f2403e97ab8f15273faddbbb05d734b0888329dee180078f11d330a1b72c5afe5cbf2cdc1616919319d14651a25b6470d74fc83197c575a9c492d38ec143
7
- data.tar.gz: 1d4edb089fe50cb82f8796fd297d055cf4c58539ad640c1ec06aeeea3de1d330c2d591203dbf62784b6c099e5b46a238269fc7026d0d0580a842aff6468d0a5f
6
+ metadata.gz: 3200530a5a2007710f79508f5027c1caa72bf08377f296a6adb6b94db404a7b6dca9abbcd5dfe7d9e8bc1945741c9f61299e06cbf7e15a5ac74e2ced4d81ee1e
7
+ data.tar.gz: 0a6019e2cae178f0a276ecc943466445f493b6a30df7f0ae5f36db9a344b2641bfde336cced8e6be47e02b979ed7d749632d6e0057e544a65d21b50f3c219242
data/lib/cmd/list.rb CHANGED
@@ -2,38 +2,20 @@ require 'lace/package'
2
2
 
3
3
  module Lace extend self
4
4
 
5
- def linked_files
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
18
- end
19
-
20
5
  def active_packages
21
- linked_files.map do |path|
22
- Pathname.new(File.dirname(path)).basename.to_s
23
- end.uniq
6
+ installed_packages.select(&:is_active?)
24
7
  end
25
8
 
26
9
  def installed_packages
27
10
  Dir.glob(File.join(Lace.pkgs_folder, "**")).sort.map do |p|
28
- Pathname.new(p).basename.to_s
11
+ Package.new(Pathname.new(p).basename.to_s, false)
29
12
  end
30
13
  end
31
14
 
32
15
  def list
33
16
  if installed_packages.length > 0
34
- installed_packages.map do |d|
35
- package = Package.new(d, false)
36
- puts "[#{Tty.green}#{package.is_active? ? "*" : " "}#{Tty.reset}] #{d}#{package.is_modified? ? " (has local changes)":""}"
17
+ installed_packages.map do |package|
18
+ puts "[#{Tty.green}#{package.is_active? ? "*" : " "}#{Tty.reset}] #{package.name}#{package.is_modified? ? " (has local changes)":""}"
37
19
  end
38
20
  else
39
21
  puts "There are no pkgs installed"
@@ -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
@@ -7,10 +7,9 @@ class Package
7
7
  attr_reader :name, :facts, :path
8
8
 
9
9
  def initialize name, flavor=nil
10
- require 'cmd/list'
11
- raise PackageNotInstalled.new(name) unless Lace.installed_packages.include?(name)
12
10
  @name = name
13
11
  @path = Lace.pkgs_folder/name
12
+ raise PackageNotInstalled.new(name) unless @path.exist?
14
13
  @flavor = flavor
15
14
  read_facts!
16
15
  end
@@ -46,12 +45,15 @@ class Package
46
45
  end
47
46
 
48
47
  def is_active?
48
+ home_dir = ENV["HOME"]
49
49
  if @facts.has_flavors? && @flavor == false
50
50
  @facts.flavors.any?{|f| Package.new(@name, f).is_active?}
51
51
  else
52
- linked_files = Set.new Lace.linked_files.map(&:to_s)
53
- config_files = Set.new @facts.config_files.map(&:to_s)
54
- config_files.subset? linked_files
52
+ config_files = Set.new @facts.config_files
53
+ config_files.all? do |p|
54
+ dotfile = p.as_dotfile(home_dir, @path)
55
+ dotfile.exist? and dotfile.symlink? and dotfile.readlink.dirname.to_s.include?(@path)
56
+ end
55
57
  end
56
58
  end
57
59
 
@@ -82,14 +84,16 @@ class Package
82
84
  # if ends in erb -> generate it
83
85
  src = file
84
86
  dest = src.as_dotfile(home_dir, @path)
85
- if dest.exist? && dest.directory? && ARGV.force?
87
+ if dest.exist? && dest.directory?
88
+ raise WouldOverwriteError.new(dest, src) unless ARGV.force?
86
89
  FileUtils.mv dest, dest.as_backup
87
90
  end
88
91
  link_file_or_directory src, dest
89
92
  end
90
93
 
91
94
  def link_file_or_directory(src, dest)
92
- if !dest.dirname.exist?
95
+ puts "link_file"
96
+ unless dest.dirname.exist?
93
97
  dest.dirname.mkpath
94
98
  end
95
99
  FileUtils.ln_s src, dest, :force => ARGV.force?
data/lib/lace/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lace
2
- VERSION = "0.4.4"
2
+ VERSION = "0.5.1"
3
3
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.1
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: 2020-03-20 00:00:00.000000000 Z
11
+ date: 2024-12-13 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: []
@@ -45,7 +45,7 @@ homepage: https://github.com/kairichard/lace
45
45
  licenses:
46
46
  - MIT
47
47
  metadata: {}
48
- post_install_message:
48
+ post_install_message:
49
49
  rdoc_options: []
50
50
  require_paths:
51
51
  - lib
@@ -53,15 +53,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: 1.8.6
56
+ version: 3.0.0
57
57
  required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  requirements: []
63
- rubygems_version: 3.1.2
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: []