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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b63ad4d5959b021a757e370b28dc00afbaf17fdb
4
- data.tar.gz: 28100efa5de0c18e4bfb87f3877afaf8b233bf29
3
+ metadata.gz: ddd963382d77f2cf8809225b08b3072d8af37fb5
4
+ data.tar.gz: 2fba2298a98e17e527b46d412dc13183bbfc3145
5
5
  SHA512:
6
- metadata.gz: 9ecc08db460cfd9f6925024ec4e707e98eeb4b0ac52e196adaf4c990bc2a21cbab638144b85be24e2cf2a3571554bacdaa31693a13e4b210543e95d10a896558
7
- data.tar.gz: e714a252e4669fd01c7439043513ea5219e7c636f408805752cdeddd28859bfbfd708c7cad5a525d008907135964262d5114267424db8b0cf4c3aaf4afe70dec
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(absolute_path, excludes, settings, callback)
9
- @absolute_path = absolute_path
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 @absolute_path, @settings do |paths|
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(absolute_path, excludes, settings, callback)
9
- @absolute_path = absolute_path
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
- notifier.watch(@absolute_path, :modify, :create, :delete, :recursive) {}
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(absolute_path, excludes, settings, callback)
26
- @absolute_path = absolute_path
24
+ def initialize(paths, excludes, settings, callback)
25
+ @paths = paths
27
26
  @settings = settings
28
- @callback = 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
- listener = ::Listen.to(@absolute_path, @settings) do |mod, add, rem|
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
@@ -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
- cached = synced_folders(machine, cached: true)
13
- fresh = synced_folders(machine)
14
- diff = synced_folders_diff(cached, fresh)
15
- if !diff[:added].empty?
16
- machine.ui.warn(I18n.t("vagrant.rsync_auto_new_folders"))
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
- folders = cached[:rsync]
20
- return unless folders
46
+ @listener_name = @listener_class.to_s.gsub(/^.*::/, '')
21
47
 
22
- folders.each do |id, folder_opts|
23
- @paths << Path.new(folder_opts, machine, polling)
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
- @paths.each(&:initial_sync)
63
+ @syncers.each do |syncer|
64
+ syncer.sync([syncer.host_path])
65
+ end
29
66
  end
30
67
 
31
68
  def listen
32
- @paths.each(&:listen)
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
@@ -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
- # The default rsync output, later user opt --out-format arguments
126
- # take presence.
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=")
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module Syncer
3
- VERSION = "1.0.7"
3
+ VERSION = "1.0.8"
4
4
  end
5
5
  end
@@ -6,7 +6,6 @@ end
6
6
 
7
7
  require 'syncer/actions'
8
8
  require 'syncer/machine'
9
- require 'syncer/path'
10
9
  require 'syncer/plugin'
11
10
  require 'syncer/version'
12
11
 
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.7
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 00:00:00.000000000 Z
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