entangler 1.3.3 → 1.4.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: eaabc355f9beb18ce0d865b21607660f160f499f33fec9f362e1f06206cdae81
4
- data.tar.gz: '0396106eac3605892be8cfcf516be7f8470131d0380035ce062d5bc8667cda8a'
3
+ metadata.gz: d3f771c45fb004582c9d0dd513078d868968799eced4329ffb12ae26af25edc9
4
+ data.tar.gz: 2099f06c0b478738ed7486c2d8af0baf7e8ec9eb44844e3cc367ca2ed669ac13
5
5
  SHA512:
6
- metadata.gz: f75598f2858b29948b406f8362274905abcc396d45697b2aafacdd59566925fffaf7ab77408f556d90cc176c52aaf2225ebe2a6e644b4c321af4180d5e1f34c2
7
- data.tar.gz: 7efcebf6200f16625804fc14ab50ad2973e3e5f8fa05f6f800b24fc001b5efdaf3ddd664c338201526662b5db6a3ee9f7882fb46d39077731f817d25f5b51211
6
+ metadata.gz: f79f9ec42e30d2a3c033cbf350fa3f6ca158c43f62290a8f9a67ebc02feb2cdf1b36b8cef461fa28e43dbbb88080a10453be4a7ae966feef7354b34c4ec9a540
7
+ data.tar.gz: cb83a67740893ae8d0e972be608e6aab64f80f31e47b126faf1f5b0f830148e53986c51fd877343541264dd9b92461137c3dff71839f62989f0c47914ca75d54
data/README.md CHANGED
@@ -30,6 +30,8 @@ Options:
30
30
  All paths should be relative to the base sync directory.
31
31
  -p, --port PORT Overwrite the SSH port (usually 22)
32
32
  (doesn't do anything in slave mode)
33
+ --force-polling Forces the use of the listen polling adapter
34
+ (works cross-platform, generally slower, doesn't do anything in slave mode)
33
35
  --no-rvm Skip attempting to load RVM on remote
34
36
  -v, --verbose Log Debug lines
35
37
  -q, --quiet Don't log to stdout in master process
data/entangler.gemspec CHANGED
@@ -30,4 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'rubocop-rspec', '~> 2.0'
31
31
  spec.add_dependency 'listen', '~> 3.7'
32
32
  spec.add_dependency 'to_regexp', '~> 0.2.1'
33
+ spec.metadata['rubygems_mfa_required'] = 'true'
33
34
  end
data/exe/entangler CHANGED
@@ -18,26 +18,36 @@ def value_opt(options, opts, key, *args)
18
18
  end
19
19
 
20
20
  options = {}
21
+ # rubocop:disable Metrics/BlockLength
21
22
  OptionParser.new do |opts|
22
- opts.banner = %(Entangler v#{Entangler::VERSION}
23
+ opts.banner = <<~BANNER
24
+ Entangler v#{Entangler::VERSION}
23
25
 
24
- Usage:
25
- entangler master <base_dir> <remote_user>@<remote_host>:<remote_base_dir> [options]
26
- entangler master <base_dir> <other_synced_base_dir> [options])
26
+ Usage:
27
+ entangler master <base_dir> <remote_user>@<remote_host>:<remote_base_dir> [options]
28
+ entangler master <base_dir> <other_synced_base_dir> [options]
29
+ BANNER
27
30
 
28
31
  opts.separator ''
29
32
  opts.separator 'Options:'
30
33
 
31
34
  opts.on('-i', "--ignore '.git'", "Ignore path when syncing, string is regex if surrounded by '/'",
32
- 'All paths should be relative to the base sync directory.') do |ignore|
35
+ 'All paths should be relative to the base sync directory') do |ignore|
33
36
  options[:ignore] ||= []
34
37
  options[:ignore] << ignore
35
38
  end
36
39
 
37
40
  value_opt(options, opts, :port, '-p', '--port PORT', 'Overwrite the SSH port (usually 22)',
38
41
  "(doesn't do anything in slave mode)")
42
+
43
+ bool_opt(options, opts, :force_polling, '--force-polling',
44
+ 'Forces the use of the listen polling adapter',
45
+ "(works cross-platform, generally slower, doesn't do anything in slave mode)")
46
+
39
47
  bool_opt(options, opts, :no_rvm, '--no-rvm', 'Skip attempting to load RVM on remote')
48
+
40
49
  bool_opt(options, opts, :verbose, '-v', '--verbose', 'Log Debug lines')
50
+
41
51
  bool_opt(options, opts, :quiet, '-q', '--quiet', "Don't log to stdout in master process")
42
52
 
43
53
  opts.on_tail('--version', 'Show version number') do
@@ -50,6 +60,7 @@ Usage:
50
60
  exit
51
61
  end
52
62
  end.parse!
63
+ # rubocop:enable Metrics/BlockLength
53
64
 
54
65
  mode = ARGV.shift
55
66
  unless mode && %w[master slave].include?(mode)
@@ -102,17 +113,18 @@ end
102
113
 
103
114
  if options[:ignore]
104
115
  opts[:ignore] = options[:ignore].map do |opt|
105
- opt = opt[1..-2] if opt.start_with?('"') && opt.end_with?('"') || opt.start_with?("'") && opt.end_with?("'")
116
+ opt = opt[1..-2] if (opt.start_with?('"') && opt.end_with?('"')) || (opt.start_with?("'") && opt.end_with?("'"))
106
117
 
107
118
  if ToRegexp::String.literal? opt
108
119
  source, *rest = opt.as_regexp(detect: true)
109
- ::Regexp.new "^#{source}(?:/[^/]+)*$", *rest
120
+ Regexp.new "^#{source}(?:/[^/]+)*$", *rest
110
121
  else
111
122
  opt.to_regexp(detect: true)
112
123
  end
113
124
  end
114
125
  end
115
126
 
127
+ opts[:force_polling] = options[:force_polling]
116
128
  opts[:no_rvm] = options[:no_rvm]
117
129
  opts[:quiet] = options[:quiet]
118
130
  opts[:verbose] = options[:verbose]
@@ -47,7 +47,7 @@ module Entangler
47
47
 
48
48
  def write_contents
49
49
  delete_file if file_exists? && File.directory?(full_path)
50
- File.open(full_path, 'w') { |f| f.write(contents) }
50
+ File.write(full_path, contents)
51
51
  File.utime(File.atime(full_path), desired_modtime, full_path)
52
52
  end
53
53
 
@@ -42,12 +42,12 @@ module Entangler
42
42
  private
43
43
 
44
44
  def listener
45
- @listener ||= begin
46
- Listen::Listener.new(base_dir, ignore!: @opts[:ignore]) do |modified, added, removed|
47
- process_local_changes(generate_entangled_files(added, :create) +
48
- generate_entangled_files(modified, :update) +
49
- generate_entangled_files(removed, :delete))
50
- end
45
+ @listener ||= Listen::Listener.new(base_dir,
46
+ ignore!: @opts[:ignore],
47
+ force_polling: @opts[:force_polling]) do |modified, added, removed|
48
+ process_local_changes(generate_entangled_files(added, :create) +
49
+ generate_entangled_files(modified, :update) +
50
+ generate_entangled_files(removed, :delete))
51
51
  end
52
52
  end
53
53
 
@@ -11,6 +11,9 @@ module Entangler
11
11
  include Entangler::Executor::Background::Base
12
12
  include Entangler::Executor::Validation::Base
13
13
 
14
+ GIT_IGNORE_REGEX = %r{^\.git(?:/[^/]+)*$}.freeze
15
+ ENTANGLER_IGNORE_REGEX = /^\.entangler.*/.freeze
16
+
14
17
  attr_reader :base_dir
15
18
 
16
19
  def initialize(base_dir, opts = {})
@@ -19,8 +22,9 @@ module Entangler
19
22
  @recently_received_paths = []
20
23
  @listener_pauses = [false, false]
21
24
  @opts = opts
22
- @opts[:ignore] = [%r{^\.git(?:/[^/]+)*$}] unless @opts.key?(:ignore)
23
- @opts[:ignore] << /^\.entangler.*/
25
+ @opts[:ignore] = [GIT_IGNORE_REGEX] unless @opts.key?(:ignore)
26
+ @opts[:ignore] << ENTANGLER_IGNORE_REGEX
27
+ @opts[:force_polling] ||= false
24
28
 
25
29
  validate_opts
26
30
  Entangler::Logger.create_log_dir(base_dir)
@@ -56,6 +60,8 @@ module Entangler
56
60
  @logger ||= Entangler::Logger.new(log_outputs, verbose: @opts[:verbose])
57
61
  end
58
62
 
63
+ private
64
+
59
65
  def log_outputs
60
66
  [Entangler::Logger.log_file_path(base_dir)]
61
67
  end
@@ -51,8 +51,8 @@ module Entangler
51
51
 
52
52
  res = `#{generate_ssh_command('entangler --version', source_rvm: true)}`
53
53
  if res.empty?
54
- msg = 'Entangler is not installed on the remote server.' \
55
- ' Install Entangler on the remote server (SSH in, then `gem install entangler`), then try again.'
54
+ msg = 'Entangler is not installed on the remote server. ' \
55
+ 'Install Entangler on the remote server (SSH in, then `gem install entangler`), then try again.'
56
56
  raise Entangler::NotInstalledOnRemoteError, msg
57
57
  end
58
58
 
@@ -60,8 +60,8 @@ module Entangler
60
60
  local_version = Gem::Version.new(Entangler::VERSION)
61
61
  return unless major_version_mismatch?(local_version, remote_version)
62
62
 
63
- msg = 'Entangler version too far apart, please update either local or remote Entangler.' \
64
- " Local version is #{local_version} and remote version is #{remote_version}."
63
+ msg = 'Entangler version too far apart, please update either local or remote Entangler. ' \
64
+ "Local version is #{local_version} and remote version is #{remote_version}."
65
65
  raise Entangler::VersionMismatchError, msg
66
66
  end
67
67
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Entangler
4
- VERSION = '1.3.3'
4
+ VERSION = '1.4.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entangler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Allie
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-08 00:00:00.000000000 Z
11
+ date: 2024-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -152,7 +152,8 @@ files:
152
152
  homepage: https://github.com/daveallie/entangler
153
153
  licenses:
154
154
  - MIT
155
- metadata: {}
155
+ metadata:
156
+ rubygems_mfa_required: 'true'
156
157
  post_install_message:
157
158
  rdoc_options: []
158
159
  require_paths: