entangler 0.3.1 → 0.4.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
  SHA1:
3
- metadata.gz: 52a5a4bfb661a1b81041b316ccc19cf643e899fa
4
- data.tar.gz: afd689dbbc2f8b14c3451382e759cbca4e0c9026
3
+ metadata.gz: bc0ae798eba13d9d1191ca253ed99d3545ec5c1a
4
+ data.tar.gz: 3846da80d6a40aa7bb4ade1a4840e99bfc50e5d9
5
5
  SHA512:
6
- metadata.gz: 3f5e4f5949dbfcc45512231b6fcbcc27c6ae3ee9f2cbe3599e4d46f9b785231c0ae2e48f367ff3b2cae15202a0237144acbab568cf8a3fac70b3ac365daf9630
7
- data.tar.gz: 94decc01d9838012e01c432cc507518b60a58be1c3b8d0417bc16aaa641bba518c6b1f1b59e90210fae5e43daac996a01d02ff8a6dcd638a714d7a23674cb240
6
+ metadata.gz: fbe7d30b14fd8778cb57a5051d19be6f5951aae93e227ffa66884337582af01064f18c434dac879b7a75c1a9ebb059df19c7ce089b037477a9fee036084a5f58
7
+ data.tar.gz: d4d93f058abd4dedf6ffc908bc2d56a3932b03de51a466d623cc2a8c7d1a4a964d13de619a240ed6fdb57cadaf544ecaa9bef1f129ed860b0149f5c38931daf3
data/README.md CHANGED
@@ -19,11 +19,11 @@ entangler master /some/base/path user@remote:/some/remote/path
19
19
 
20
20
  ```
21
21
  entangler -h
22
- Entangler v0.3.0
22
+ Entangler v0.4.0
23
23
 
24
24
  Usage:
25
25
  entangler master <base_dir> <remote_user>@<remote_host>:<remote_base_dir> [options]
26
- entangler slave <base_dir> [options]
26
+ entangler master <base_dir> <other_synced_base_dir> [options]
27
27
 
28
28
  Options:
29
29
  -i, --ignore '/.git' Ignore folder when syncing, string is regex if surrounded by '/'
data/exe/entangler CHANGED
@@ -9,7 +9,7 @@ OptionParser.new do |opts|
9
9
 
10
10
  Usage:
11
11
  entangler master <base_dir> <remote_user>@<remote_host>:<remote_base_dir> [options]
12
- entangler slave <base_dir> [options])
12
+ entangler master <base_dir> <other_synced_base_dir> [options])
13
13
 
14
14
  opts.separator ""
15
15
  opts.separator "Options:"
@@ -51,23 +51,31 @@ if mode == 'master'
51
51
  remote_information = ARGV.shift
52
52
 
53
53
  unless remote_information
54
- raise 'Missing remote information'
54
+ raise 'Missing destination information'
55
55
  exit 1
56
56
  end
57
57
 
58
- user, rest = remote_information.split('@', 2)
59
- host, path = (rest || '').split(':', 2)
58
+ user = host = path = error = nil
59
+ remote_mode = false
60
+ if remote_information.match(/[^@]+@[^:]+:.+/)
61
+ remote_mode = true
62
+ user, rest = remote_information.split('@', 2)
63
+ host, path = (rest || '').split(':', 2)
64
+
65
+ error = 'Missing remote user' unless user
66
+ error = 'Missing remote host' unless host
67
+ error = 'Missing remote path' unless path
68
+ else
69
+ path = remote_information
70
+ end
60
71
 
61
- error = nil
62
- error = 'Missing remote user' unless user
63
- error = 'Missing remote host' unless host
64
- error = 'Missing remote path' unless path
65
72
  unless error.nil?
66
73
  puts error
67
74
  exit 1
68
75
  end
69
76
 
70
- opts = {remote_base_dir: path, remote_user: user, remote_host: host}
77
+ opts = {remote_base_dir: path, remote_mode: remote_mode}
78
+ opts.merge!(remote_user: user, remote_host: host) if remote_mode
71
79
  opts[:remote_port] = options[:port] if options[:port]
72
80
  else
73
81
  opts = {mode: 'slave'}
@@ -6,7 +6,10 @@ module Entangler
6
6
  def start_remote_slave
7
7
  require 'open3'
8
8
  ignore_opts = @opts[:ignore].map{|regexp| "-i '#{regexp.inspect}'"}.join(' ')
9
- @remote_writer, @remote_reader, remote_err, @remote_thread = Open3.popen3("ssh -q #{@opts[:remote_user]}@#{@opts[:remote_host]} -p #{@opts[:remote_port]} -C \"source ~/.rvm/environments/default && entangler slave #{@opts[:remote_base_dir]} #{ignore_opts}\"")
9
+ entangler_cmd = "entangler slave #{@opts[:remote_base_dir]} #{ignore_opts}"
10
+ full_cmd = @opts[:remote_mode] ? "ssh -q #{@opts[:remote_user]}@#{@opts[:remote_host]} -p #{@opts[:remote_port]} -C \"source ~/.rvm/environments/default && #{entangler_cmd}\"" : entangler_cmd
11
+
12
+ @remote_writer, @remote_reader, remote_err, @remote_thread = Open3.popen3(full_cmd)
10
13
  remote_err.close
11
14
  end
12
15
 
@@ -17,13 +17,19 @@ module Entangler
17
17
  private
18
18
  def validate_opts
19
19
  super
20
- raise 'Missing remote base dir' unless @opts.keys.include?(:remote_base_dir)
21
- raise 'Missing remote user' unless @opts.keys.include?(:remote_user)
22
- raise 'Missing remote host' unless @opts.keys.include?(:remote_host)
23
- @opts[:remote_port] ||= '22'
24
- res = `ssh -q #{@opts[:remote_user]}@#{@opts[:remote_host]} -p #{@opts[:remote_port]} -C "[[ -d '#{@opts[:remote_base_dir]}' ]] && echo 'ok' || echo 'missing'"`
25
- raise 'Cannot connect to remote' if res.empty?
26
- raise 'Remote base dir invalid' unless res.strip == 'ok'
20
+ if @opts[:remote_mode]
21
+ raise 'Missing remote base dir' unless @opts.keys.include?(:remote_base_dir)
22
+ raise 'Missing remote user' unless @opts.keys.include?(:remote_user)
23
+ raise 'Missing remote host' unless @opts.keys.include?(:remote_host)
24
+ @opts[:remote_port] ||= '22'
25
+ res = `ssh -q #{@opts[:remote_user]}@#{@opts[:remote_host]} -p #{@opts[:remote_port]} -C "[[ -d '#{@opts[:remote_base_dir]}' ]] && echo 'ok' || echo 'missing'"`
26
+ raise 'Cannot connect to remote' if res.empty?
27
+ raise 'Remote base dir invalid' unless res.strip == 'ok'
28
+ else
29
+ @opts[:remote_base_dir] = File.realpath(File.expand_path(@opts[:remote_base_dir]))
30
+ raise "Destination directory can't be the same as the base directory" if @opts[:remote_base_dir] == self.base_dir
31
+ raise "Destination directory doesn't exist" unless Dir.exists?(@opts[:remote_base_dir])
32
+ end
27
33
  end
28
34
 
29
35
  def perform_initial_rsync
@@ -32,7 +38,11 @@ module Entangler
32
38
  all_ignore_matches = all_folders.map{|path| @opts[:ignore].map{|regexp| regexp.match("/#{path[0..-2]}")}.compact.first}.compact
33
39
  exclude_folders = all_ignore_matches.map{|match| match[0]}.uniq.map{|path| path[1..-1]}
34
40
  exclude_args = exclude_folders.map{|path| "--exclude #{path}"}.join(' ')
35
- rsync_cmd = "rsync -azv #{exclude_args} -e \"ssh -p #{@opts[:remote_port]}\" --delete #{base_dir}/ #{@opts[:remote_user]}@#{@opts[:remote_host]}:#{@opts[:remote_base_dir]}/"
41
+
42
+ ssh_settings = @opts[:remote_mode] ? "-e \"ssh -p #{@opts[:remote_port]}\"" : ''
43
+ remote_path = @opts[:remote_mode] ? "#{@opts[:remote_user]}@#{@opts[:remote_host]}:#{@opts[:remote_base_dir]}/" : "#{@opts[:remote_base_dir]}/"
44
+
45
+ rsync_cmd = "rsync -azv #{exclude_args} #{ssh_settings} --delete #{base_dir}/ #{remote_path}"
36
46
 
37
47
  IO.popen(rsync_cmd).each do |line|
38
48
  logger.debug line.chomp
@@ -1,3 +1,3 @@
1
1
  module Entangler
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/entangler.rb CHANGED
@@ -6,7 +6,7 @@ module Entangler
6
6
  attr_accessor :executor
7
7
 
8
8
  def run(base_dir, opts = {})
9
- opts = {mode: 'master'}.merge(opts)
9
+ opts = {mode: 'master', remote_mode: true}.merge(opts)
10
10
 
11
11
  require 'entangler/executor/base'
12
12
  if opts[:mode] == 'master'
@@ -0,0 +1,3 @@
1
+ The code in the following subdirectories comes from https://github.com/DmitryKoterov/dklab_realsync, unmodified.
2
+
3
+ It is being redistrubuted under GPL, which it was originally provided under. For more information on GPL, please see https://www.gnu.org/licenses/gpl-3.0.en.html.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entangler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Allie
@@ -109,6 +109,7 @@ files:
109
109
  - lib/entangler/executor/processing/base.rb
110
110
  - lib/entangler/executor/slave.rb
111
111
  - lib/entangler/version.rb
112
+ - lib/notifier/README.md
112
113
  - lib/notifier/bin/darwin/notify
113
114
  - lib/notifier/bin/linux/notify
114
115
  - lib/notifier/src/darwin/BUILD