ftpeter 0.1.0 → 0.2.0
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/.rubocop.yml +33 -0
- data/.rubocop_todo.yml +34 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +7 -1
- data/Guardfile +50 -0
- data/README.md +1 -1
- data/Rakefile +4 -3
- data/bin/console +4 -3
- data/exe/ftpeter +2 -1
- data/ftpeter.gemspec +24 -16
- data/lib/ftpeter/backend/git.rb +18 -0
- data/lib/ftpeter/backend.rb +6 -0
- data/lib/ftpeter/changes.rb +11 -0
- data/lib/ftpeter/cli.rb +42 -61
- data/lib/ftpeter/connection.rb +4 -0
- data/lib/ftpeter/transport/lftp.rb +78 -0
- data/lib/ftpeter/transport.rb +22 -0
- data/lib/ftpeter/version.rb +2 -1
- data/lib/ftpeter.rb +14 -6
- metadata +45 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c86268cfe83c63b53a5342410956738fbeaef88b
|
4
|
+
data.tar.gz: 02fa1e3409a5f3ecbc39378294b0716f886eccbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10bae2b564422d92537198d048d16fbeb5477863e3cfd4a2b6ea4a19842a515eb4ffb6cd2c997c63ef912780fc0b54ac1282233509a27aacfde99d6f1c95d7df
|
7
|
+
data.tar.gz: 20fe5332c67d3744ca8c8feea384998406be4e17dc255149d023905aaac368e41767b21f528bbdac1761e69347ae45fc258dfd1d9cf3c4f1e03f12b00a2eebd4
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
2
|
+
|
3
|
+
# Style Choices
|
4
|
+
|
5
|
+
Metrics/LineLength:
|
6
|
+
Max: 100
|
7
|
+
|
8
|
+
Style/BlockDelimiters:
|
9
|
+
EnforcedStyle: braces_for_chaining
|
10
|
+
|
11
|
+
Style/HashSyntax:
|
12
|
+
EnforcedStyle: ruby19_no_mixed_keys
|
13
|
+
|
14
|
+
Style/MultilineMethodCallIndentation:
|
15
|
+
EnforcedStyle: indented_relative_to_receiver
|
16
|
+
|
17
|
+
Style/FrozenStringLiteralComment:
|
18
|
+
EnforcedStyle: always
|
19
|
+
|
20
|
+
Style/PercentLiteralDelimiters:
|
21
|
+
PreferredDelimiters:
|
22
|
+
'%r': ~~
|
23
|
+
|
24
|
+
Style/AndOr:
|
25
|
+
EnforcedStyle: conditionals
|
26
|
+
|
27
|
+
# Rejection of nonsensical Rules and things I don't care about
|
28
|
+
|
29
|
+
Lint/AmbiguousRegexpLiteral:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
Style/RegexpLiteral:
|
33
|
+
Enabled: false
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2016-09-04 12:22:39 +0200 using RuboCop version 0.42.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 1
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 25
|
12
|
+
|
13
|
+
# Offense count: 2
|
14
|
+
# Configuration parameters: CountComments.
|
15
|
+
Metrics/MethodLength:
|
16
|
+
Max: 24
|
17
|
+
|
18
|
+
# Offense count: 7
|
19
|
+
Style/Documentation:
|
20
|
+
Exclude:
|
21
|
+
- 'spec/**/*'
|
22
|
+
- 'test/**/*'
|
23
|
+
- 'lib/ftpeter.rb'
|
24
|
+
- 'lib/ftpeter/backend.rb'
|
25
|
+
- 'lib/ftpeter/backend/git.rb'
|
26
|
+
- 'lib/ftpeter/cli.rb'
|
27
|
+
- 'lib/ftpeter/transport.rb'
|
28
|
+
- 'lib/ftpeter/transport/lftp.rb'
|
29
|
+
|
30
|
+
# Offense count: 1
|
31
|
+
# Configuration parameters: MinBodyLength.
|
32
|
+
Style/GuardClause:
|
33
|
+
Exclude:
|
34
|
+
- 'lib/ftpeter/cli.rb'
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ftpeter
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.3.1
|
data/Gemfile
CHANGED
data/Guardfile
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# A sample Guardfile
|
3
|
+
# More info at https://github.com/guard/guard#readme
|
4
|
+
|
5
|
+
## Uncomment and set this to only include directories you want to watch
|
6
|
+
# directories %w(app lib config test spec features) \
|
7
|
+
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
8
|
+
|
9
|
+
## Note: if you are using the `directories` clause above and you are not
|
10
|
+
## watching the project directory ('.'), then you will want to move
|
11
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
12
|
+
#
|
13
|
+
# $ mkdir config
|
14
|
+
# $ mv Guardfile config/
|
15
|
+
# $ ln -s config/Guardfile .
|
16
|
+
#
|
17
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
18
|
+
|
19
|
+
guard :rubocop do
|
20
|
+
watch(%r~.+\.rb$~)
|
21
|
+
watch(%r~.+\.gemspec$~)
|
22
|
+
watch(%r~(Rake|Gem)file$~)
|
23
|
+
watch(%r~(?:.+/)?\.rubocop\.yml$~) { |m| File.dirname(m[0]) }
|
24
|
+
end
|
25
|
+
|
26
|
+
# Note: The cmd option is now required due to the increasing number of ways
|
27
|
+
# rspec may be run, below are examples of the most common uses.
|
28
|
+
# * bundler: 'bundle exec rspec'
|
29
|
+
# * bundler binstubs: 'bin/rspec'
|
30
|
+
# * spring: 'bin/rspec' (This will use spring if running and you have
|
31
|
+
# installed the spring binstubs per the docs)
|
32
|
+
# * zeus: 'zeus rspec' (requires the server to be started separately)
|
33
|
+
# * 'just' rspec: 'rspec'
|
34
|
+
|
35
|
+
guard :rspec, cmd: 'rspec' do
|
36
|
+
require 'guard/rspec/dsl'
|
37
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
38
|
+
|
39
|
+
# Feel free to open issues for suggestions and improvements
|
40
|
+
|
41
|
+
# RSpec files
|
42
|
+
rspec = dsl.rspec
|
43
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
44
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
45
|
+
watch(rspec.spec_files)
|
46
|
+
|
47
|
+
# Ruby files
|
48
|
+
ruby = dsl.ruby
|
49
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
50
|
+
end
|
data/README.md
CHANGED
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'ftpeter'
|
5
6
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +11,5 @@ require "ftpeter"
|
|
10
11
|
# require "pry"
|
11
12
|
# Pry.start
|
12
13
|
|
13
|
-
require
|
14
|
+
require 'irb'
|
14
15
|
IRB.start
|
data/exe/ftpeter
CHANGED
data/ftpeter.gemspec
CHANGED
@@ -1,24 +1,32 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require
|
4
|
+
require 'ftpeter/version'
|
4
5
|
|
5
6
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name =
|
7
|
+
spec.name = 'ftpeter'
|
7
8
|
spec.version = Ftpeter::VERSION
|
8
|
-
spec.authors = [
|
9
|
-
spec.email = [
|
9
|
+
spec.authors = ['Matthias Viehweger']
|
10
|
+
spec.email = ['kronn@kronn.de']
|
10
11
|
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
13
|
-
|
14
|
-
|
12
|
+
spec.summary = 'Deployments via FTP'
|
13
|
+
spec.description = <<-EODESC
|
14
|
+
Upload or delete files that have changed in git using lftp.
|
15
|
+
lftp supports ftp, ftps, sftp and more.
|
16
|
+
EODESC
|
17
|
+
spec.homepage = 'https://git.lanpartei.de/kronn/ftpeter'
|
18
|
+
spec.license = 'MIT'
|
15
19
|
|
16
|
-
spec.files = `git ls-files -z
|
17
|
-
|
18
|
-
|
19
|
-
spec.
|
20
|
+
spec.files = `git ls-files -z`
|
21
|
+
.split("\x0")
|
22
|
+
.reject { |f| f.match(%r~^(test|spec|features)/~) }
|
23
|
+
spec.bindir = 'exe'
|
24
|
+
spec.executables = spec.files.grep(%r~^exe/~) { |f| File.basename(f) }
|
25
|
+
spec.require_paths = ['lib']
|
20
26
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rspec'
|
30
|
+
spec.add_development_dependency 'fakefs'
|
31
|
+
spec.add_development_dependency 'rubocop'
|
24
32
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Ftpeter
|
3
|
+
module Backend
|
4
|
+
class Git
|
5
|
+
attr_reader :changes
|
6
|
+
|
7
|
+
def initialize(last)
|
8
|
+
# build up diff since last version
|
9
|
+
files = `git log #{last}... --name-status --oneline`.split("\n")
|
10
|
+
deleted = files.grep(/^[RD]/).map { |l| l.gsub(/^[RD]\s+/, '') }.uniq
|
11
|
+
changed = files.grep(/^[ACMR]/).map { |l| l.gsub(/^[ACMR]\s+/, '') }.uniq
|
12
|
+
added = files.grep(/^[A]/).map { |l| l.gsub(/^[A]\s+/, '') }.uniq
|
13
|
+
|
14
|
+
@changes = Ftpeter::Changes.new(deleted, changed, added)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/ftpeter/cli.rb
CHANGED
@@ -1,94 +1,65 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'pathname'
|
2
3
|
|
3
4
|
module Ftpeter
|
4
5
|
class CLI
|
5
6
|
def initialize(args)
|
6
|
-
raise ArgumentError,
|
7
|
+
raise ArgumentError, 'Please specify a host to deploy to' unless args[0]
|
7
8
|
|
8
9
|
@host = args[0]
|
9
|
-
@dir = args[1] ||
|
10
|
-
@last = args[2] ||
|
10
|
+
@dir = args[1] || '/' # the directory to change into
|
11
|
+
@last = args[2] || 'origin/master' # get the last deployed version
|
11
12
|
|
12
13
|
configure
|
13
14
|
end
|
14
15
|
|
16
|
+
# TODO: extract code into Connection-class
|
15
17
|
def configure
|
16
|
-
cleaned_host = if @host =~ %r
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
cleaned_host = if @host =~ %r~//~
|
19
|
+
require 'uri'
|
20
|
+
URI(@host).host
|
21
|
+
else
|
22
|
+
@host
|
23
|
+
end
|
22
24
|
|
23
25
|
@credentials = begin
|
24
26
|
`grep #{cleaned_host} ~/.netrc`.chomp
|
25
27
|
.split("\n").first
|
26
28
|
.match(/login (?<user>\S+) password (?<pass>\S+)/)
|
27
|
-
rescue NoMethodError
|
29
|
+
rescue NoMethodError
|
28
30
|
nil
|
29
31
|
end
|
30
32
|
|
31
33
|
@commands = begin
|
32
|
-
Pathname.new(
|
33
|
-
rescue Errno::ENOENT
|
34
|
+
Pathname.new('./.ftpeterrc').read.chomp
|
35
|
+
rescue Errno::ENOENT
|
34
36
|
nil
|
35
37
|
end
|
38
|
+
|
39
|
+
@connection = Ftpeter::Connection.new(
|
40
|
+
@host,
|
41
|
+
@credentials,
|
42
|
+
@dir,
|
43
|
+
@commands
|
44
|
+
)
|
36
45
|
end
|
37
46
|
|
38
47
|
def go
|
39
|
-
|
40
|
-
|
41
|
-
lftp_fn = Pathname.new("./lftp_script").expand_path
|
42
|
-
|
43
|
-
# build up diff since last version
|
44
|
-
files = `git log #{@last}... --name-status --oneline`.split("\n")
|
45
|
-
deleted = files.grep(/^[RD]/).map { |l| l.gsub(/^[RD]\s+/, "") }.uniq
|
46
|
-
changed = files.grep(/^[ACMR]/).map { |l| l.gsub(/^[ACMR]\s+/, "") }.uniq
|
47
|
-
added = files.grep(/^[A]/).map { |l| l.gsub(/^[A]\s+/, "") }.uniq
|
48
|
-
newdirs = added.map { |fn| Pathname.new(fn).dirname.to_s }.uniq.reject { |fn| fn == "." }
|
49
|
-
|
50
|
-
# lftp connection header
|
51
|
-
lftp_script << "open #{@host}"
|
52
|
-
lftp_script << "user #{@credentials["user"]} #{@credentials["pass"]}" if @credentials
|
53
|
-
lftp_script << "cd #{@dir}"
|
54
|
-
|
55
|
-
# lftp file commands
|
56
|
-
lftp_script << deleted.map do |fn|
|
57
|
-
"rm #{fn}"
|
58
|
-
end
|
59
|
-
lftp_script << newdirs.map do |fn|
|
60
|
-
"mkdir -p #{fn}"
|
61
|
-
end
|
62
|
-
lftp_script << changed.map do |fn|
|
63
|
-
"put #{fn} -o #{fn}"
|
64
|
-
end
|
65
|
-
lftp_script << @commands.split("\n").map do |cmd|
|
66
|
-
"!#{cmd}"
|
67
|
-
end if @commands
|
68
|
-
lftp_script << '!echo ""'
|
69
|
-
lftp_script << '!echo "Deployment complete"'
|
70
|
-
|
71
|
-
# write script to file
|
72
|
-
lftp_fn.open("w") do |f|
|
73
|
-
f << lftp_script.flatten.join("\n")
|
74
|
-
f << "\n"
|
75
|
-
end
|
48
|
+
changes = get_changes_from(:git)
|
49
|
+
upload = transport(changes).via(@connection, :lftp)
|
76
50
|
|
77
|
-
puts
|
78
|
-
|
79
|
-
puts "="*80
|
80
|
-
puts
|
51
|
+
$stdout.puts '=' * 80, upload.inform, '=' * 80, nil
|
52
|
+
upload.persist
|
81
53
|
|
82
54
|
if okay?
|
83
|
-
|
84
|
-
lftp_fn.delete
|
55
|
+
upload.execute and upload.cleanup
|
85
56
|
else
|
86
|
-
puts "#{
|
57
|
+
$stdout.puts "#{upload.script} is left for your editing pleasure"
|
87
58
|
end
|
88
59
|
end
|
89
60
|
|
90
|
-
def confirm(confirmation =
|
91
|
-
$stderr.print
|
61
|
+
def confirm(confirmation = 'yes')
|
62
|
+
$stderr.print '[yes, No] > '
|
92
63
|
|
93
64
|
if $stdin.gets.chomp != confirmation
|
94
65
|
raise "you did not enter '#{confirmation}', aborting"
|
@@ -98,12 +69,22 @@ module Ftpeter
|
|
98
69
|
end
|
99
70
|
|
100
71
|
def okay?
|
101
|
-
$
|
72
|
+
$stdout.puts 'is this script okay?'
|
102
73
|
begin
|
103
|
-
confirm(
|
74
|
+
confirm('yes')
|
104
75
|
rescue RuntimeError
|
105
76
|
false
|
106
77
|
end
|
107
78
|
end
|
79
|
+
|
80
|
+
def get_changes_from(vcs)
|
81
|
+
raise ArgumentError, "There's only git-support for now" unless vcs == :git
|
82
|
+
|
83
|
+
Ftpeter::Backend::Git.new(@last).changes
|
84
|
+
end
|
85
|
+
|
86
|
+
def transport(changes)
|
87
|
+
Ftpeter::Transport.new(changes)
|
88
|
+
end
|
108
89
|
end
|
109
90
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module Ftpeter
|
5
|
+
class Transport
|
6
|
+
class Lftp
|
7
|
+
attr_reader :script
|
8
|
+
|
9
|
+
def initialize(connection, changes)
|
10
|
+
@changes = changes
|
11
|
+
@lftp_script = []
|
12
|
+
@script = Pathname.new('./lftp_script').expand_path
|
13
|
+
|
14
|
+
@host = connection.host
|
15
|
+
@credentials = connection.credentials
|
16
|
+
@dir = connection.dir
|
17
|
+
@commands = connection.commands
|
18
|
+
|
19
|
+
prepare
|
20
|
+
end
|
21
|
+
|
22
|
+
def prepare
|
23
|
+
# lftp connection header
|
24
|
+
@lftp_script << "open #{@host}"
|
25
|
+
if @credentials
|
26
|
+
@lftp_script << "user #{@credentials['user']} #{@credentials['pass']}"
|
27
|
+
end
|
28
|
+
@lftp_script << "cd #{@dir}"
|
29
|
+
|
30
|
+
# lftp file commands
|
31
|
+
@lftp_script << @changes.deleted.map do |fn|
|
32
|
+
"rm #{fn}"
|
33
|
+
end
|
34
|
+
@lftp_script << @changes.newdirs.map do |fn|
|
35
|
+
"mkdir -p #{fn}"
|
36
|
+
end
|
37
|
+
@lftp_script << @changes.added.map do |fn|
|
38
|
+
"put #{fn} -o #{fn}"
|
39
|
+
end
|
40
|
+
@lftp_script << @changes.changed.map do |fn|
|
41
|
+
"put #{fn} -o #{fn}"
|
42
|
+
end
|
43
|
+
@lftp_script << @commands.split("\n").map do |cmd|
|
44
|
+
"!#{cmd}"
|
45
|
+
end if @commands
|
46
|
+
@lftp_script << '!echo ""'
|
47
|
+
@lftp_script << '!echo "Deployment complete"'
|
48
|
+
|
49
|
+
@lftp_script.flatten!.compact!
|
50
|
+
|
51
|
+
@lftp_script
|
52
|
+
end
|
53
|
+
|
54
|
+
def commands
|
55
|
+
@lftp_script
|
56
|
+
end
|
57
|
+
|
58
|
+
def inform
|
59
|
+
@lftp_script.join("\n")
|
60
|
+
end
|
61
|
+
|
62
|
+
def persist
|
63
|
+
script.open('w') do |f|
|
64
|
+
f << @lftp_script.flatten.join("\n")
|
65
|
+
f << "\n"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def execute
|
70
|
+
system("lftp -f #{script}")
|
71
|
+
end
|
72
|
+
|
73
|
+
def cleanup
|
74
|
+
script.delete
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Ftpeter
|
3
|
+
class Transport
|
4
|
+
class Unsupported < ArgumentError
|
5
|
+
def message
|
6
|
+
'There is only lftp-support for now'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
autoload :Lftp, 'ftpeter/transport/lftp'
|
11
|
+
|
12
|
+
def initialize(changes)
|
13
|
+
@changes = changes
|
14
|
+
end
|
15
|
+
|
16
|
+
def via(connection, uploader)
|
17
|
+
raise Unsupported unless uploader == :lftp
|
18
|
+
|
19
|
+
Ftpeter::Transport::Lftp.new(connection, @changes)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/ftpeter/version.rb
CHANGED
data/lib/ftpeter.rb
CHANGED
@@ -1,9 +1,17 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# TODO: check if needed here (they shouldn't be)
|
3
|
+
require 'pathname'
|
3
4
|
|
4
|
-
# TODO
|
5
|
-
# TODO extract lftp-backend to deploy files
|
6
|
-
# TODO setup help and option-parsing
|
5
|
+
# TODO: setup help and option-parsing
|
7
6
|
module Ftpeter
|
8
|
-
autoload :CLI,
|
7
|
+
autoload :CLI, 'ftpeter/cli'
|
8
|
+
autoload :VERSION, 'ftpeter/version'
|
9
|
+
|
10
|
+
# value classes
|
11
|
+
autoload :Changes, 'ftpeter/changes'
|
12
|
+
autoload :Connection, 'ftpeter/connection'
|
13
|
+
|
14
|
+
# collection of plugable components
|
15
|
+
autoload :Transport, 'ftpeter/transport'
|
16
|
+
autoload :Backend, 'ftpeter/backend'
|
9
17
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ftpeter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Viehweger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,8 +52,37 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
|
56
|
-
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: fakefs
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: |
|
84
|
+
Upload or delete files that have changed in git using lftp.
|
85
|
+
lftp supports ftp, ftps, sftp and more.
|
57
86
|
email:
|
58
87
|
- kronn@kronn.de
|
59
88
|
executables:
|
@@ -63,8 +92,13 @@ extra_rdoc_files: []
|
|
63
92
|
files:
|
64
93
|
- ".gitignore"
|
65
94
|
- ".rspec"
|
95
|
+
- ".rubocop.yml"
|
96
|
+
- ".rubocop_todo.yml"
|
97
|
+
- ".ruby-gemset"
|
98
|
+
- ".ruby-version"
|
66
99
|
- ".travis.yml"
|
67
100
|
- Gemfile
|
101
|
+
- Guardfile
|
68
102
|
- README.md
|
69
103
|
- Rakefile
|
70
104
|
- bin/console
|
@@ -72,7 +106,13 @@ files:
|
|
72
106
|
- exe/ftpeter
|
73
107
|
- ftpeter.gemspec
|
74
108
|
- lib/ftpeter.rb
|
109
|
+
- lib/ftpeter/backend.rb
|
110
|
+
- lib/ftpeter/backend/git.rb
|
111
|
+
- lib/ftpeter/changes.rb
|
75
112
|
- lib/ftpeter/cli.rb
|
113
|
+
- lib/ftpeter/connection.rb
|
114
|
+
- lib/ftpeter/transport.rb
|
115
|
+
- lib/ftpeter/transport/lftp.rb
|
76
116
|
- lib/ftpeter/version.rb
|
77
117
|
homepage: https://git.lanpartei.de/kronn/ftpeter
|
78
118
|
licenses:
|
@@ -94,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
134
|
version: '0'
|
95
135
|
requirements: []
|
96
136
|
rubyforge_project:
|
97
|
-
rubygems_version: 2.
|
137
|
+
rubygems_version: 2.5.1
|
98
138
|
signing_key:
|
99
139
|
specification_version: 4
|
100
140
|
summary: Deployments via FTP
|