vagrant-syncer 1.0.7 → 1.0.8
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 +4 -4
- data/example/Vagrantfile +7 -0
- data/example/dotfiles/.dircolors +79 -0
- data/lib/syncer/listeners/fsevents.rb +3 -3
- data/lib/syncer/listeners/inotify.rb +6 -3
- data/lib/syncer/listeners/listen.rb +7 -10
- data/lib/syncer/machine.rb +69 -11
- data/lib/syncer/syncers/rsync.rb +6 -6
- data/lib/syncer/version.rb +1 -1
- data/lib/vagrant-syncer.rb +0 -1
- metadata +3 -3
- data/lib/syncer/path.rb +0 -84
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddd963382d77f2cf8809225b08b3072d8af37fb5
|
4
|
+
data.tar.gz: 2fba2298a98e17e527b46d412dc13183bbfc3145
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bffe66c12c22d82c09da1e7be491846a039afbe3d993819134094e99a91dd95f612c06c3889ca2dcc399d2ced74130be2cba74ebc7bfc5103b7cfe1de88f5351
|
7
|
+
data.tar.gz: 01a43a58085be761482795941336236e8d8b2e9c784b74c7d3bc4cc6c4ab35371cbdf07031088aa5e6189175b16e49300391883fef805529e68be4aad014783c
|
data/example/Vagrantfile
CHANGED
@@ -12,6 +12,13 @@ Vagrant.configure(2) do |config|
|
|
12
12
|
|
13
13
|
config.vm.synced_folder '.', '/vagrant', disabled: true
|
14
14
|
|
15
|
+
config.vm.synced_folder "dotfiles", "/home/vagrant", type: 'rsync',
|
16
|
+
rsync__args: [
|
17
|
+
"--archive",
|
18
|
+
"--out-format=%L%n"
|
19
|
+
],
|
20
|
+
rsync__verbose: true
|
21
|
+
|
15
22
|
config.vm.synced_folder "files", "/home/vagrant/files", type: 'rsync',
|
16
23
|
rsync__args: [
|
17
24
|
"--archive",
|
@@ -0,0 +1,79 @@
|
|
1
|
+
COLOR tty
|
2
|
+
|
3
|
+
TERM ansi
|
4
|
+
TERM color_xterm
|
5
|
+
TERM color-xterm
|
6
|
+
TERM con132x25
|
7
|
+
TERM con132x30
|
8
|
+
TERM con132x43
|
9
|
+
TERM con132x60
|
10
|
+
TERM con80x25
|
11
|
+
TERM con80x28
|
12
|
+
TERM con80x30
|
13
|
+
TERM con80x43
|
14
|
+
TERM con80x50
|
15
|
+
TERM con80x60
|
16
|
+
TERM cons25
|
17
|
+
TERM console
|
18
|
+
TERM cygwin
|
19
|
+
TERM dtterm
|
20
|
+
TERM dvtm
|
21
|
+
TERM dvtm-256color
|
22
|
+
TERM Eterm
|
23
|
+
TERM eterm-color
|
24
|
+
TERM fbterm
|
25
|
+
TERM gnome
|
26
|
+
TERM gnome-256color
|
27
|
+
TERM jfbterm
|
28
|
+
TERM konsole
|
29
|
+
TERM konsole-256color
|
30
|
+
TERM kterm
|
31
|
+
TERM linux
|
32
|
+
TERM linux-c
|
33
|
+
TERM mach-color
|
34
|
+
TERM mlterm
|
35
|
+
TERM nxterm
|
36
|
+
TERM putty
|
37
|
+
TERM putty-256color
|
38
|
+
TERM rxvt
|
39
|
+
TERM rxvt-256color
|
40
|
+
TERM rxvt-cygwin
|
41
|
+
TERM rxvt-cygwin-native
|
42
|
+
TERM rxvt-unicode
|
43
|
+
TERM rxvt-unicode256
|
44
|
+
TERM rxvt-unicode-256color
|
45
|
+
TERM screen
|
46
|
+
TERM screen-16color
|
47
|
+
TERM screen-16color-bce
|
48
|
+
TERM screen-16color-s
|
49
|
+
TERM screen-16color-bce-s
|
50
|
+
TERM screen-256color
|
51
|
+
TERM screen-256color-bce
|
52
|
+
TERM screen-256color-s
|
53
|
+
TERM screen-256color-bce-s
|
54
|
+
TERM screen-bce
|
55
|
+
TERM screen-w
|
56
|
+
TERM screen.linux
|
57
|
+
TERM screen.xterm-new
|
58
|
+
TERM st
|
59
|
+
TERM st-meta
|
60
|
+
TERM st-256color
|
61
|
+
TERM st-meta-256color
|
62
|
+
TERM vt100
|
63
|
+
TERM xterm
|
64
|
+
TERM xterm-new
|
65
|
+
TERM xterm-16color
|
66
|
+
TERM xterm-256color
|
67
|
+
TERM xterm-88color
|
68
|
+
TERM xterm-color
|
69
|
+
TERM xterm-debian
|
70
|
+
TERM xterm-termite
|
71
|
+
|
72
|
+
EIGHTBIT 1
|
73
|
+
|
74
|
+
# Directories
|
75
|
+
DIR 01;36 # bolded;cyan
|
76
|
+
|
77
|
+
# Plain text files
|
78
|
+
.txt 32 # green
|
79
|
+
.not 31 # red
|
@@ -5,8 +5,8 @@ module Vagrant
|
|
5
5
|
module Listeners
|
6
6
|
class FSEvents
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
8
|
+
def initialize(paths, excludes, settings, callback)
|
9
|
+
@paths = paths
|
10
10
|
@settings = settings.merge!(no_defer: false)
|
11
11
|
@callback = callback
|
12
12
|
# rb-fsevent does not support excludes.
|
@@ -15,7 +15,7 @@ module Vagrant
|
|
15
15
|
def run
|
16
16
|
changes = Queue.new
|
17
17
|
fsevent = FSEvent.new
|
18
|
-
fsevent.watch @
|
18
|
+
fsevent.watch @paths, @settings do |paths|
|
19
19
|
paths.each { |path| changes << path }
|
20
20
|
end
|
21
21
|
Thread.new { fsevent.run }
|
@@ -5,8 +5,8 @@ module Vagrant
|
|
5
5
|
module Listeners
|
6
6
|
class INotify
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
8
|
+
def initialize(paths, excludes, settings, callback)
|
9
|
+
@paths = paths
|
10
10
|
@settings = settings
|
11
11
|
@callback = callback
|
12
12
|
# rb-inotify does not support excludes.
|
@@ -14,7 +14,10 @@ module Vagrant
|
|
14
14
|
|
15
15
|
def run
|
16
16
|
notifier = ::INotify::Notifier.new
|
17
|
-
|
17
|
+
|
18
|
+
@paths.each do |path|
|
19
|
+
notifier.watch(path, :modify, :create, :delete, :recursive) {}
|
20
|
+
end
|
18
21
|
|
19
22
|
loop do
|
20
23
|
directories = Set.new
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'listen'
|
2
|
-
require 'vagrant/util/busy'
|
3
2
|
|
4
3
|
module Vagrant
|
5
4
|
module Syncer
|
@@ -22,12 +21,14 @@ module Vagrant
|
|
22
21
|
Regexp.new(pattern)
|
23
22
|
end
|
24
23
|
|
25
|
-
def initialize(
|
26
|
-
@
|
24
|
+
def initialize(paths, excludes, settings, callback)
|
25
|
+
@paths = paths
|
27
26
|
@settings = settings
|
28
|
-
@callback =
|
27
|
+
@callback = Proc.new do |mod, add, rem|
|
28
|
+
callback.call(mod + add + rem)
|
29
|
+
end
|
29
30
|
|
30
|
-
if excludes
|
31
|
+
if excludes.any?
|
31
32
|
@settings[:ignore!] = []
|
32
33
|
excludes.each do |pattern|
|
33
34
|
@settings[:ignore!] << self.class.excludes_to_listen(pattern.to_s)
|
@@ -36,11 +37,7 @@ module Vagrant
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def run
|
39
|
-
|
40
|
-
@callback.call(mod + add + rem)
|
41
|
-
end
|
42
|
-
|
43
|
-
listener.start
|
40
|
+
::Listen.to(*@paths, @settings, &@callback).start
|
44
41
|
sleep
|
45
42
|
end
|
46
43
|
end
|
data/lib/syncer/machine.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'vagrant/action/builtin/mixin_synced_folders'
|
2
2
|
|
3
|
+
require_relative 'syncers/rsync'
|
4
|
+
|
3
5
|
module Vagrant
|
4
6
|
module Syncer
|
5
7
|
class Machine
|
@@ -8,28 +10,84 @@ module Vagrant
|
|
8
10
|
|
9
11
|
def initialize(machine, polling=false)
|
10
12
|
@paths = []
|
13
|
+
@syncers = []
|
14
|
+
@excludes = []
|
15
|
+
@logger = machine.ui
|
16
|
+
|
17
|
+
@listener_verbose = machine.config.syncer.show_events
|
18
|
+
@listener_interval = machine.config.syncer.interval
|
19
|
+
|
20
|
+
listener_settings = {
|
21
|
+
latency: @listener_interval,
|
22
|
+
wait_for_delay: @listener_interval / 2
|
23
|
+
}
|
11
24
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
25
|
+
if polling
|
26
|
+
require_relative 'listeners/listen'
|
27
|
+
@listener_class = Vagrant::Syncer::Listeners::Listen
|
28
|
+
listener_settings[:force_polling] = polling
|
29
|
+
elsif machine.config.syncer.force_listen_gem
|
30
|
+
require_relative 'listeners/listen'
|
31
|
+
@listener_class = Vagrant::Syncer::Listeners::Listen
|
32
|
+
else
|
33
|
+
case Vagrant::Util::Platform.platform
|
34
|
+
when /darwin/
|
35
|
+
require_relative 'listeners/fsevents'
|
36
|
+
@listener_class = Vagrant::Syncer::Listeners::FSEvents
|
37
|
+
when /linux/
|
38
|
+
require_relative 'listeners/inotify'
|
39
|
+
@listener_class = Vagrant::Syncer::Listeners::INotify
|
40
|
+
else
|
41
|
+
require_relative 'listeners/listen'
|
42
|
+
@listener_class = Vagrant::Syncer::Listeners::Listen
|
43
|
+
end
|
17
44
|
end
|
18
45
|
|
19
|
-
|
20
|
-
return unless folders
|
46
|
+
@listener_name = @listener_class.to_s.gsub(/^.*::/, '')
|
21
47
|
|
22
|
-
|
23
|
-
@paths <<
|
48
|
+
synced_folders(machine)[:rsync].each do |id, folder_opts|
|
49
|
+
@paths << File.expand_path(folder_opts[:hostpath], machine.env.root_path)
|
50
|
+
@excludes << folder_opts[:rsync__excludes] if folder_opts[:rsync__excludes]
|
51
|
+
@syncers << Syncers::Rsync.new(folder_opts, machine)
|
24
52
|
end
|
53
|
+
|
54
|
+
@listener = @listener_class.new(
|
55
|
+
@paths,
|
56
|
+
@excludes,
|
57
|
+
listener_settings,
|
58
|
+
change_callback
|
59
|
+
)
|
25
60
|
end
|
26
61
|
|
27
62
|
def full_sync
|
28
|
-
@
|
63
|
+
@syncers.each do |syncer|
|
64
|
+
syncer.sync([syncer.host_path])
|
65
|
+
end
|
29
66
|
end
|
30
67
|
|
31
68
|
def listen
|
32
|
-
@
|
69
|
+
text = @listener_polling ? 'syncer.states.polling' : 'syncer.states.watching'
|
70
|
+
@paths.each do |path|
|
71
|
+
@logger.info(I18n.t(text, {
|
72
|
+
path: path,
|
73
|
+
listener: @listener_name,
|
74
|
+
interval: @listener_interval
|
75
|
+
}))
|
76
|
+
end
|
77
|
+
@listener.run
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def change_callback
|
83
|
+
Proc.new do |changed|
|
84
|
+
if @listener_verbose
|
85
|
+
@logger.info(@listener_name + ": " + changed.join(', '))
|
86
|
+
end
|
87
|
+
@syncers.each do |syncer|
|
88
|
+
syncer.sync(changed)
|
89
|
+
end
|
90
|
+
end
|
33
91
|
end
|
34
92
|
|
35
93
|
end
|
data/lib/syncer/syncers/rsync.rb
CHANGED
@@ -6,15 +6,17 @@ module Vagrant
|
|
6
6
|
module Syncers
|
7
7
|
class Rsync
|
8
8
|
|
9
|
+
attr_reader :host_path
|
10
|
+
|
9
11
|
def initialize(path_opts, machine)
|
10
12
|
@machine = machine
|
11
13
|
@logger = machine.ui
|
12
14
|
|
13
15
|
@machine_path = machine.env.root_path.to_s
|
14
16
|
@host_path = parse_host_path(path_opts[:hostpath])
|
17
|
+
@rsync_verbose = path_opts[:rsync__verbose] || false
|
15
18
|
@rsync_args = parse_rsync_args(path_opts[:rsync__args],
|
16
19
|
path_opts[:rsync__rsync_path])
|
17
|
-
@rsync_verbose = path_opts[:rsync__verbose] || false
|
18
20
|
@ssh_command = parse_ssh_command(machine.config.syncer.ssh_args)
|
19
21
|
@exclude_args = parse_exclude_args(path_opts[:rsync__exclude])
|
20
22
|
|
@@ -119,12 +121,10 @@ module Vagrant
|
|
119
121
|
end
|
120
122
|
|
121
123
|
def parse_rsync_args(rsync_args=nil, rsync_path=nil)
|
122
|
-
rsync_args ||= ["--archive", "--delete", "--compress", "--copy-links"
|
123
|
-
"--verbose"]
|
124
|
+
rsync_args ||= ["--archive", "--delete", "--compress", "--copy-links"]
|
124
125
|
|
125
|
-
#
|
126
|
-
|
127
|
-
rsync_args.unshift("--out-format=%L%n")
|
126
|
+
# This implies --verbose, set nicer output by default
|
127
|
+
rsync_args.unshift("--out-format=%L/%f") if @rsync_verbose
|
128
128
|
|
129
129
|
rsync_chmod_args_given = rsync_args.any? { |arg|
|
130
130
|
arg.start_with?("--chmod=")
|
data/lib/syncer/version.rb
CHANGED
data/lib/vagrant-syncer.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-syncer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anssi Syrjäsalo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- bin/setup
|
58
58
|
- build_and_install.sh
|
59
59
|
- example/Vagrantfile
|
60
|
+
- example/dotfiles/.dircolors
|
60
61
|
- example/files/directory/excluded_directory/yes.txt
|
61
62
|
- example/files/directory/file_in_directory.txt
|
62
63
|
- example/files/directory/nested_directory/excluded_directory/yes.txt
|
@@ -80,7 +81,6 @@ files:
|
|
80
81
|
- lib/syncer/listeners/inotify.rb
|
81
82
|
- lib/syncer/listeners/listen.rb
|
82
83
|
- lib/syncer/machine.rb
|
83
|
-
- lib/syncer/path.rb
|
84
84
|
- lib/syncer/plugin.rb
|
85
85
|
- lib/syncer/synced_folder.rb
|
86
86
|
- lib/syncer/syncers/rsync.rb
|
data/lib/syncer/path.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'vagrant/util/platform'
|
2
|
-
|
3
|
-
require_relative 'syncers/rsync'
|
4
|
-
|
5
|
-
module Vagrant
|
6
|
-
module Syncer
|
7
|
-
class Path
|
8
|
-
|
9
|
-
def initialize(path_opts, machine, listener_polling=false)
|
10
|
-
@logger = machine.ui
|
11
|
-
@source_path = path_opts[:hostpath]
|
12
|
-
@syncer = Syncers::Rsync.new(path_opts, machine)
|
13
|
-
@absolute_path = File.expand_path(@source_path, machine.env.root_path)
|
14
|
-
|
15
|
-
@listener_polling = listener_polling
|
16
|
-
@listener_verbose = machine.config.syncer.show_events
|
17
|
-
@listener_interval = machine.config.syncer.interval
|
18
|
-
@force_listen_gem = machine.config.syncer.force_listen_gem
|
19
|
-
|
20
|
-
listener_settings = {
|
21
|
-
latency: @listener_interval,
|
22
|
-
wait_for_delay: @listener_interval / 2
|
23
|
-
}
|
24
|
-
|
25
|
-
if @listener_polling
|
26
|
-
require_relative 'listeners/listen'
|
27
|
-
@listener_class = Vagrant::Syncer::Listeners::Listen
|
28
|
-
listener_settings[:force_polling] = @listener_polling
|
29
|
-
elsif @force_listen_gem
|
30
|
-
require_relative 'listeners/listen'
|
31
|
-
@listener_class = Vagrant::Syncer::Listeners::Listen
|
32
|
-
else
|
33
|
-
case Vagrant::Util::Platform.platform
|
34
|
-
when /darwin/
|
35
|
-
require_relative 'listeners/fsevents'
|
36
|
-
@listener_class = Vagrant::Syncer::Listeners::FSEvents
|
37
|
-
when /linux/
|
38
|
-
require_relative 'listeners/inotify'
|
39
|
-
@listener_class = Vagrant::Syncer::Listeners::INotify
|
40
|
-
else
|
41
|
-
require_relative 'listeners/listen'
|
42
|
-
@listener_class = Vagrant::Syncer::Listeners::Listen
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
@listener_name = @listener_class.to_s.gsub(/^.*::/, '')
|
47
|
-
|
48
|
-
@listener = @listener_class.new(
|
49
|
-
@absolute_path,
|
50
|
-
path_opts[:rsync__excludes],
|
51
|
-
listener_settings,
|
52
|
-
change_callback
|
53
|
-
)
|
54
|
-
end
|
55
|
-
|
56
|
-
def initial_sync
|
57
|
-
@logger.info(I18n.t('syncer.states.initial', path: @absolute_path))
|
58
|
-
@syncer.sync([@source_path])
|
59
|
-
end
|
60
|
-
|
61
|
-
def listen
|
62
|
-
text = @listener_polling ? 'syncer.states.polling' : 'syncer.states.watching'
|
63
|
-
@logger.info(I18n.t(text, {
|
64
|
-
path: @absolute_path,
|
65
|
-
listener: @listener_name,
|
66
|
-
interval: @listener_interval
|
67
|
-
}))
|
68
|
-
@listener.run
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
|
73
|
-
def change_callback
|
74
|
-
Proc.new do |changed|
|
75
|
-
if @listener_verbose
|
76
|
-
@logger.info(@listener_name + ": " + changed.join(', '))
|
77
|
-
end
|
78
|
-
@syncer.sync(changed)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|