lace 0.5.2 → 0.5.3

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: f7f0f417d0dbe5369de03faab17bf6deaca9fb97974d297ba00737111a83b3ee
4
- data.tar.gz: 6506f85738991370546e31f9b2f1fa890ac73266c4acebfe0efc7df151819186
3
+ metadata.gz: 0e9374d4a207b650f55ec19e285891ac00fc55da706d5a87b8ce5ff642315f30
4
+ data.tar.gz: 457594f9250c5e7045a00b227596c41f461a8487e3be6c95240f6891b8067e6e
5
5
  SHA512:
6
- metadata.gz: 822ca5da353445be87fb1d31f2c4cb3bd0a8582bbbaecbf64572878e092fb83f63cf226407767414ea2b0e6a0d69d02b299da914ffbea869912301f4b8226915
7
- data.tar.gz: 3d5039c97612a34c1daadb8239e41b620d33f5b6db0a91b029a1e3b80b39acc32663de850959fb75d8548b74fb40171293d63342136cc85d8a1e42c79771d47d
6
+ metadata.gz: f546f2835196c35b71522b3683376c79c3deee6b82529c24108639d44fa148bca4a1127aefcab3d6e38209b8c7cda917a535019fb1f2068db92d06427817b8b2
7
+ data.tar.gz: 386d3fb4712ad53fe2fc1f06cfa853c1fd552d5a23b0d46fc8160925b62ed5ff09f19ee41d48309ba5ae55bce9eb1964c4b1f6ce65b25507f3615eb0da2fc824
data/lib/cmd/apply.rb ADDED
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lace/package'
4
+ require 'lace/exceptions'
5
+ require 'fileutils'
6
+
7
+ module Lace
8
+ module_function
9
+
10
+ def apply
11
+ package_name = ARGV.shift
12
+ raise ResourceNotSpecified unless package_name
13
+ ohai "Applying package #{package_name}"
14
+ package = Package.new(package_name, ARGV.first)
15
+
16
+ diff = PackageUtils.diff(package_name)
17
+
18
+ if diff.added.empty? && diff.removed.empty?
19
+ puts 'Everything is already in sync. Nothing to do.'
20
+ return
21
+ end
22
+
23
+ diff.added.each do |f|
24
+ dest = f.as_dotfile(Dir.home, package.path)
25
+ dest_path = dest.to_path.gsub(Dir.home, '$HOME')
26
+ puts "Link #{f.basename} to #{dest_path}?"
27
+ next unless ARGV.confirm?("Link #{f.basename} to #{dest_path}?")
28
+
29
+ package.link_file_or_directory(f, dest, force: true)
30
+ ohai "Linked"
31
+ end
32
+
33
+ diff.removed.each do |f|
34
+ dest = f.as_dotfile(Dir.home, package.path)
35
+ dest_path = dest.to_path.gsub(Dir.home, '$HOME')
36
+ next unless ARGV.confirm?("Remove link for #{f.basename} from #{dest_path}?")
37
+
38
+ package.unlink_file(f, force: true)
39
+ ohai "Removed"
40
+ end
41
+ end
42
+ end
data/lib/cmd/diff.rb CHANGED
@@ -12,6 +12,12 @@ module Lace
12
12
 
13
13
  package = Package.new(package_name, ARGV.first)
14
14
  diff = PackageUtils.diff package_name
15
+
16
+ if diff.added.empty? && diff.removed.empty?
17
+ ohai 'Everything is already in sync.'
18
+ return
19
+ end
20
+
15
21
  ohai 'The following files would be added [+] or removed [-]'
16
22
  diff.added.each do |f|
17
23
  puts "[+] #{f.basename} -> #{f.as_dotfile(Dir.home, package.path).to_path.gsub(Dir.home, '$HOME')}"
data/lib/extend/ARGV.rb CHANGED
@@ -78,6 +78,16 @@ module LaceArgvExtension
78
78
  end
79
79
  end
80
80
 
81
+ def confirm?(prompt)
82
+ if flag?('--yes')
83
+ true
84
+ else
85
+ print "#{prompt} [y/N] "
86
+ $stdout.flush
87
+ /y/i.match?(STDIN.gets)
88
+ end
89
+ end
90
+
81
91
  private
82
92
 
83
93
  def downcased_unique_named
@@ -69,11 +69,8 @@ class Package
69
69
 
70
70
  def deactivate!
71
71
  files = @facts.config_files
72
- home_dir = Dir.home
73
72
  files.each do |file|
74
- file = Pathname.new(file)
75
- dotfile = file.as_dotfile(home_dir, @path)
76
- FileUtils.rm_f dotfile if dotfile.exist? && dotfile.readlink == file
73
+ unlink_file file
77
74
  end
78
75
  end
79
76
 
@@ -84,6 +81,15 @@ class Package
84
81
  end
85
82
  end
86
83
 
84
+ def unlink_file(file, force: ARGV.force?)
85
+ dotfile = file.as_dotfile(Dir.home, @path)
86
+ if (dotfile.exist? || force) && dotfile.symlink? && dotfile.readlink == file
87
+ FileUtils.rm_f(dotfile)
88
+ return true
89
+ end
90
+ false
91
+ end
92
+
87
93
  def link_file(file)
88
94
  home_dir = Dir.home
89
95
  # if ends in erb -> generate it
@@ -94,11 +100,11 @@ class Package
94
100
 
95
101
  FileUtils.mv dest, dest.as_backup
96
102
  end
97
- link_file_or_directory src, dest
103
+ link_file_or_directory src, dest, force: ARGV.force?
98
104
  end
99
105
 
100
- def link_file_or_directory(src, dest)
106
+ def link_file_or_directory(src, dest, force: ARGV.force?)
101
107
  dest.dirname.mkpath unless dest.dirname.exist?
102
- FileUtils.ln_s src, dest, force: ARGV.force?
108
+ FileUtils.ln_s src, dest, force: force
103
109
  end
104
110
  end
@@ -34,7 +34,7 @@ class PackageUtils
34
34
 
35
35
  def self.deactivate(package_name)
36
36
  package = Package.new(package_name, ARGV.first)
37
- raise(NonActiveFlavorError) unless package.is_active? && ARGV.force?
37
+ raise(NonActiveFlavorError) unless package.is_active? || ARGV.force?
38
38
 
39
39
  ohai('Deactivating')
40
40
  package.deactivate!
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lace/package'
4
+ require 'lace/exceptions'
data/lib/lace/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lace
2
- VERSION = "0.5.2"
2
+ VERSION = "0.5.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kai Richard Koenig
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-25 00:00:00.000000000 Z
11
+ date: 2025-06-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Lace lets you manage your dotfiles when using them on multiple machines
14
14
  email: kai.richard.koenig@gmail.com
@@ -19,6 +19,7 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - bin/lace
21
21
  - lib/cmd/activate.rb
22
+ - lib/cmd/apply.rb
22
23
  - lib/cmd/deactivate.rb
23
24
  - lib/cmd/diff.rb
24
25
  - lib/cmd/fetch.rb
@@ -40,6 +41,7 @@ files:
40
41
  - lib/lace/package/facts.rb
41
42
  - lib/lace/package/package.rb
42
43
  - lib/lace/package/utils.rb
44
+ - lib/lace/package_cli.rb
43
45
  - lib/lace/utils.rb
44
46
  - lib/lace/version.rb
45
47
  homepage: https://github.com/kairichard/lace