vagrant-fsnotify 0.0.6 → 0.3.2

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
- SHA1:
3
- metadata.gz: 980ee6f0ef0bbb9c668dc07cc8dea559455e3f0d
4
- data.tar.gz: 71277c09a929d9ff27e5483d7c1e3b6fbc65130b
2
+ SHA256:
3
+ metadata.gz: 67c49ed58e768b8d862c56a16758935e722abd51c92f44bcba26affe5a4c8c02
4
+ data.tar.gz: 1f17acfa20d968e6b9ac1aea5aeedf2a4465859966edc54b1254e6a59d23a378
5
5
  SHA512:
6
- metadata.gz: 00057f278fd64d3d60244ebb6317c46d31487fc8d725b4b7afafa2001fa1408f9a82b4997799248daf7b9f4a63ba196336ea3d2b728c78a6e6064edd97d7bd9e
7
- data.tar.gz: d4400d6134353f3b2a1b0a232a875c214342e3f6728d9ed7787d6756df381994356af7077a744f2532157ab40c1156e0f253b6b442972dcafe389a5a222161e3
6
+ metadata.gz: 8390dfed9fd75c925da986d2ef422eae14b410f55f720fab93a132231d54453452459b3c124cae077e165a541ec518db4c79b913b814011cef7e4f234de2d513
7
+ data.tar.gz: 2ca844f611778d2b139f6c792ae2c82f13dd91a5ec07f07d12532e93572c229756519eca82befead5a6b5c70ddb0f51ca0d1389d5b721f827bc052be9802de2f
data/AUTHORS ADDED
@@ -0,0 +1,7 @@
1
+ # This file lists all individuals having contributed content to the repository.
2
+
3
+ Adrien Kohlbecker <adrien.kohlbecker@gmail.com>
4
+ Don Morrison <github@elskwid.net>
5
+ Leandro Facchinetti <me@leafac.com>
6
+ Levon Hakobyan <levon.hakobyan@microbiz.com>
7
+ stice2k <>
data/CHANGELOG.md ADDED
@@ -0,0 +1,50 @@
1
+ 0.3.2 - 2021-07-12
2
+ ==================
3
+ - Add parameter to allow selection of touch flags
4
+
5
+ 0.3.1 - 2019-04-11
6
+ ==================
7
+ - Update mtime as well as atime to trigger file events on the guest (#28)
8
+
9
+ 0.3.0 - 2016-04-13
10
+ ==================
11
+ - Fix for "No such file or directory" on Windows host (#11)
12
+
13
+ 0.2.0 - 2015-07-14
14
+ ==================
15
+ - *Breaking change:* Minimum required Vagrant version changed to 1.7.3+
16
+ - Fixed a dependency issue with celluloid (#10, @leafac)
17
+
18
+ 0.1.1 - 2015-07-05 (yanked)
19
+ ===========================
20
+ Note: This release was yanked due to a dependency issue, see #9
21
+ - Added command synopsis (#7, @leafac)
22
+ - Fix issue with vagrant runtime dependency on celluloid (#8, @leafac)
23
+
24
+ 0.1.0 - 2015-07-05 (yanked)
25
+ ===========================
26
+ Note: This release was yanked due to a dependency issue, see #9
27
+ - *Breaking change:* Added support for forwading file addition/removal (#6, @leafac)
28
+ - Depend on `vagrant` rather than `listen` for better compatibility with upstream (#5, @leafac)
29
+ - Added documentation (#3 & #4, @leafac)
30
+
31
+ 0.0.6 - 2015-04-16
32
+ ==================
33
+ - Fix multimachine use, allow specifying which machine to target (@elskwid)
34
+
35
+ 0.0.5 - 2015-04-11
36
+ ==================
37
+ - Fix `listen` dependency
38
+
39
+ 0.0.4 - 2014-08-18
40
+ ==================
41
+ - Uses access time modification, rather than modified time
42
+
43
+ 0.0.3 - 2014-08-15
44
+ ==================
45
+ - Allow guest path overriding
46
+
47
+
48
+ 0.0.2 - 2014-08-15
49
+ ==================
50
+ - Increase the delay between changes to 2 seconds
data/Gemfile CHANGED
@@ -1,9 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  group :development do
4
- gem "vagrant", git: "https://github.com/mitchellh/vagrant.git", ref: 'v1.6.3'
4
+ gem "vagrant", git: "https://github.com/hashicorp/vagrant.git", ref: 'v2.2.18'
5
5
  end
6
6
 
7
7
  group :plugins do
8
- gemspec
8
+ gem "vagrant-fsnotify", path: "."
9
9
  end
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015 Adrien Kohlbecker
3
+ Copyright (c) 2015-2019 Adrien Kohlbecker
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,4 +1,214 @@
1
1
  vagrant-fsnotify
2
2
  ================
3
3
 
4
- Forward filesystem change notifications to your Vagrant VM
4
+ Forward filesystem change notifications to your [Vagrant][vagrant] VM.
5
+
6
+ Problem
7
+ -------
8
+
9
+ Some filesystems (e.g. ext4, HFS+) have a feature of event notification.
10
+ Interested applications can subscribe and are notified when filesystem events
11
+ happen (e.g. a file was created, modified or deleted).
12
+
13
+ Applications can make use of this system to provide features such as auto-reload
14
+ or live updates. For example, [Jekyll][jekyll] regenerates the static website
15
+ and [Guard][guard] triggers a test run or a build when source files are
16
+ modified.
17
+
18
+ Unfortunately, [Vagrant][vagrant] users have a hard time making use of these
19
+ features when the application is running inside a virtual machine. When the file
20
+ is modified on the host, the event is not propagated to the guest and the
21
+ auto-reload never happens.
22
+
23
+ There are several bug reports related to this issue:
24
+
25
+ - <https://www.virtualbox.org/ticket/10660>
26
+ - <https://github.com/guard/listen/issues/53>
27
+ - <https://github.com/guard/listen/issues/57>
28
+ - <https://github.com/guard/guard/issues/269>
29
+ - <https://github.com/mitchellh/vagrant/issues/707>
30
+
31
+ There are two generally accepted solutions. The first is fall back to long
32
+ polling, the other is to
33
+ [forward the events over TCP][forwarding-file-events-over-tcp]. The problem with
34
+ long polling is that it's painfully slow, especially in shared folders. The
35
+ problem with forwarding events is that it's not a general approach that works
36
+ for any application.
37
+
38
+ Solution
39
+ --------
40
+
41
+ `vagrant-fsnotify` proposes a different solution: run a process listening for
42
+ filesystem events on the host and, when a notification is received, access the
43
+ virtual machine guest and `touch` the file in there (or `touch` followed by a
44
+ `rm` in case of file removals), causing an event to be propagated on the guest
45
+ filesystem.
46
+
47
+ This leverages the speed of using real filesystem events while still being
48
+ general enough to don't require any support from applications.
49
+
50
+ Caveats
51
+ -------
52
+
53
+ Due to the nature of filesystem events and the fact that `vagrant-fsnotify` uses
54
+ `touch`, the events are triggerred back on the host a second time. To avoid
55
+ infinite loops, we add an arbitrary debounce of 2 seconds between `touch`-ing
56
+ the same file. Thus, if a file is modified on the host more than once in 2
57
+ seconds the VM will only see one notification. If the second trigger on the
58
+ host or this arbitrary debounce is unacceptable for your application,
59
+ `vagrant-fsnotify` might not be for you.
60
+
61
+ Installation
62
+ ------------
63
+
64
+ `vagrant-fsnotify` is a [Vagrant][vagrant] plugin and can be installed by
65
+ running:
66
+
67
+ ```console
68
+ $ vagrant plugin install vagrant-fsnotify
69
+ ```
70
+
71
+ [Vagrant][vagrant] version 1.7.3 or greater is required.
72
+
73
+ Usage
74
+ -----
75
+
76
+ ### Basic setup
77
+
78
+ In `Vagrantfile` synced folder configuration, add the `fsnotify: true`
79
+ option. For example, in order to enable `vagrant-fsnotify` for the the default
80
+ `/vagrant` shared folder, add the following:
81
+
82
+ ```ruby
83
+ config.vm.synced_folder ".", "/vagrant", fsnotify: true
84
+ ```
85
+
86
+ When the guest virtual machine is up, run the following:
87
+
88
+ ```console
89
+ $ vagrant fsnotify
90
+ ```
91
+
92
+ This starts the long running process that captures filesystem events on the host
93
+ and forwards them to the guest virtual machine.
94
+
95
+ ### Run automatically on vagrant up
96
+
97
+ To have `vagrant fsnotify` start automatically with your guest, you can use triggers. Add this to your `Vagrantfile`:
98
+
99
+ ```ruby
100
+ config.trigger.after :up do |t|
101
+ t.name = "vagrant-fsnotify"
102
+ t.run = { inline: "vagrant fsnotify" }
103
+ end
104
+ ```
105
+
106
+ Now, whenever you run `vagrant up`, `vagrant fsnotify` will be run as well. Learn more at https://www.vagrantup.com/docs/triggers/
107
+
108
+ ### Multi-VM environments
109
+
110
+ In multi-VM environments, you can specify the name of the VMs targeted by
111
+ `vagrant-fsnotify` using:
112
+
113
+ ```console
114
+ $ vagrant fsnotify <vm-name-1> <vm-name-2> ...
115
+ ```
116
+
117
+ ### Excluding files
118
+
119
+ To exclude files or directories from being watched, you can add an `:exclude`
120
+ option, which takes an array of strings (matched as a regexp against relative
121
+ paths):
122
+
123
+ ```ruby
124
+ config.vm.synced_folder ".", "/vagrant", fsnotify: true,
125
+ exclude: ["path1", "some/directory"]
126
+ ```
127
+
128
+ This will exclude all files inside the `path1` and `some/directory`. It will
129
+ also exclude files such as `another/directory/path1`
130
+
131
+ ### Guest path override
132
+
133
+ If your actual path on the VM is not the same as the one in `synced_folder`, for
134
+ example when using [`vagrant-bindfs`][vagrant-bindfs], you can use the
135
+ `:override_guestpath` option:
136
+
137
+ ```ruby
138
+ config.vm.synced_folder ".", "/vagrant", fsnotify: true,
139
+ override_guestpath: "/real/path"
140
+ ```
141
+
142
+ This will forward a notification on `./myfile` to `/real/path/myfile` instead of
143
+ `/vagrant/myfile`.
144
+
145
+ ### Select filesystem events
146
+
147
+ By default, when the `:fsnotify` key in the `Vagrantfile` is configured with
148
+ `true`, all filesystem events are forwarded to the VM (i.e. file creation,
149
+ modification and removal events). If, instead, you want to select only a few of
150
+ those events to be forwarded (e.g. you don't care about file removals), you can
151
+ use an Array of Symbols among the following options: `:added`, `:modified` and
152
+ `:removed`.
153
+
154
+ For example, to forward only added files events to the default `/vagrant`
155
+ folder, add the following to the `Vagrantfile`:
156
+
157
+ ```ruby
158
+ config.vm.synced_folder ".", "/vagrant", fsnotify: [:added]
159
+ ```
160
+
161
+ ### Set touch flags
162
+
163
+ By default, the touch command on the VM will be run with modification flag and access flag, setting
164
+ both modification and access attributes of the file. If only either flag should be used the `:touch`
165
+ param can be set per machine config in the `Vagrantfile`. The param supports an array with either or both
166
+ `:modification` and `:access` values.
167
+
168
+ As example, to only set the access attribute of files when they have changed on the host system set the following
169
+ in the `Vagrantfile`:
170
+
171
+ ```ruby
172
+ config.fsnotify.touch = [:access]
173
+ ```
174
+ or for instances and providers
175
+ ```ruby
176
+ config.vm.define "vm" do |instance|
177
+ instance.fsnotify.touch = [:access]
178
+ end
179
+ ```
180
+
181
+ Development
182
+ -------------
183
+
184
+ To hack on `vagrant-fsnotify`, you need a recent ruby and virtualbox installed.
185
+
186
+ Then, after cloning the repo:
187
+ ```shell
188
+ # install development gems
189
+ bundle install
190
+
191
+ # run vagrant commands by prefixing them with `bundle exec` to run with the plugin installed from source
192
+ # this will launch a basic ubuntu VM and monitor file changes on the current directory
193
+ bundle exec vagrant up
194
+
195
+ # make changes to the code
196
+ vim lib/vagrant-fsnotify/command-fsnotify.rb
197
+ ...
198
+
199
+ # relaunch the process to activate your changes
200
+ bundle exec vagrant fsnotify
201
+ ```
202
+
203
+ Original work
204
+ -------------
205
+
206
+ This plugin used [`vagrant-rsync-back`][vagrant-rsync-back] by @smerill and the
207
+ [Vagrant][vagrant] source code as a starting point.
208
+
209
+ [vagrant]: https://www.vagrantup.com/
210
+ [jekyll]: http://jekyllrb.com/
211
+ [guard]: http://guardgem.org/
212
+ [forwarding-file-events-over-tcp]: https://github.com/guard/listen#forwarding-file-events-over-tcp
213
+ [vagrant-bindfs]: https://github.com/gael-ian/vagrant-bindfs
214
+ [vagrant-rsync-back]: https://github.com/smerrill/vagrant-rsync-back
data/Vagrantfile CHANGED
@@ -1,122 +1,14 @@
1
1
  # -*- mode: ruby -*-
2
2
  # vi: set ft=ruby :
3
3
 
4
- # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
5
- VAGRANTFILE_API_VERSION = "2"
6
-
7
- Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
8
- # All Vagrant configuration is done here. The most common configuration
9
- # options are documented and commented below. For a complete reference,
10
- # please see the online documentation at vagrantup.com.
11
-
12
- # Every Vagrant virtual environment requires a box to build off of.
13
- config.vm.box = "ubuntu/trusty64"
14
-
15
- # Disable automatic box update checking. If you disable this, then
16
- # boxes will only be checked for updates when the user runs
17
- # `vagrant box outdated`. This is not recommended.
18
- # config.vm.box_check_update = false
19
-
20
- # Create a forwarded port mapping which allows access to a specific port
21
- # within the machine from a port on the host machine. In the example below,
22
- # accessing "localhost:8080" will access port 80 on the guest machine.
23
- # config.vm.network "forwarded_port", guest: 80, host: 8080
24
-
25
- # Create a private network, which allows host-only access to the machine
26
- # using a specific IP.
27
- config.vm.network "private_network", ip: "192.168.33.10"
28
-
29
- # Create a public network, which generally matched to bridged network.
30
- # Bridged networks make the machine appear as another physical device on
31
- # your network.
32
- # config.vm.network "public_network"
33
-
34
- # If true, then any SSH connections made will enable agent forwarding.
35
- # Default value: false
36
- # config.ssh.forward_agent = true
37
-
38
- # Share an additional folder to the guest VM. The first argument is
39
- # the path on the host to the actual folder. The second argument is
40
- # the path on the guest to mount the folder. And the optional third
41
- # argument is a set of non-required options.
4
+ Vagrant.configure("2") do |config|
5
+ config.vm.box = "ubuntu/bionic64"
42
6
  config.vm.synced_folder ".", "/vagrant", fsnotify: true
43
7
 
44
- # Provider-specific configuration so you can fine-tune various
45
- # backing providers for Vagrant. These expose provider-specific options.
46
- # Example for VirtualBox:
47
- #
48
- # config.vm.provider "virtualbox" do |vb|
49
- # # Don't boot with headless mode
50
- # vb.gui = true
51
- #
52
- # # Use VBoxManage to customize the VM. For example to change memory:
53
- # vb.customize ["modifyvm", :id, "--memory", "1024"]
54
- # end
55
- #
56
- # View the documentation for the provider you're using for more
57
- # information on available options.
58
-
59
- # Enable provisioning with CFEngine. CFEngine Community packages are
60
- # automatically installed. For example, configure the host as a
61
- # policy server and optionally a policy file to run:
62
- #
63
- # config.vm.provision "cfengine" do |cf|
64
- # cf.am_policy_hub = true
65
- # # cf.run_file = "motd.cf"
66
- # end
67
- #
68
- # You can also configure and bootstrap a client to an existing
69
- # policy server:
70
- #
71
- # config.vm.provision "cfengine" do |cf|
72
- # cf.policy_server_address = "10.0.2.15"
73
- # end
74
-
75
- # Enable provisioning with Puppet stand alone. Puppet manifests
76
- # are contained in a directory path relative to this Vagrantfile.
77
- # You will need to create the manifests directory and a manifest in
78
- # the file default.pp in the manifests_path directory.
79
- #
80
- # config.vm.provision "puppet" do |puppet|
81
- # puppet.manifests_path = "manifests"
82
- # puppet.manifest_file = "site.pp"
83
- # end
84
-
85
- # Enable provisioning with chef solo, specifying a cookbooks path, roles
86
- # path, and data_bags path (all relative to this Vagrantfile), and adding
87
- # some recipes and/or roles.
88
- #
89
- # config.vm.provision "chef_solo" do |chef|
90
- # chef.cookbooks_path = "../my-recipes/cookbooks"
91
- # chef.roles_path = "../my-recipes/roles"
92
- # chef.data_bags_path = "../my-recipes/data_bags"
93
- # chef.add_recipe "mysql"
94
- # chef.add_role "web"
95
- #
96
- # # You may also specify custom JSON attributes:
97
- # chef.json = { mysql_password: "foo" }
98
- # end
8
+ config.vm.provision "shell", inline: "sudo apt-get update && sudo apt-get install -y inotify-tools"
99
9
 
100
- # Enable provisioning with chef server, specifying the chef server URL,
101
- # and the path to the validation key (relative to this Vagrantfile).
102
- #
103
- # The Opscode Platform uses HTTPS. Substitute your organization for
104
- # ORGNAME in the URL and validation key.
105
- #
106
- # If you have your own Chef Server, use the appropriate URL, which may be
107
- # HTTP instead of HTTPS depending on your configuration. Also change the
108
- # validation key to validation.pem.
109
- #
110
- # config.vm.provision "chef_client" do |chef|
111
- # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
112
- # chef.validation_key_path = "ORGNAME-validator.pem"
113
- # end
114
- #
115
- # If you're using the Opscode platform, your validator client is
116
- # ORGNAME-validator, replacing ORGNAME with your organization name.
117
- #
118
- # If you have your own Chef Server, the default validation client name is
119
- # chef-validator, unless you changed the configuration.
120
- #
121
- # chef.validation_client_name = "ORGNAME-validator"
10
+ config.trigger.after :up do |t|
11
+ t.name = "vagrant-fsnotify"
12
+ t.run = { inline: "bundle exec vagrant fsnotify" }
13
+ end
122
14
  end
@@ -4,6 +4,10 @@ module VagrantPlugins::Fsnotify
4
4
  class Command < Vagrant.plugin("2", :command)
5
5
  include Vagrant::Action::Builtin::MixinSyncedFolders
6
6
 
7
+ def self.synopsis
8
+ 'forwards filesystem events to virtual machine'
9
+ end
10
+
7
11
  def execute
8
12
  @logger = Log4r::Logger.new("vagrant::commands::fsnotify")
9
13
 
@@ -29,18 +33,25 @@ module VagrantPlugins::Fsnotify
29
33
 
30
34
  folder.each do |id, opts|
31
35
 
32
- next if not opts[:fsnotify]
36
+ if !(
37
+ (opts[:fsnotify] == true) ||
38
+ (
39
+ opts[:fsnotify].respond_to?(:include?) &&
40
+ (
41
+ opts[:fsnotify].include?(:modified) ||
42
+ opts[:fsnotify].include?(:added) ||
43
+ opts[:fsnotify].include?(:removed)
44
+ )
45
+ )
46
+ )
47
+ next
48
+ end
33
49
 
34
50
  # Folder info
35
51
  hostpath = opts[:hostpath]
36
52
  hostpath = File.expand_path(hostpath, machine.env.root_path)
37
53
  hostpath = Vagrant::Util::Platform.fs_real_path(hostpath).to_s
38
54
 
39
- if Vagrant::Util::Platform.windows?
40
- # rsync for Windows expects cygwin style paths, always.
41
- hostpath = Vagrant::Util::Platform.cygwin_path(hostpath)
42
- end
43
-
44
55
  # Make sure the host path ends with a "/" to avoid creating
45
56
  # a nested directory...
46
57
  if !hostpath.end_with?("/")
@@ -68,7 +79,27 @@ module VagrantPlugins::Fsnotify
68
79
  end
69
80
 
70
81
  if paths.empty?
71
- @env.ui.info("Nothing to sync, exiting...")
82
+ @env.ui.info(<<-MESSAGE)
83
+ Nothing to sync.
84
+
85
+ Note that the valid values for the `:fsnotify' configuration key on
86
+ `Vagrantfile' are either `true' (which forwards all kinds of filesystem events)
87
+ or an Array containing symbols among the following options: `:modified',
88
+ `:added' and `:removed' (in which case, only the specified filesystem events are
89
+ forwarded).
90
+
91
+ For example, to forward all filesystem events to the default `/vagrant' folder,
92
+ add the following to the `Vagrantfile':
93
+
94
+ config.vm.synced_folder ".", "/vagrant", fsnotify: true
95
+
96
+ And to forward only added files events to the default `/vagrant' folder, add the
97
+ following to the `Vagrantfile':
98
+
99
+ config.vm.synced_folder ".", "/vagrant", fsnotify: [:added]
100
+
101
+ Exiting...
102
+ MESSAGE
72
103
  return 1
73
104
  end
74
105
 
@@ -95,7 +126,7 @@ module VagrantPlugins::Fsnotify
95
126
  Vagrant::Util::Busy.busy(callback) do
96
127
  listener.start
97
128
  queue.pop
98
- listener.stop if listener.listen?
129
+ listener.stop if listener.state != :stopped
99
130
  end
100
131
 
101
132
  return 0
@@ -113,10 +144,26 @@ module VagrantPlugins::Fsnotify
113
144
  end
114
145
 
115
146
  tosync = {}
147
+ todelete = []
116
148
 
117
149
  paths.each do |hostpath, folder|
118
150
 
119
- modified.each do |file|
151
+ toanalyze = []
152
+ if folder[:opts][:fsnotify] == true
153
+ toanalyze += modified + added + removed
154
+ else
155
+ if folder[:opts][:fsnotify].include? :modified
156
+ toanalyze += modified
157
+ end
158
+ if folder[:opts][:fsnotify].include? :added
159
+ toanalyze += added
160
+ end
161
+ if folder[:opts][:fsnotify].include? :removed
162
+ toanalyze += removed
163
+ end
164
+ end
165
+
166
+ toanalyze.each do |file|
120
167
 
121
168
  if file.start_with?(hostpath)
122
169
 
@@ -128,7 +175,13 @@ module VagrantPlugins::Fsnotify
128
175
  end
129
176
 
130
177
  @changes[rel_path] = Time.now.to_i
131
- folder[:machine].ui.info("fsnotify: Changed: #{rel_path}")
178
+ if modified.include? file
179
+ folder[:machine].ui.info("fsnotify: Changed: #{rel_path}")
180
+ elsif added.include? file
181
+ folder[:machine].ui.info("fsnotify: Added: #{rel_path}")
182
+ elsif removed.include? file
183
+ folder[:machine].ui.info("fsnotify: Removed: #{rel_path}")
184
+ end
132
185
 
133
186
  guestpath = folder[:opts][:override_guestpath] || folder[:opts][:guestpath]
134
187
  guestpath = File.join(guestpath, rel_path)
@@ -136,6 +189,9 @@ module VagrantPlugins::Fsnotify
136
189
  tosync[folder[:machine]] = [] if !tosync.has_key?(folder[:machine])
137
190
  tosync[folder[:machine]] << guestpath
138
191
 
192
+ if removed.include? file
193
+ todelete << guestpath
194
+ end
139
195
  end
140
196
 
141
197
  end
@@ -143,7 +199,12 @@ module VagrantPlugins::Fsnotify
143
199
  end
144
200
 
145
201
  tosync.each do |machine, files|
146
- machine.communicate.execute("touch -a '#{files.join("' '")}'")
202
+ touch_flags = get_touch_flags(machine.config.fsnotify.touch)
203
+ machine.communicate.execute("touch -#{touch_flags} '#{files.join("' '")}'")
204
+ remove_from_this_machine = files & todelete
205
+ unless remove_from_this_machine.empty?
206
+ machine.communicate.execute("rm -rf '#{remove_from_this_machine.join("' '")}'")
207
+ end
147
208
  end
148
209
 
149
210
  rescue => e
@@ -163,5 +224,14 @@ module VagrantPlugins::Fsnotify
163
224
 
164
225
  end
165
226
 
227
+ def get_touch_flags(touch)
228
+ if touch.include? :modification and not touch.include? :access
229
+ return "m"
230
+ elsif not touch.include? :modification and touch.include? :access
231
+ return "a"
232
+ else
233
+ return "am"
234
+ end
235
+ end
166
236
  end
167
237
  end
@@ -0,0 +1,29 @@
1
+ begin
2
+ require "vagrant"
3
+ rescue LoadError
4
+ raise "The vagrant-fsnotify plugin must be run within Vagrant."
5
+ end
6
+
7
+ if Vagrant::VERSION < "1.7.3"
8
+ raise <<-ERROR
9
+ The vagrant-fsnotify plugin is only compatible with Vagrant 1.7.3+. If you can't
10
+ upgrade, consider installing an old version of vagrant-fsnotify with:
11
+ $ vagrant plugin install vagrant-fsnotify --plugin-version 0.0.6.
12
+ ERROR
13
+ end
14
+
15
+ module VagrantPlugins::Fsnotify
16
+
17
+ class Config < Vagrant.plugin("2", :config)
18
+ attr_accessor :touch
19
+
20
+ def initialize
21
+ @touch = UNSET_VALUE
22
+ end
23
+
24
+ def finalize!
25
+ @touch = [:modification, :access] if @touch == UNSET_VALUE
26
+ end
27
+ end
28
+
29
+ end
@@ -4,8 +4,12 @@ rescue LoadError
4
4
  raise "The vagrant-fsnotify plugin must be run within Vagrant."
5
5
  end
6
6
 
7
- if Vagrant::VERSION < "1.5"
8
- raise "The vagrant-fsnotify plugin is only compatible with Vagrant 1.5+"
7
+ if Vagrant::VERSION < "1.7.3"
8
+ raise <<-ERROR
9
+ The vagrant-fsnotify plugin is only compatible with Vagrant 1.7.3+. If you can't
10
+ upgrade, consider installing an old version of vagrant-fsnotify with:
11
+ $ vagrant plugin install vagrant-fsnotify --plugin-version 0.0.6.
12
+ ERROR
9
13
  end
10
14
 
11
15
  module VagrantPlugins::Fsnotify
@@ -18,6 +22,11 @@ module VagrantPlugins::Fsnotify
18
22
  Command
19
23
  end
20
24
 
25
+ config "fsnotify" do
26
+ require_relative "config-fsnotify"
27
+ Config
28
+ end
29
+
21
30
  end
22
31
 
23
32
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Fsnotify
3
- VERSION = "0.0.6"
3
+ VERSION = "0.3.2"
4
4
  end
5
5
  end
@@ -18,8 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "listen", "2.8.0"
22
-
23
- spec.add_development_dependency "bundler", "~> 1.9"
24
- spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
25
23
  end
metadata CHANGED
@@ -1,57 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-fsnotify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Kohlbecker
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-15 00:00:00.000000000 Z
11
+ date: 2021-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: listen
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '='
18
- - !ruby/object:Gem::Version
19
- version: 2.8.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 2.8.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
- - - ~>
17
+ - - ">="
32
18
  - !ruby/object:Gem::Version
33
- version: '1.9'
19
+ version: '0'
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - ~>
24
+ - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: '1.9'
26
+ version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - ~>
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '10.0'
33
+ version: '0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - ~>
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: '10.0'
40
+ version: '0'
55
41
  description: Use vagrant-fsnotify to forward filesystem change notifications to your
56
42
  Vagrant VM
57
43
  email:
@@ -60,7 +46,9 @@ executables: []
60
46
  extensions: []
61
47
  extra_rdoc_files: []
62
48
  files:
63
- - .gitignore
49
+ - ".gitignore"
50
+ - AUTHORS
51
+ - CHANGELOG.md
64
52
  - Gemfile
65
53
  - LICENSE
66
54
  - README.md
@@ -70,6 +58,7 @@ files:
70
58
  - bin/setup
71
59
  - lib/vagrant-fsnotify.rb
72
60
  - lib/vagrant-fsnotify/command-fsnotify.rb
61
+ - lib/vagrant-fsnotify/config-fsnotify.rb
73
62
  - lib/vagrant-fsnotify/plugin.rb
74
63
  - lib/vagrant-fsnotify/version.rb
75
64
  - vagrant-fsnotify.gemspec
@@ -77,24 +66,23 @@ homepage: https://github.com/adrienkohlbecker/vagrant-fsnotify
77
66
  licenses:
78
67
  - MIT
79
68
  metadata: {}
80
- post_install_message:
69
+ post_install_message:
81
70
  rdoc_options: []
82
71
  require_paths:
83
72
  - lib
84
73
  required_ruby_version: !ruby/object:Gem::Requirement
85
74
  requirements:
86
- - - '>='
75
+ - - ">="
87
76
  - !ruby/object:Gem::Version
88
77
  version: '0'
89
78
  required_rubygems_version: !ruby/object:Gem::Requirement
90
79
  requirements:
91
- - - '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  requirements: []
95
- rubyforge_project:
96
- rubygems_version: 2.0.14
97
- signing_key:
84
+ rubygems_version: 3.1.4
85
+ signing_key:
98
86
  specification_version: 4
99
87
  summary: Forward filesystem change notifications to your Vagrant VM
100
88
  test_files: []