vagrant-winscp-sync 0.0.1.dev
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.
- data/.gitignore +19 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +9 -0
- data/Vagrantfile +61 -0
- data/lib/vagrant-winscp-sync.rb +18 -0
- data/lib/vagrant-winscp-sync/config/sync.rb +32 -0
- data/lib/vagrant-winscp-sync/plugin.rb +27 -0
- data/lib/vagrant-winscp-sync/provisioner/sync.rb +80 -0
- data/lib/vagrant-winscp-sync/version.rb +5 -0
- data/vagrant-winscp-sync.gemspec +23 -0
- metadata +94 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
group :development do
|
6
|
+
# We depend on Vagrant for development, but we don't add it as a
|
7
|
+
# gem dependency because we expect to be installed within the
|
8
|
+
# Vagrant environment itself using `vagrant plugin`.
|
9
|
+
gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git"
|
10
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Dave Keen
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Vagrant::Winscp::Sync
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'vagrant-winscp-sync'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install vagrant-winscp-sync
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/Vagrantfile
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
Vagrant.require_plugin "vagrant-winscp-sync"
|
5
|
+
|
6
|
+
ipaddress = "10.0.0.21"
|
7
|
+
|
8
|
+
Vagrant.configure("2") do |config|
|
9
|
+
# Every Vagrant virtual environment requires a box to build off of.
|
10
|
+
config.vm.box = "precise64"
|
11
|
+
|
12
|
+
# The url from where the 'config.vm.box' box will be fetched if it
|
13
|
+
# doesn't already exist on the user's system.
|
14
|
+
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
|
15
|
+
|
16
|
+
# Create a forwarded port mapping which allows access to a specific port
|
17
|
+
# within the machine from a port on the host machine. In the example below,
|
18
|
+
# accessing "localhost:8080" will access port 80 on the guest machine.
|
19
|
+
#config.vm.network :forwarded_port, guest: 80, host: 8080
|
20
|
+
|
21
|
+
# Create a private network, which allows host-only access to the machine
|
22
|
+
# using a specific IP.
|
23
|
+
config.vm.network :private_network, ip: ipaddress
|
24
|
+
|
25
|
+
# Create a public network, which generally matched to bridged network.
|
26
|
+
# Bridged networks make the machine appear as another physical device on
|
27
|
+
# your network.
|
28
|
+
# config.vm.network :public_network
|
29
|
+
|
30
|
+
# Share an additional folder to the guest VM. The first argument is
|
31
|
+
# the path on the host to the actual folder. The second argument is
|
32
|
+
# the path on the guest to mount the folder. And the optional third
|
33
|
+
# argument is a set of non-required options.
|
34
|
+
# config.vm.synced_folder "../data", "/vagrant_data"
|
35
|
+
config.vm.synced_folder ".", "/vagrant", disabled: true
|
36
|
+
|
37
|
+
# Provider-specific configuration so you can fine-tune various
|
38
|
+
# backing providers for Vagrant. These expose provider-specific options.
|
39
|
+
# Example for VirtualBox:
|
40
|
+
#
|
41
|
+
config.vm.provider :virtualbox do |vb|
|
42
|
+
# # Don't boot with headless mode
|
43
|
+
# vb.gui = true
|
44
|
+
#
|
45
|
+
# Use VBoxManage to customize the VM. For example to change memory:
|
46
|
+
# vb.customize ["modifyvm", :id, "--memory", "2048"]
|
47
|
+
end
|
48
|
+
#
|
49
|
+
# View the documentation for the provider you're using for more
|
50
|
+
# information on available options.
|
51
|
+
|
52
|
+
# Enable provisioning with chef solo, specifying a cookbooks path, roles
|
53
|
+
# path, and data_bags path (all relative to this Vagrantfile), and adding
|
54
|
+
# some recipes and/or roles.
|
55
|
+
config.vm.provision :winscp_sync do |winscp|
|
56
|
+
winscp.session = "platypus_vagrant"
|
57
|
+
winscp.remote_dir = "/home/vagrant/platypus"
|
58
|
+
winscp.file_mask = "|.git/;.vagrant/;.idea/;*/app/cache/;*/app/logs/;*/chef/"
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
3
|
+
require "vagrant-winscp-sync/plugin"
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module WinSCP
|
7
|
+
#lib_path = Pathname.new(File.expand_path("../vagrant-winscp-sync", __FILE__))
|
8
|
+
#autoload :Action, lib_path.join("action")
|
9
|
+
#autoload :Errors, lib_path.join("errors")
|
10
|
+
|
11
|
+
# This returns the path to the source of this plugin.
|
12
|
+
#
|
13
|
+
# @return [Pathname]
|
14
|
+
def self.source_root
|
15
|
+
@source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module WinSCP
|
3
|
+
module Config
|
4
|
+
class Sync < Vagrant.plugin("2", :config)
|
5
|
+
attr_accessor :session
|
6
|
+
attr_accessor :local_dir
|
7
|
+
attr_accessor :remote_dir
|
8
|
+
attr_accessor :file_mask
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
super
|
12
|
+
@session = UNSET_VALUE
|
13
|
+
@local_dir = UNSET_VALUE
|
14
|
+
@remote_dir = UNSET_VALUE
|
15
|
+
@file_mask = UNSET_VALUE
|
16
|
+
end
|
17
|
+
|
18
|
+
def finalize!
|
19
|
+
@local_dir = Dir.pwd if @local_dir == UNSET_VALUE
|
20
|
+
@file_mask = "*" if @local_dir == UNSET_VALUE
|
21
|
+
end
|
22
|
+
|
23
|
+
def validate(machine)
|
24
|
+
return { "session" => ["The WinSCP session must be set"] } if (@session == UNSET_VALUE)
|
25
|
+
return { "remote_dir" => ["The remote dir must be set"] } if (@remote_dir == UNSET_VALUE)
|
26
|
+
return {}
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
begin
|
2
|
+
require "vagrant"
|
3
|
+
rescue LoadError
|
4
|
+
raise "The Vagrant WinSCP sync plugin must be run within Vagrant."
|
5
|
+
end
|
6
|
+
|
7
|
+
if Vagrant::VERSION < "1.2.0"
|
8
|
+
raise "The Vagrant AWS plugin is only compatible with Vagrant 1.2+"
|
9
|
+
end
|
10
|
+
|
11
|
+
module VagrantPlugins
|
12
|
+
module WinSCP
|
13
|
+
class Plugin < Vagrant.plugin("2")
|
14
|
+
name "WinSCP"
|
15
|
+
|
16
|
+
config(:winscp_sync, :provisioner) do
|
17
|
+
require File.expand_path("../config/sync", __FILE__)
|
18
|
+
Config::Sync
|
19
|
+
end
|
20
|
+
|
21
|
+
provisioner(:winscp_sync) do
|
22
|
+
require File.expand_path("../provisioner/sync", __FILE__)
|
23
|
+
Provisioner::Sync
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module WinSCP
|
5
|
+
module Provisioner
|
6
|
+
class Sync < Vagrant.plugin("2", :provisioner)
|
7
|
+
|
8
|
+
# Initializes the provisioner with the machine that it will be
|
9
|
+
# provisioning along with the provisioner configuration (if there
|
10
|
+
# is any).
|
11
|
+
#
|
12
|
+
# The provisioner should _not_ do anything at this point except
|
13
|
+
# initialize internal state.
|
14
|
+
#
|
15
|
+
# @param [Machine] machine The machine that this will be provisioning.
|
16
|
+
# @param [Object] config Provisioner configuration, if one was set.
|
17
|
+
def initialize(machine, config)
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
# Called with the root configuration of the machine so the provisioner
|
22
|
+
# can add some configuration on top of the machine.
|
23
|
+
#
|
24
|
+
# During this step, and this step only, the provisioner should modify
|
25
|
+
# the root machine configuration to add any additional features it
|
26
|
+
# may need. Examples include sharing folders, networking, and so on.
|
27
|
+
# This step is guaranteed to be called before any of those steps are
|
28
|
+
# done so the provisioner may do that.
|
29
|
+
#
|
30
|
+
# No return value is expected.
|
31
|
+
def configure(root_config)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
# This is the method called when the actual provisioning should be
|
36
|
+
# done. The communicator is guaranteed to be ready at this point,
|
37
|
+
# and any shared folders or networks are already setup.
|
38
|
+
#
|
39
|
+
# No return value is expected.
|
40
|
+
def provision
|
41
|
+
session = @config.session
|
42
|
+
local_dir = @config.local_dir
|
43
|
+
remote_dir = @config.remote_dir
|
44
|
+
file_mask = @config.file_mask
|
45
|
+
|
46
|
+
open_command = "open \"\"#{session}\"\""
|
47
|
+
sync_command = "synchronize remote \"\"#{local_dir}\"\" \"\"#{remote_dir}\"\" -filemask=\"\"#{file_mask}\"\" "
|
48
|
+
|
49
|
+
run_cmd [ "\"C:\\Program Files (x86)\\WinSCP\\winscp.com\" /console /command \"#{open_command}\" \"#{sync_command}\" " ]
|
50
|
+
|
51
|
+
u2d_command = "keepuptodate \"\"#{local_dir}\"\" \"\"#{remote_dir}\"\" -filemask=\"\"#{file_mask}\"\" "
|
52
|
+
Process.spawn "\"C:\\Program Files (x86)\\WinSCP\\winscp.com\" /console /command \"#{open_command}\" \"#{u2d_command}\" "
|
53
|
+
end
|
54
|
+
|
55
|
+
def run_cmd(cmd)
|
56
|
+
@machine.ui.info "running: #{cmd.join ' '}"
|
57
|
+
Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thread|
|
58
|
+
stdin.close
|
59
|
+
readers = [stdout, stderr]
|
60
|
+
while not readers.empty?
|
61
|
+
rs, = IO.select(readers)
|
62
|
+
break if rs.empty?
|
63
|
+
rs.each do |r|
|
64
|
+
begin
|
65
|
+
got = r.readpartial(1024)
|
66
|
+
out = (r == stdout) ? $stdout : $stderr
|
67
|
+
out.print got
|
68
|
+
rescue EOFError
|
69
|
+
readers.delete_if { |s| r == s }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
wait_thread.value.success?
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'vagrant-winscp-sync/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "vagrant-winscp-sync"
|
8
|
+
spec.version = VagrantPlugins::WinSCP::VERSION
|
9
|
+
spec.authors = ["Dave Keen"]
|
10
|
+
spec.email = []
|
11
|
+
spec.description = %q{A Vagrant plugin for syncing files on Windows via WinSCP instead of shared folders}
|
12
|
+
spec.summary = %q{A Vagrant plugin for syncing files on Windows via WinSCP instead of shared folders}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-winscp-sync
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1.dev
|
5
|
+
prerelease: 6
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dave Keen
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-06-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: A Vagrant plugin for syncing files on Windows via WinSCP instead of shared
|
47
|
+
folders
|
48
|
+
email: []
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- .gitignore
|
54
|
+
- Gemfile
|
55
|
+
- LICENSE.txt
|
56
|
+
- README.md
|
57
|
+
- Rakefile
|
58
|
+
- Vagrantfile
|
59
|
+
- lib/vagrant-winscp-sync.rb
|
60
|
+
- lib/vagrant-winscp-sync/config/sync.rb
|
61
|
+
- lib/vagrant-winscp-sync/plugin.rb
|
62
|
+
- lib/vagrant-winscp-sync/provisioner/sync.rb
|
63
|
+
- lib/vagrant-winscp-sync/version.rb
|
64
|
+
- vagrant-winscp-sync.gemspec
|
65
|
+
homepage: ''
|
66
|
+
licenses:
|
67
|
+
- MIT
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
hash: 793044369
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>'
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 1.3.1
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 1.8.24
|
90
|
+
signing_key:
|
91
|
+
specification_version: 3
|
92
|
+
summary: A Vagrant plugin for syncing files on Windows via WinSCP instead of shared
|
93
|
+
folders
|
94
|
+
test_files: []
|