entangler 1.3.3 → 1.4.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: 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: