homeconf 0.1.1 → 0.2.0

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: 0c665a0c79b5e74a56181634140175956bf93f51ff32df7ddb9aed81a7917890
4
- data.tar.gz: 14e23e0a0b332f2afdf3d2d9c6db63cbe2336394fe4ede5349b2e90e1a98a781
3
+ metadata.gz: 6dc32e254261a3730608b691c935a0c2f4ba83306d95f4f2b9c43d090f1cdaaa
4
+ data.tar.gz: 18d439a7298746b242e335e63115931e5e419e5080d411cba8b53e7c19a137e7
5
5
  SHA512:
6
- metadata.gz: a6fa7e2c13a83c7aeddb0a01279dff85219c2f9fa5a4fbbe43d562d10b25b1e55d80a963b3d21522a54538aa5e500dda8a81ed8b7821aae24023c7a09753faed
7
- data.tar.gz: d037c435518d1e6af58341887519bc7975c0e0f8b756637635b8d90bb733c8382415a723f51db59a78f3319d050434002301420c8f42d3f3e9402182659cffa7
6
+ metadata.gz: f9907b0452e9968395fa54085e50268ce082847d86c017eb53e93a29cfde70a6c2ec8c603762dae410fa933fbc1c730bb31522afdc906a6a03126d09f93e0cc3
7
+ data.tar.gz: 3915b9d43cb98a63f4b7196016e92fc3ae7161956c36652243d46b5d3537121440e7ddbdb18c4fa0f5a6d7e872157f72fee2fadb9f59ab31f35bfab2aaf451e8
data/bin/homeconf CHANGED
@@ -44,6 +44,11 @@ def print_config(homeconf)
44
44
  print_linked_table(homeconf, homeconf.list_homeconf_dirs)
45
45
  puts 'homeconf files:'
46
46
  print_linked_table(homeconf, homeconf.list_homeconf_files)
47
+
48
+ puts 'init.d scripts:'
49
+ homeconf.list_init_d.each do |init_file|
50
+ puts " #{File.basename(init_file)}"
51
+ end
47
52
  end
48
53
 
49
54
  def print_linked_table(homeconf, filepaths)
@@ -7,7 +7,10 @@
7
7
  # private_dir
8
8
  # *~
9
9
  # *.iml
10
- #
10
+
11
+ # homeconf init.d directory
12
+ init.d
13
+
11
14
  # vcs
12
15
  .git
13
16
  .svn
@@ -6,6 +6,7 @@ require 'fileutils'
6
6
  require 'pathname'
7
7
  require_relative 'errors'
8
8
  require_relative 'file_finder'
9
+ require_relative 'init'
9
10
  require_relative 'pathname'
10
11
 
11
12
  module Homeconf
@@ -26,12 +27,16 @@ module Homeconf
26
27
  @directory = File.realdirpath(File.expand_path(directory))
27
28
 
28
29
  if @directory.eql? @homedir
29
- raise InvalidHomeconfDir, "cannot use directory '#{@directory}': #{$USER} home directory cannot be used."
30
+ raise InvalidHomeconfDir, "cannot use directory '#{@directory}': #{ENV['USER']} home directory cannot be used."
30
31
  end
31
32
  end
32
33
 
33
34
  def create
34
35
  mkdir_unless_exists @directory
36
+
37
+ init = Init.new(@directory)
38
+ mkdir_unless_exists init.dirname
39
+
35
40
  ignore_file = File.join(@directory, IGNORE_FILE)
36
41
  return if File.exist?(ignore_file)
37
42
 
@@ -64,6 +69,9 @@ module Homeconf
64
69
  unlinked_files.each do |f|
65
70
  link(f)
66
71
  end
72
+
73
+ init = Init.new(@directory, verbose: @verbose)
74
+ init.run
67
75
  end
68
76
 
69
77
  def validate
@@ -95,11 +103,13 @@ module Homeconf
95
103
  # Returns whether the homeconf is initialized. Homeconf is initialized when all files and directories in the
96
104
  # homeconf directory that are not ignored and symlinked from the home directory.
97
105
  def initialized?
98
- validate_dir @directory
99
- unlinked_dirs.empty? && unlinked_files.empty?
100
- rescue StandardError => e
101
- puts "Error: #{e}" if @verbose
102
- false
106
+ begin
107
+ validate_dir @directory
108
+ unlinked_dirs.empty? && unlinked_files.empty?
109
+ rescue StandardError => e
110
+ puts "Error: #{e}" if @verbose
111
+ false
112
+ end
103
113
  end
104
114
 
105
115
  def validate_dir(directory)
@@ -117,16 +127,21 @@ module Homeconf
117
127
  FileFinder.homeconf_files @directory
118
128
  end
119
129
 
130
+ def list_init_d
131
+ Init.new(@directory, verbose: @verbose).files
132
+ end
133
+
120
134
  def linked?(filepath)
121
135
  basename = File.basename(filepath)
122
- link = File.join(Dir.home, basename)
136
+ link = File.join(@homedir, basename)
123
137
  return false unless File.symlink?(link)
124
138
 
125
- expected_link_target = File.join(@directory, basename)
126
139
  link_target = File.readlink(link)
127
140
  link_target = File.join(@homedir, link_target) unless Pathname.new(link_target).absolute?
141
+ return false unless File.exist?(link_target)
128
142
 
129
143
  link_target = File.realpath(link_target)
144
+ expected_link_target = File.join(@directory, basename)
130
145
  expected_link_target.eql?(link_target)
131
146
  end
132
147
 
@@ -183,14 +198,17 @@ module Homeconf
183
198
  end
184
199
 
185
200
  def mkdir_unless_exists(directory, permissions = 0o755)
186
- unless Dir.exist? directory
187
- Dir.mkdir directory, permissions
188
- puts "Created directory. #{directory}" if @verbose
201
+ begin
202
+ unless Dir.exist? directory
203
+ Dir.mkdir directory, permissions
204
+ puts "Created directory. #{directory}" if @verbose
205
+ end
206
+ rescue Errno::ENOENT
207
+ raise HomeconfDirNotFound, "No such directory. #{File.dirname directory}"
208
+ rescue Errno::ENOTDIR
209
+ raise InvalidHomeconfDir, "Not a directory. #{File.dirname directory}"
189
210
  end
190
- rescue Errno::ENOENT
191
- raise HomeconfDirNotFound, "No such directory. #{File.dirname directory}"
192
- rescue Errno::ENOTDIR
193
- raise InvalidHomeconfDir, "Not a directory. #{File.dirname directory}"
194
211
  end
212
+
195
213
  end
196
214
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+ require_relative 'errors'
5
+ require_relative 'file_finder'
6
+ module Homeconf
7
+ INITD_DIRNAME = 'init.d'
8
+
9
+ class Init
10
+ attr_reader :dirname, :verbose
11
+
12
+ def initialize(homeconf_dir, verbose: false)
13
+ @verbose = verbose
14
+ @dirname = File.join(homeconf_dir, INITD_DIRNAME)
15
+ end
16
+
17
+ def files
18
+ initd = realpath(@dirname)
19
+ return [] if initd.nil?
20
+ initd.children
21
+ .select(&:file?)
22
+ .reject { |p| p.eql?('.') || p.eql?('..') }
23
+ .select(&:executable?)
24
+ .map(&:to_s)
25
+ .sort
26
+ end
27
+
28
+ def run
29
+ files.each do |file|
30
+ result = system(file)
31
+ unless result
32
+ puts "Error running init.d script '#{File.basename(file)}': #{$?}"
33
+ end
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def realpath(filepath)
40
+ path = nil
41
+ begin
42
+ path = Pathname.new(filepath).expand_path.realpath
43
+ rescue Errno::ENOENT
44
+ return nil
45
+ rescue => e
46
+ raise e
47
+ end
48
+ raise InvalidHomeconfDir.new("Not a directory. #{filepath}") unless path.directory?
49
+ path
50
+ end
51
+
52
+ end
53
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Homeconf
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: homeconf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Lundquist
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-04 00:00:00.000000000 Z
11
+ date: 2023-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faker
@@ -113,6 +113,7 @@ files:
113
113
  - lib/homeconf/errors.rb
114
114
  - lib/homeconf/file_finder.rb
115
115
  - lib/homeconf/homeconf.rb
116
+ - lib/homeconf/init.rb
116
117
  - lib/homeconf/pathname.rb
117
118
  - lib/homeconf/version.rb
118
119
  homepage: https://github.com/EpicMaven/homeconf
@@ -121,8 +122,8 @@ licenses:
121
122
  metadata:
122
123
  homepage_uri: https://github.com/EpicMaven/homeconf
123
124
  bug_tracker_uri: https://github.com/EpicMaven/homeconf/issues
124
- source_code_uri: https://github.com/EpicMaven/homeconf/tree/v0.1.1
125
- documentation_uri: https://rubydoc.info/gems/EpicMaven/0.1.1
125
+ source_code_uri: https://github.com/EpicMaven/homeconf/tree/v0.2.0
126
+ documentation_uri: https://rubydoc.info/gems/EpicMaven/0.2.0
126
127
  post_install_message:
127
128
  rdoc_options:
128
129
  - "--main"