lace 0.4.4 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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: []