ftpeter 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|