archlinux 0.1.0 → 0.2.0

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: c5a6439dbf4a18b2f03c70c67dd3707dbe0aa860e147bbb86242a5540173fe09
4
- data.tar.gz: 2b56713549a7861cf2602e3132f66c94a66d10419de67fe89ea973a32724e6bc
3
+ metadata.gz: 9a503802bfcc8eecbd6b5605d96f6cf9de4ded00319ec74c9a091d56840fd86b
4
+ data.tar.gz: 31a14e3c70aed70bad24a5a716fb3088093866ea2db7c7e46b87ca3c101aad24
5
5
  SHA512:
6
- metadata.gz: 69423c894c111c99ca618d9b86e17f10e7b040edd8e2facb06fa6dd599fb37d1b4011162da28a13dc73e2f15859437c36cb5284e1b0e393f25c014da5543ea9d
7
- data.tar.gz: 4823b44bfdb3ca749657bf81d1b003cd5abb72f08d822d5880890a8cd6b561855f05f5df46b618b48ede8cbe3874f999e3f2372016d50e200a988ca3c73196bf
6
+ metadata.gz: af974b69974f277bf426b912c7619ba7fc6d87ea4fc7dfa86b5858c6abe9b2a6b862d8d32359344d566c2d4a59fd92a74be14ef3fa4bb1cbe955887c07321e80
7
+ data.tar.gz: 712fc0f6b8035b038facd41ea33df1185be0819d77f0b11caf91cc08440d3432d1765e1eb652aa83865037d6e8d1f0d464475222dcf77264d6acd5493bfe91e2
data/archlinux.gemspec CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
4
4
  s.files = `git ls-files`.lines.map(&:chomp)
5
5
  s.name = 'archlinux'
6
6
  s.summary = "Archlinux DSL to manage whole system state"
7
- s.version = '0.1.0'
7
+ s.version = '0.2.0'
8
8
  s.licenses = ["GPL-3.0-or-later"]
9
9
  s.metadata['rubygems_mfa_required'] = 'true'
10
10
  s.required_ruby_version = '>=3.0'
@@ -47,6 +47,15 @@ def symlink(target, link_name)
47
47
  exit
48
48
  end
49
49
 
50
+ # Check if file exists and is a symlink
51
+ if File.exist?(link_name) && File.symlink?(link_name)
52
+ links_to = File.readlink(link_name)
53
+ next if links_to == target # skip creating link if it's already exists
54
+
55
+ # Remove the link if it links to something else
56
+ File.unlink link_name
57
+ end
58
+
50
59
  log "Linking", target: target, link_name: link_name
51
60
 
52
61
  # make the parent if it doesn't exist
@@ -19,29 +19,28 @@ def package(*names)
19
19
 
20
20
  # install step to install packages required and remove not required
21
21
  on_install do
22
- # install missing packages
23
- need_install = @packages.reject { |p| package? p }
24
- need_install_args = need_install.join(" ")
25
- if need_install.any?
26
- log "Installing packages", packages: need_install
27
- sudo "pacman --noconfirm --needed -S #{need_install_args}"
28
- end
29
-
30
- # expand groups to packages
22
+ # Expand groups to packages
31
23
  packages_args = @packages.join(" ")
32
24
  group_packages = Set.new(`pacman --quiet -Sg #{packages_args}`.lines.map(&:strip))
33
25
 
34
- # full list of packages that should exist on the system
35
- all = @packages + group_packages
26
+ all = @packages + group_packages # full list of packages that should exist on the system
36
27
 
37
28
  # actual list on the system
38
29
  installed = Set.new(`pacman -Q --quiet --explicit --unrequired --native`.lines.map(&:strip))
39
30
 
40
31
  unneeded = installed - all
41
- next if unneeded.empty?
32
+ if unneeded.any?
33
+ log "Removing packages", packages: unneeded
34
+ sudo("pacman -Rsu #{unneeded.join(" ")}")
35
+ end
42
36
 
43
- log "Removing packages", packages: unneeded
44
- sudo("pacman -Rsu #{unneeded.join(" ")}")
37
+ # install missing packages
38
+ need_install = @packages.reject { |p| package? p }
39
+ need_install_args = need_install.join(" ")
40
+ if need_install.any?
41
+ log "Installing packages", packages: need_install
42
+ sudo "pacman --noconfirm --needed -S #{need_install_args}"
43
+ end
45
44
  end
46
45
  end
47
46
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: archlinux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emad Elsaid
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-28 00:00:00.000000000 Z
11
+ date: 2024-04-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: