wordmove 2.2.1 → 2.3.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 +1 -1
- data/README.mdown +8 -6
- data/bin/bundler +17 -0
- data/bin/byebug +17 -0
- data/bin/coderay +17 -0
- data/bin/htmldiff +17 -0
- data/bin/kwalify +17 -0
- data/bin/ldiff +17 -0
- data/bin/pry +17 -0
- data/bin/rubocop +17 -0
- data/bin/ruby-parse +17 -0
- data/bin/ruby-rewrite +17 -0
- data/bin/rumoji +17 -0
- data/bin/thor +17 -0
- data/bin/wordmove +17 -0
- data/lib/wordmove.rb +8 -0
- data/lib/wordmove/assets/wordmove_schema_global.yml +4 -0
- data/lib/wordmove/assets/wordmove_schema_local.yml +22 -0
- data/lib/wordmove/assets/wordmove_schema_remote.yml +88 -0
- data/lib/wordmove/cli.rb +5 -0
- data/lib/wordmove/deployer/base.rb +2 -22
- data/lib/wordmove/doctor.rb +68 -0
- data/lib/wordmove/doctor/movefile.rb +80 -0
- data/lib/wordmove/doctor/mysql.rb +61 -0
- data/lib/wordmove/doctor/rsync.rb +21 -0
- data/lib/wordmove/doctor/ssh.rb +21 -0
- data/lib/wordmove/doctor/wpcli.rb +21 -0
- data/lib/wordmove/logger.rb +5 -1
- data/lib/wordmove/movefile.rb +40 -0
- data/lib/wordmove/sql_adapter/default.rb +1 -1
- data/lib/wordmove/version.rb +1 -1
- data/wordmove.gemspec +6 -5
- metadata +72 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74eb302bd31e07710d405885e8a6bdcc5a038334
|
4
|
+
data.tar.gz: db2cd9c305231c49d29d7f907f4e98020a3f3f5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36c47235b3f558e184e1650d02f79c6dee5d5da9f177fea5fb9a21f3594bfcba12d6ec9685132586505ba12d6c55d4c9ae6a9442374e6bc861fce04653a815e6
|
7
|
+
data.tar.gz: b6df4544d36d308d53c3b38fa129206b1d774be301154ea1440f6aac9739bb4d5d7dc50dc5cd26b1b61cf6a0bf5d12dc45be2aa8aac48b665c50dceb237b4e86
|
data/.rubocop.yml
CHANGED
data/README.mdown
CHANGED
@@ -39,11 +39,13 @@ Wordmove just acts as automation glue bewtween tools you already have and love.
|
|
39
39
|
|
40
40
|
```
|
41
41
|
> wordmove help
|
42
|
-
|
43
|
-
wordmove
|
44
|
-
wordmove
|
45
|
-
wordmove
|
46
|
-
wordmove
|
42
|
+
Commands:
|
43
|
+
wordmove --version, -v # Print the version
|
44
|
+
wordmove doctor # Do some local configuration and environment checks
|
45
|
+
wordmove help [TASK] # Describe available tasks or one specific task
|
46
|
+
wordmove init # Generates a brand new movefile.yml
|
47
|
+
wordmove pull # Pulls WP data from remote host to the local machine
|
48
|
+
wordmove push # Pushes WP data from local machine to remote host
|
47
49
|
```
|
48
50
|
|
49
51
|
Move inside the Wordpress folder and use `wordmove init` to generate a new `movefile.yml` and edit it with your settings. Read the next paragraph for more info.
|
@@ -194,7 +196,7 @@ made with ❤️ and ☕️ by [weLaika](http://dev.welaika.com)
|
|
194
196
|
|
195
197
|
(The MIT License)
|
196
198
|
|
197
|
-
Copyright © 2013-
|
199
|
+
Copyright © 2013-2018 weLaika
|
198
200
|
|
199
201
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
200
202
|
this software and associated documentation files (the ‘Software’), to deal in
|
data/bin/bundler
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'bundler' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("bundler", "bundler")
|
data/bin/byebug
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'byebug' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("byebug", "byebug")
|
data/bin/coderay
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'coderay' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("coderay", "coderay")
|
data/bin/htmldiff
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'htmldiff' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("diff-lcs", "htmldiff")
|
data/bin/kwalify
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'kwalify' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("kwalify", "kwalify")
|
data/bin/ldiff
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'ldiff' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("diff-lcs", "ldiff")
|
data/bin/pry
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'pry' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("pry", "pry")
|
data/bin/rubocop
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'rubocop' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("rubocop", "rubocop")
|
data/bin/ruby-parse
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'ruby-parse' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("parser", "ruby-parse")
|
data/bin/ruby-rewrite
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'ruby-rewrite' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("parser", "ruby-rewrite")
|
data/bin/rumoji
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'rumoji' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("rumoji", "rumoji")
|
data/bin/thor
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'thor' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("thor", "thor")
|
data/bin/wordmove
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'wordmove' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("wordmove", "wordmove")
|
data/lib/wordmove.rb
CHANGED
@@ -10,12 +10,20 @@ require 'erb'
|
|
10
10
|
require 'open-uri'
|
11
11
|
require 'active_support'
|
12
12
|
require 'active_support/core_ext'
|
13
|
+
require 'kwalify'
|
13
14
|
|
14
15
|
require 'photocopier'
|
15
16
|
|
16
17
|
require 'wordmove/exceptions'
|
17
18
|
require 'wordmove/cli'
|
19
|
+
require 'wordmove/doctor'
|
20
|
+
require 'wordmove/doctor/movefile'
|
21
|
+
require 'wordmove/doctor/mysql'
|
22
|
+
require 'wordmove/doctor/wpcli'
|
23
|
+
require 'wordmove/doctor/rsync'
|
24
|
+
require 'wordmove/doctor/ssh'
|
18
25
|
require 'wordmove/logger'
|
26
|
+
require 'wordmove/movefile'
|
19
27
|
require 'wordmove/sql_adapter/default'
|
20
28
|
require 'wordmove/sql_adapter/wpcli'
|
21
29
|
require "wordmove/version"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
type: map
|
2
|
+
mapping:
|
3
|
+
vhost:
|
4
|
+
pattern: /^http:\/\//
|
5
|
+
wordpress_path:
|
6
|
+
database:
|
7
|
+
type: map
|
8
|
+
mapping:
|
9
|
+
name:
|
10
|
+
required: true
|
11
|
+
user:
|
12
|
+
required: true
|
13
|
+
password:
|
14
|
+
required: true
|
15
|
+
host:
|
16
|
+
required: true
|
17
|
+
mysqldump_options:
|
18
|
+
required: false
|
19
|
+
port:
|
20
|
+
required: false
|
21
|
+
charset:
|
22
|
+
required: false
|
@@ -0,0 +1,88 @@
|
|
1
|
+
type: map
|
2
|
+
mapping:
|
3
|
+
vhost:
|
4
|
+
type: str
|
5
|
+
pattern: /^http:\/\//
|
6
|
+
required: true
|
7
|
+
wordpress_path:
|
8
|
+
type: str
|
9
|
+
required: true
|
10
|
+
wordpress_absolute_path:
|
11
|
+
type: str
|
12
|
+
required: false
|
13
|
+
database:
|
14
|
+
type: map
|
15
|
+
required: true
|
16
|
+
mapping:
|
17
|
+
name:
|
18
|
+
type: str
|
19
|
+
required: true
|
20
|
+
user:
|
21
|
+
type: str
|
22
|
+
required: true
|
23
|
+
password:
|
24
|
+
type: str
|
25
|
+
required: true
|
26
|
+
host:
|
27
|
+
type: str
|
28
|
+
required: true
|
29
|
+
mysqldump_options:
|
30
|
+
type: str
|
31
|
+
required: false
|
32
|
+
port:
|
33
|
+
type: str
|
34
|
+
required: false
|
35
|
+
charset:
|
36
|
+
type: str
|
37
|
+
required: false
|
38
|
+
exclude:
|
39
|
+
type: seq
|
40
|
+
required: false
|
41
|
+
sequence:
|
42
|
+
- type: str
|
43
|
+
paths:
|
44
|
+
type: map
|
45
|
+
required: false
|
46
|
+
mapping:
|
47
|
+
wp_content:
|
48
|
+
wp_config:
|
49
|
+
uploads:
|
50
|
+
plugins:
|
51
|
+
mu_plugins:
|
52
|
+
themes:
|
53
|
+
languages:
|
54
|
+
ssh:
|
55
|
+
type: map
|
56
|
+
required: false
|
57
|
+
mapping:
|
58
|
+
host:
|
59
|
+
required: true
|
60
|
+
user:
|
61
|
+
required: false # If host is configured in ~/.ssh/config
|
62
|
+
password:
|
63
|
+
required: false
|
64
|
+
port:
|
65
|
+
type: int
|
66
|
+
rsync_options:
|
67
|
+
gateway:
|
68
|
+
type: map
|
69
|
+
required: false
|
70
|
+
mapping:
|
71
|
+
host:
|
72
|
+
required: true
|
73
|
+
user:
|
74
|
+
required: true
|
75
|
+
password:
|
76
|
+
ftp:
|
77
|
+
type: map
|
78
|
+
required: false
|
79
|
+
mapping:
|
80
|
+
user:
|
81
|
+
required: true
|
82
|
+
password:
|
83
|
+
required: true
|
84
|
+
host:
|
85
|
+
required: true
|
86
|
+
passive:
|
87
|
+
type: bool
|
88
|
+
scheme:
|
data/lib/wordmove/cli.rb
CHANGED
@@ -12,6 +12,11 @@ module Wordmove
|
|
12
12
|
Wordmove::Generators::Movefile.start
|
13
13
|
end
|
14
14
|
|
15
|
+
desc "doctor", "Do some local configuration and environment checks"
|
16
|
+
def doctor
|
17
|
+
Wordmove::Doctor.start
|
18
|
+
end
|
19
|
+
|
15
20
|
shared_options = {
|
16
21
|
wordpress: { aliases: "-w", type: :boolean },
|
17
22
|
uploads: { aliases: "-u", type: :boolean },
|
@@ -37,34 +37,14 @@ module Wordmove
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def fetch_movefile(name = nil, start_dir = current_dir)
|
40
|
-
|
41
|
-
|
42
|
-
else
|
43
|
-
Dir["#{File.join(start_dir, name)}{,.yml,.yaml}"]
|
44
|
-
end
|
45
|
-
|
46
|
-
if entries.empty?
|
47
|
-
raise MovefileNotFound, "Could not find a valid Movefile" if last_dir?(start_dir)
|
48
|
-
return fetch_movefile(name, upper_dir(start_dir))
|
49
|
-
end
|
50
|
-
|
51
|
-
found = entries.first
|
52
|
-
logger.task("Using Movefile: #{found}")
|
53
|
-
YAML.safe_load(ERB.new(File.read(found)).result, [], [], true)
|
40
|
+
movefile = Wordmove::Movefile.new
|
41
|
+
movefile.fetch name, start_dir
|
54
42
|
end
|
55
43
|
|
56
44
|
def current_dir
|
57
45
|
'.'
|
58
46
|
end
|
59
47
|
|
60
|
-
def last_dir?(directory)
|
61
|
-
directory == "/" || File.exist?(File.join(directory, 'wp-config.php'))
|
62
|
-
end
|
63
|
-
|
64
|
-
def upper_dir(directory)
|
65
|
-
File.expand_path(File.join(directory, '..'))
|
66
|
-
end
|
67
|
-
|
68
48
|
def logger
|
69
49
|
Logger.new(STDOUT).tap { |l| l.level = Logger::DEBUG }
|
70
50
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Wordmove
|
2
|
+
class Doctor
|
3
|
+
def self.start
|
4
|
+
banner
|
5
|
+
movefile
|
6
|
+
mysql
|
7
|
+
wpcli
|
8
|
+
rsync
|
9
|
+
ssh
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.movefile
|
13
|
+
movefile_doctor = Wordmove::Doctor::Movefile.new
|
14
|
+
movefile_doctor.validate!
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.mysql
|
18
|
+
mysql_doctor = Wordmove::Doctor::Mysql.new
|
19
|
+
mysql_doctor.check!
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.wpcli
|
23
|
+
wpcli_doctor = Wordmove::Doctor::Wpcli.new
|
24
|
+
wpcli_doctor.check!
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.rsync
|
28
|
+
rsync_doctor = Wordmove::Doctor::Rsync.new
|
29
|
+
rsync_doctor.check!
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.ssh
|
33
|
+
ssh_doctor = Wordmove::Doctor::Ssh.new
|
34
|
+
ssh_doctor.check!
|
35
|
+
end
|
36
|
+
|
37
|
+
# rubocop:disable Metrics/MethodLength
|
38
|
+
def self.banner
|
39
|
+
paint = <<-'ASCII'
|
40
|
+
.------------------------.
|
41
|
+
| PSYCHIATRIC |
|
42
|
+
| HELP 5¢ |
|
43
|
+
|________________________|
|
44
|
+
|| .-"""--. ||
|
45
|
+
|| / \.-. ||
|
46
|
+
|| | ._, \ ||
|
47
|
+
|| \_/`-' '-.,_/ ||
|
48
|
+
|| (_ (' _)') \ ||
|
49
|
+
|| /| |\ ||
|
50
|
+
|| | \ __ / | ||
|
51
|
+
|| \_).,_____,/}/ ||
|
52
|
+
__||____;_--'___'/ ( ||
|
53
|
+
|\ || (__,\\ \_/------||
|
54
|
+
||\||______________________||
|
55
|
+
|||| |
|
56
|
+
|||| THE DOCTOR |
|
57
|
+
\||| IS [IN] _____|
|
58
|
+
\|| (______)
|
59
|
+
`|___________________//||\\
|
60
|
+
//=||=\\
|
61
|
+
` `` `
|
62
|
+
ASCII
|
63
|
+
|
64
|
+
puts paint
|
65
|
+
end
|
66
|
+
# rubocop:enable Metrics/MethodLength
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Wordmove
|
2
|
+
class Doctor
|
3
|
+
class Movefile
|
4
|
+
MANDATORY_SECTIONS = %w[global local].freeze
|
5
|
+
attr_reader :movefile, :contents, :root_keys
|
6
|
+
|
7
|
+
def initialize(name = nil, dir = '.')
|
8
|
+
@movefile = Wordmove::Movefile.new
|
9
|
+
@contents = movefile.fetch(name, dir)
|
10
|
+
@root_keys = contents.keys
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate!
|
14
|
+
MANDATORY_SECTIONS.each do |key|
|
15
|
+
movefile.logger.task "Validating movefile section: #{key}"
|
16
|
+
validate_mandatory_section(key)
|
17
|
+
end
|
18
|
+
|
19
|
+
root_keys.each do |remote|
|
20
|
+
movefile.logger.task "Validating movefile section: #{remote}"
|
21
|
+
validate_remote_section(remote)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def validate_section(key)
|
28
|
+
validator = validator_for(key)
|
29
|
+
|
30
|
+
errors = validator.validate(contents[key])
|
31
|
+
|
32
|
+
if errors&.empty?
|
33
|
+
movefile.logger.success "Formal validation passed"
|
34
|
+
|
35
|
+
return true
|
36
|
+
end
|
37
|
+
|
38
|
+
errors.each do |e|
|
39
|
+
movefile.logger.error "[#{e.path}] #{e.message}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def validate_mandatory_section(key)
|
44
|
+
return false unless root_keys.delete(key) do
|
45
|
+
movefile.logger.error "#{key} section not present"
|
46
|
+
|
47
|
+
false
|
48
|
+
end
|
49
|
+
|
50
|
+
validate_section(key)
|
51
|
+
end
|
52
|
+
|
53
|
+
def validate_remote_section(key)
|
54
|
+
return false unless validate_protocol_presence(contents[key].keys)
|
55
|
+
|
56
|
+
validate_section(key)
|
57
|
+
end
|
58
|
+
|
59
|
+
def validate_protocol_presence(keys)
|
60
|
+
return true if keys.include?('ssh') || keys.include?('ftp')
|
61
|
+
|
62
|
+
movefile.logger.error "This remote has not ssh nor ftp protocol defined"
|
63
|
+
|
64
|
+
false
|
65
|
+
end
|
66
|
+
|
67
|
+
def validator_for(key)
|
68
|
+
suffix = if MANDATORY_SECTIONS.include? key
|
69
|
+
key
|
70
|
+
else
|
71
|
+
'remote'
|
72
|
+
end
|
73
|
+
|
74
|
+
schema = Kwalify::Yaml.load_file("#{__dir__}/../assets/wordmove_schema_#{suffix}.yml")
|
75
|
+
|
76
|
+
Kwalify::Validator.new(schema)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Wordmove
|
2
|
+
class Doctor
|
3
|
+
class Mysql
|
4
|
+
attr_reader :config, :logger
|
5
|
+
|
6
|
+
def initialize(movefile_name = nil, movefile_dir = '.')
|
7
|
+
@config = Wordmove::Movefile.new.fetch(movefile_name, movefile_dir)["local"]["database"]
|
8
|
+
@logger = Logger.new(STDOUT).tap { |l| l.level = Logger::INFO }
|
9
|
+
end
|
10
|
+
|
11
|
+
def check!
|
12
|
+
logger.task "Checking local database commands and connection"
|
13
|
+
|
14
|
+
mysql_client_doctor
|
15
|
+
mysqldump_doctor
|
16
|
+
mysql_server_doctor
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def mysql_client_doctor
|
22
|
+
if system("which mysql", out: File::NULL)
|
23
|
+
logger.success "`mysql` command is in $PATH"
|
24
|
+
else
|
25
|
+
logger.error "`mysql` command is not in $PATH"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def mysqldump_doctor
|
30
|
+
if system("which mysqldump", out: File::NULL)
|
31
|
+
logger.success "`mysqldump` command is in $PATH"
|
32
|
+
else
|
33
|
+
logger.error "`mysqldump` command is not in $PATH"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def mysql_server_doctor
|
38
|
+
command = ["mysql"]
|
39
|
+
command << "-u #{config['user']}"
|
40
|
+
command << "-p#{config['password']}" unless config['password'].blank?
|
41
|
+
command << "-h #{config['host']}"
|
42
|
+
command << "-e'QUIT'"
|
43
|
+
command = command.join(" ")
|
44
|
+
|
45
|
+
if system(command, out: File::NULL, err: File::NULL)
|
46
|
+
logger.success "Successfully connected to the database"
|
47
|
+
else
|
48
|
+
logger.error <<~LONG
|
49
|
+
We can't connect to the database using credentials
|
50
|
+
specified in the Movefile. Double check them or try
|
51
|
+
to debug your system configuration.
|
52
|
+
|
53
|
+
The command used to test was:
|
54
|
+
|
55
|
+
#{command}
|
56
|
+
LONG
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Wordmove
|
2
|
+
class Doctor
|
3
|
+
class Rsync
|
4
|
+
attr_reader :logger
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@logger = Logger.new(STDOUT).tap { |l| l.level = Logger::INFO }
|
8
|
+
end
|
9
|
+
|
10
|
+
def check!
|
11
|
+
logger.task "Checking rsync"
|
12
|
+
|
13
|
+
if (version = /\d\.\d.\d/.match(`rsync --version | head -n1`)[0])
|
14
|
+
logger.success "rsync is installed at version #{version}"
|
15
|
+
else
|
16
|
+
logger.error "rsync not found. And belive me: it's really strange it's not there."
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Wordmove
|
2
|
+
class Doctor
|
3
|
+
class Ssh
|
4
|
+
attr_reader :logger
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@logger = Logger.new(STDOUT).tap { |l| l.level = Logger::INFO }
|
8
|
+
end
|
9
|
+
|
10
|
+
def check!
|
11
|
+
logger.task "Checking SSH client"
|
12
|
+
|
13
|
+
if system('which ssh', out: File::NULL, err: File::NULL)
|
14
|
+
logger.success "SSH command found"
|
15
|
+
else
|
16
|
+
logger.error "SSH command not found. And belive me: it's really strange it's not there."
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Wordmove
|
2
|
+
class Doctor
|
3
|
+
class Wpcli
|
4
|
+
attr_reader :logger
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@logger = Logger.new(STDOUT).tap { |l| l.level = Logger::INFO }
|
8
|
+
end
|
9
|
+
|
10
|
+
def check!
|
11
|
+
logger.task "Checking local wp-cli installation"
|
12
|
+
|
13
|
+
if system('wp cli check-update --quiet')
|
14
|
+
logger.success "wp-cli is correctly installed and up to date"
|
15
|
+
else
|
16
|
+
logger.error "wp-cli is not installed (or not in your $PATH) or not up to date"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/wordmove/logger.rb
CHANGED
@@ -22,6 +22,10 @@ module Wordmove
|
|
22
22
|
puts " error".red + " | ".black + message.to_s
|
23
23
|
end
|
24
24
|
|
25
|
+
def success(message)
|
26
|
+
puts " success".green + " | ".black + message.to_s
|
27
|
+
end
|
28
|
+
|
25
29
|
def debug(message)
|
26
30
|
puts " debug".magenta + " | ".black + message.to_s
|
27
31
|
end
|
@@ -30,7 +34,7 @@ module Wordmove
|
|
30
34
|
|
31
35
|
def padding_length(line)
|
32
36
|
result = MAX_LINE - line.length
|
33
|
-
result
|
37
|
+
result.positive? ? result : 0
|
34
38
|
end
|
35
39
|
end
|
36
40
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Wordmove
|
2
|
+
class Movefile
|
3
|
+
attr_reader :logger
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@logger = Logger.new(STDOUT).tap { |l| l.level = Logger::DEBUG }
|
7
|
+
end
|
8
|
+
|
9
|
+
def fetch(name = nil, start_dir = current_dir)
|
10
|
+
entries = if name.nil?
|
11
|
+
Dir["#{File.join(start_dir, '{M,m}ovefile')}{,.yml,.yaml}"]
|
12
|
+
else
|
13
|
+
Dir["#{File.join(start_dir, name)}{,.yml,.yaml}"]
|
14
|
+
end
|
15
|
+
|
16
|
+
if entries.empty?
|
17
|
+
raise MovefileNotFound, "Could not find a valid Movefile" if last_dir?(start_dir)
|
18
|
+
return fetch(name, upper_dir(start_dir))
|
19
|
+
end
|
20
|
+
|
21
|
+
found = entries.first
|
22
|
+
logger.task("Using Movefile: #{found}")
|
23
|
+
YAML.safe_load(ERB.new(File.read(found)).result, [], [], true)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def last_dir?(directory)
|
29
|
+
directory == "/" || File.exist?(File.join(directory, 'wp-config.php'))
|
30
|
+
end
|
31
|
+
|
32
|
+
def upper_dir(directory)
|
33
|
+
File.expand_path(File.join(directory, '..'))
|
34
|
+
end
|
35
|
+
|
36
|
+
def current_dir
|
37
|
+
'.'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/wordmove/version.rb
CHANGED
data/wordmove.gemspec
CHANGED
@@ -29,20 +29,21 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
|
-
spec.add_runtime_dependency "colorize", "~> 0.8.1"
|
33
|
-
spec.add_runtime_dependency "thor", "~> 0.19.4"
|
34
32
|
spec.add_runtime_dependency "activesupport", '~> 5.1', '>= 5.1.1'
|
33
|
+
spec.add_runtime_dependency "colorize", "~> 0.8.1"
|
34
|
+
spec.add_runtime_dependency "kwalify", "~> 0"
|
35
35
|
spec.add_runtime_dependency "photocopier", "~> 1.1", ">= 1.1.3"
|
36
|
+
spec.add_runtime_dependency "thor", "~> 0.19.4"
|
36
37
|
|
37
38
|
spec.required_ruby_version = "~> 2.4.0"
|
38
39
|
|
39
40
|
spec.add_development_dependency "bundler", "~> 1.14", ">= 1.14.6"
|
41
|
+
spec.add_development_dependency "priscilla", "~> 1.0"
|
42
|
+
spec.add_development_dependency "pry-byebug", "~> 3.1"
|
40
43
|
spec.add_development_dependency "rake", "~> 10.0"
|
41
44
|
spec.add_development_dependency "rspec", "~> 3.3"
|
45
|
+
spec.add_development_dependency "rubocop", "~> 0.51.0"
|
42
46
|
spec.add_development_dependency "simplecov", "~> 0.9"
|
43
|
-
spec.add_development_dependency "pry-byebug", "~> 3.1"
|
44
|
-
spec.add_development_dependency "priscilla", "~> 1.0"
|
45
|
-
spec.add_development_dependency "rubocop", "~> 0.49.0"
|
46
47
|
|
47
48
|
spec.post_install_message = <<-RAINBOW
|
48
49
|
Starting from 2.1.0 you'll need to add the global section in your movefile.yml:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wordmove
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefano Verna
|
@@ -12,56 +12,56 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: exe
|
14
14
|
cert_chain: []
|
15
|
-
date: 2017-
|
15
|
+
date: 2017-12-09 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
|
-
name:
|
18
|
+
name: activesupport
|
19
19
|
requirement: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - "~>"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: '5.1'
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 5.1.1
|
24
27
|
type: :runtime
|
25
28
|
prerelease: false
|
26
29
|
version_requirements: !ruby/object:Gem::Requirement
|
27
30
|
requirements:
|
28
31
|
- - "~>"
|
29
32
|
- !ruby/object:Gem::Version
|
30
|
-
version:
|
33
|
+
version: '5.1'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 5.1.1
|
31
37
|
- !ruby/object:Gem::Dependency
|
32
|
-
name:
|
38
|
+
name: colorize
|
33
39
|
requirement: !ruby/object:Gem::Requirement
|
34
40
|
requirements:
|
35
41
|
- - "~>"
|
36
42
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.
|
43
|
+
version: 0.8.1
|
38
44
|
type: :runtime
|
39
45
|
prerelease: false
|
40
46
|
version_requirements: !ruby/object:Gem::Requirement
|
41
47
|
requirements:
|
42
48
|
- - "~>"
|
43
49
|
- !ruby/object:Gem::Version
|
44
|
-
version: 0.
|
50
|
+
version: 0.8.1
|
45
51
|
- !ruby/object:Gem::Dependency
|
46
|
-
name:
|
52
|
+
name: kwalify
|
47
53
|
requirement: !ruby/object:Gem::Requirement
|
48
54
|
requirements:
|
49
55
|
- - "~>"
|
50
56
|
- !ruby/object:Gem::Version
|
51
|
-
version: '
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 5.1.1
|
57
|
+
version: '0'
|
55
58
|
type: :runtime
|
56
59
|
prerelease: false
|
57
60
|
version_requirements: !ruby/object:Gem::Requirement
|
58
61
|
requirements:
|
59
62
|
- - "~>"
|
60
63
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: 5.1.1
|
64
|
+
version: '0'
|
65
65
|
- !ruby/object:Gem::Dependency
|
66
66
|
name: photocopier
|
67
67
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,6 +82,20 @@ dependencies:
|
|
82
82
|
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: 1.1.3
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: thor
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: 0.19.4
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.19.4
|
85
99
|
- !ruby/object:Gem::Dependency
|
86
100
|
name: bundler
|
87
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,89 +117,89 @@ dependencies:
|
|
103
117
|
- !ruby/object:Gem::Version
|
104
118
|
version: 1.14.6
|
105
119
|
- !ruby/object:Gem::Dependency
|
106
|
-
name:
|
120
|
+
name: priscilla
|
107
121
|
requirement: !ruby/object:Gem::Requirement
|
108
122
|
requirements:
|
109
123
|
- - "~>"
|
110
124
|
- !ruby/object:Gem::Version
|
111
|
-
version: '
|
125
|
+
version: '1.0'
|
112
126
|
type: :development
|
113
127
|
prerelease: false
|
114
128
|
version_requirements: !ruby/object:Gem::Requirement
|
115
129
|
requirements:
|
116
130
|
- - "~>"
|
117
131
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
132
|
+
version: '1.0'
|
119
133
|
- !ruby/object:Gem::Dependency
|
120
|
-
name:
|
134
|
+
name: pry-byebug
|
121
135
|
requirement: !ruby/object:Gem::Requirement
|
122
136
|
requirements:
|
123
137
|
- - "~>"
|
124
138
|
- !ruby/object:Gem::Version
|
125
|
-
version: '3.
|
139
|
+
version: '3.1'
|
126
140
|
type: :development
|
127
141
|
prerelease: false
|
128
142
|
version_requirements: !ruby/object:Gem::Requirement
|
129
143
|
requirements:
|
130
144
|
- - "~>"
|
131
145
|
- !ruby/object:Gem::Version
|
132
|
-
version: '3.
|
146
|
+
version: '3.1'
|
133
147
|
- !ruby/object:Gem::Dependency
|
134
|
-
name:
|
148
|
+
name: rake
|
135
149
|
requirement: !ruby/object:Gem::Requirement
|
136
150
|
requirements:
|
137
151
|
- - "~>"
|
138
152
|
- !ruby/object:Gem::Version
|
139
|
-
version: '0
|
153
|
+
version: '10.0'
|
140
154
|
type: :development
|
141
155
|
prerelease: false
|
142
156
|
version_requirements: !ruby/object:Gem::Requirement
|
143
157
|
requirements:
|
144
158
|
- - "~>"
|
145
159
|
- !ruby/object:Gem::Version
|
146
|
-
version: '0
|
160
|
+
version: '10.0'
|
147
161
|
- !ruby/object:Gem::Dependency
|
148
|
-
name:
|
162
|
+
name: rspec
|
149
163
|
requirement: !ruby/object:Gem::Requirement
|
150
164
|
requirements:
|
151
165
|
- - "~>"
|
152
166
|
- !ruby/object:Gem::Version
|
153
|
-
version: '3.
|
167
|
+
version: '3.3'
|
154
168
|
type: :development
|
155
169
|
prerelease: false
|
156
170
|
version_requirements: !ruby/object:Gem::Requirement
|
157
171
|
requirements:
|
158
172
|
- - "~>"
|
159
173
|
- !ruby/object:Gem::Version
|
160
|
-
version: '3.
|
174
|
+
version: '3.3'
|
161
175
|
- !ruby/object:Gem::Dependency
|
162
|
-
name:
|
176
|
+
name: rubocop
|
163
177
|
requirement: !ruby/object:Gem::Requirement
|
164
178
|
requirements:
|
165
179
|
- - "~>"
|
166
180
|
- !ruby/object:Gem::Version
|
167
|
-
version:
|
181
|
+
version: 0.51.0
|
168
182
|
type: :development
|
169
183
|
prerelease: false
|
170
184
|
version_requirements: !ruby/object:Gem::Requirement
|
171
185
|
requirements:
|
172
186
|
- - "~>"
|
173
187
|
- !ruby/object:Gem::Version
|
174
|
-
version:
|
188
|
+
version: 0.51.0
|
175
189
|
- !ruby/object:Gem::Dependency
|
176
|
-
name:
|
190
|
+
name: simplecov
|
177
191
|
requirement: !ruby/object:Gem::Requirement
|
178
192
|
requirements:
|
179
193
|
- - "~>"
|
180
194
|
- !ruby/object:Gem::Version
|
181
|
-
version: 0.
|
195
|
+
version: '0.9'
|
182
196
|
type: :development
|
183
197
|
prerelease: false
|
184
198
|
version_requirements: !ruby/object:Gem::Requirement
|
185
199
|
requirements:
|
186
200
|
- - "~>"
|
187
201
|
- !ruby/object:Gem::Version
|
188
|
-
version: 0.
|
202
|
+
version: '0.9'
|
189
203
|
description: Wordmove deploys your WordPress websites at the speed of light.
|
190
204
|
email:
|
191
205
|
- stefano.verna@welaika.com
|
@@ -210,25 +224,48 @@ files:
|
|
210
224
|
- README.mdown
|
211
225
|
- Rakefile
|
212
226
|
- assets/images/wordmove.png
|
227
|
+
- bin/bundler
|
228
|
+
- bin/byebug
|
229
|
+
- bin/coderay
|
213
230
|
- bin/console
|
231
|
+
- bin/htmldiff
|
232
|
+
- bin/kwalify
|
233
|
+
- bin/ldiff
|
234
|
+
- bin/pry
|
214
235
|
- bin/rake
|
215
236
|
- bin/rspec
|
237
|
+
- bin/rubocop
|
238
|
+
- bin/ruby-parse
|
239
|
+
- bin/ruby-rewrite
|
240
|
+
- bin/rumoji
|
216
241
|
- bin/setup
|
242
|
+
- bin/thor
|
243
|
+
- bin/wordmove
|
217
244
|
- exe/wordmove
|
218
245
|
- lib/wordmove.rb
|
219
246
|
- lib/wordmove/assets/dump.php.erb
|
220
247
|
- lib/wordmove/assets/import.php.erb
|
248
|
+
- lib/wordmove/assets/wordmove_schema_global.yml
|
249
|
+
- lib/wordmove/assets/wordmove_schema_local.yml
|
250
|
+
- lib/wordmove/assets/wordmove_schema_remote.yml
|
221
251
|
- lib/wordmove/cli.rb
|
222
252
|
- lib/wordmove/deployer/base.rb
|
223
253
|
- lib/wordmove/deployer/ftp.rb
|
224
254
|
- lib/wordmove/deployer/ssh.rb
|
225
255
|
- lib/wordmove/deployer/ssh/default_sql_adapter.rb
|
226
256
|
- lib/wordmove/deployer/ssh/wpcli_sql_adapter.rb
|
257
|
+
- lib/wordmove/doctor.rb
|
258
|
+
- lib/wordmove/doctor/movefile.rb
|
259
|
+
- lib/wordmove/doctor/mysql.rb
|
260
|
+
- lib/wordmove/doctor/rsync.rb
|
261
|
+
- lib/wordmove/doctor/ssh.rb
|
262
|
+
- lib/wordmove/doctor/wpcli.rb
|
227
263
|
- lib/wordmove/exceptions.rb
|
228
264
|
- lib/wordmove/generators/movefile.rb
|
229
265
|
- lib/wordmove/generators/movefile.yml
|
230
266
|
- lib/wordmove/generators/movefile_adapter.rb
|
231
267
|
- lib/wordmove/logger.rb
|
268
|
+
- lib/wordmove/movefile.rb
|
232
269
|
- lib/wordmove/sql_adapter/default.rb
|
233
270
|
- lib/wordmove/sql_adapter/wpcli.rb
|
234
271
|
- lib/wordmove/version.rb
|