Merge pull request #8756 from briancain/rsync-auto-docker-provider-fixes
Only rsync-auto current working dir with docker provider
This commit is contained in:
commit
1bcba57eb7
|
@ -48,6 +48,9 @@ module VagrantPlugins
|
|||
paths = {}
|
||||
ignores = []
|
||||
with_target_vms(argv) do |machine|
|
||||
next if machine.state.id == :not_created
|
||||
cwd = machine.env.cwd.to_s
|
||||
|
||||
if machine.provider.capability?(:proxy_machine)
|
||||
proxy = machine.provider.capability(:proxy_machine)
|
||||
if proxy
|
||||
|
@ -70,6 +73,21 @@ module VagrantPlugins
|
|||
folders = cached[:rsync]
|
||||
next if !folders || folders.empty?
|
||||
|
||||
# NOTE: This check is required with boot2docker since all containers
|
||||
# share the same virtual machine. This prevents rsync-auto from
|
||||
# syncing all known containers with rsync to the boot2docker vm
|
||||
# and only syncs the current working dirs folders.
|
||||
sync_folders = {}
|
||||
folders.each do |id, folder_opts|
|
||||
if cwd != folder_opts[:hostpath]
|
||||
machine.ui.info(I18n.t("vagrant.rsync_auto_remove_folder",
|
||||
folder: folder_opts[:hostpath]))
|
||||
else
|
||||
sync_folders[id] = folder_opts
|
||||
end
|
||||
end
|
||||
folders = sync_folders
|
||||
|
||||
# Get the SSH info for this machine so we can do an initial
|
||||
# sync to the VM.
|
||||
ssh_info = machine.ssh_info
|
||||
|
|
|
@ -218,6 +218,8 @@ en:
|
|||
have specified `rsync_auto` to be false.
|
||||
rsync_auto_path: |-
|
||||
Watching: %{path}
|
||||
rsync_auto_remove_folder: |-
|
||||
Not syncing %{folder} as it is not part of the current working directory.
|
||||
rsync_auto_rsync_error: |-
|
||||
There was an error while executing rsync. The error is shown below.
|
||||
This may not be critical since rsync sometimes fails, but if this message
|
||||
|
|
|
@ -13,17 +13,18 @@ describe VagrantPlugins::SyncedFolderRSync::Command::RsyncAuto do
|
|||
env.create_vagrant_env
|
||||
end
|
||||
|
||||
let(:synced_folders) { {} }
|
||||
let(:synced_folders_empty) { {} }
|
||||
let(:synced_folders_dupe) { {"1234":
|
||||
{type: "rsync",
|
||||
exclude: false,
|
||||
hostpath: "/Users/brian/code/vagrant-sandbox"},
|
||||
"5678":
|
||||
{type: "rsync",
|
||||
exclude: false,
|
||||
hostpath: "/Not/The/Same/Path"}} }
|
||||
|
||||
let(:helper_class) { VagrantPlugins::SyncedFolderRSync::RsyncHelper }
|
||||
|
||||
subject do
|
||||
described_class.new(argv, iso_env).tap do |s|
|
||||
s.stub(synced_folders: synced_folders)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#callback" do
|
||||
let(:paths) { {} }
|
||||
let(:ssh_info) {{}}
|
||||
|
||||
|
@ -32,12 +33,57 @@ describe VagrantPlugins::SyncedFolderRSync::Command::RsyncAuto do
|
|||
m.stub(id: "foo")
|
||||
m.stub(reload: nil)
|
||||
m.stub(ssh_info: ssh_info)
|
||||
m.stub(ui: double("ui"))
|
||||
m.stub(ui: iso_env.ui)
|
||||
m.stub(provider: double("provider"))
|
||||
m.stub(state: double("state", id: :not_created))
|
||||
m.stub(env: iso_env)
|
||||
|
||||
m.ui.stub(error: nil)
|
||||
end
|
||||
end
|
||||
|
||||
subject do
|
||||
described_class.new(argv, iso_env).tap
|
||||
end
|
||||
|
||||
|
||||
describe "#execute" do
|
||||
let (:machine) { machine_stub("m") }
|
||||
let (:cached_folders) { { rsync: synced_folders_dupe } }
|
||||
|
||||
before do
|
||||
allow(subject).to receive(:with_target_vms) { |&block| block.call machine }
|
||||
end
|
||||
|
||||
it "does not sync folders outside of the cwd" do
|
||||
allow(machine.ui).to receive(:info)
|
||||
allow(machine.state).to receive(:id).and_return(:created)
|
||||
allow(machine.env).to receive(:cwd).
|
||||
and_return("/Users/brian/code/vagrant-sandbox")
|
||||
allow(machine.provider).to receive(:capability?).and_return(false)
|
||||
|
||||
allow(subject).to receive(:synced_folders).
|
||||
with(machine, cached: true).and_return(cached_folders)
|
||||
allow(helper_class).to receive(:rsync_single).and_return(true)
|
||||
allow(Vagrant::Util::Busy).to receive(:busy).and_return(true)
|
||||
allow(Listen).to receive(:to).and_return(true)
|
||||
|
||||
|
||||
expect(machine.ui).to receive(:info).
|
||||
with("Not syncing /Not/The/Same/Path as it is not part of the current working directory.")
|
||||
expect(helper_class).to receive(:rsync_single)
|
||||
|
||||
subject.execute()
|
||||
end
|
||||
end
|
||||
|
||||
subject do
|
||||
described_class.new(argv, iso_env).tap do |s|
|
||||
s.stub(synced_folders: synced_folders_empty)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#callback" do
|
||||
it "syncs modified folders to the proper path" do
|
||||
paths["/foo"] = [
|
||||
{ machine: machine_stub("m1"), opts: double("opts_m1") },
|
||||
|
|
Loading…
Reference in New Issue