techinform 1.5.0 → 1.5.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9174fa203b317bd3390af41c7f3de5469e17befaf4c7ae5d9c16961042929ab0
4
- data.tar.gz: 5f1f5b33897089fe4265f1b9ffc2e3f9cb2bb933c634f49654c3f28abc655223
3
+ metadata.gz: 377409d470d19efcfd9028db6bdefa2071403ac78f60e2b56f67550520eb305c
4
+ data.tar.gz: 30a08875950a5c865e51bc72d9c6decc346374caf6f94253147ec50e9d640e66
5
5
  SHA512:
6
- metadata.gz: 778e984a1f3d2fc5dc170e4f90673edf160367a71df26b5aa756b8aa72f7aee85a8646cba2bf10021676d8b6ecf2b9e5b08301ebd488b8ca7603288ba238a1f8
7
- data.tar.gz: 6d9ad5c8d8c8fa02a90f7907c3c14557201b7b88e48b3347ca1c81adc29aee36a74a4f9401f7388f1b3fb848d89ddb306002350a236b1467a3fcafdf70a788bf
6
+ metadata.gz: 73a5ca1881758fee223838342fc950b73a4c328b81ff504d273f4d240ec823cb071f5d412589c0542f99b2241704745a0c3ef9c9cca9d4420073a388153d5254
7
+ data.tar.gz: 4f0253a7eaf1d62c88d3bbee508eb3a98f226931545fed400026b0be7968574db8d470b709117eb8525866f89f26955482707cb574f2a9cc508929df8cdb2e23
@@ -1,4 +1,9 @@
1
1
 
2
+ ### 1.5.1
3
+
4
+ - Use parallel version of bzip2 - lbzip2 - if installed
5
+ - Use DBUSER environment variable as database user insted of USER
6
+
2
7
  ### 1.5.0
3
8
 
4
9
  Change progress display - now correctly shows percents
data/README.md CHANGED
@@ -17,7 +17,7 @@ Install gem yourself as:
17
17
 
18
18
  * mysqldump - for mysql database dumps
19
19
  * gpg2 - backup encryption support
20
- * bzip2 - backup compression support
20
+ * bzip2 - backup compression support (prefer lbzip2 if installed)
21
21
  * rsync - syncing backups
22
22
 
23
23
  ## Configuration
@@ -1,6 +1,7 @@
1
1
  require 'date'
2
2
  require_relative '../techinform/defaults'
3
3
  require 'highline'
4
+ require 'bzip2_selector'
4
5
 
5
6
  class Backup
6
7
  attr_reader :dry_run, :quiet
@@ -60,7 +61,7 @@ class Backup
60
61
  if encrypt?
61
62
  "| gpg2 --encrypt #{"--compress-algo=bzip2" if compress?} --recipient=#{ENV['GPGKEY']}"
62
63
  else
63
- "| bzip2" if compress?
64
+ "| #{bzip2}" if compress?
64
65
  end
65
66
  end
66
67
 
@@ -5,7 +5,7 @@ class DbBackup < Backup
5
5
 
6
6
  def initialize user: nil, database: nil, password: nil, compress: true, host: nil, encrypt: nil
7
7
  super compress: compress, encrypt: encrypt
8
- user = ENV['USER'] if user.nil?
8
+ user = ENV['DBUSER'] if user.nil?
9
9
  password = ENV['PASSWORD'] if password.nil?
10
10
  @password, @user, @database, @host = password, user, database, host
11
11
  ensure_path unless database.nil?
@@ -0,0 +1,7 @@
1
+ def bzip2
2
+ @bzip2 ||= (system('which lbzip2 > /dev/null') ? 'lbzip2' : 'bzip2')
3
+ end
4
+
5
+ def bunzip2
6
+ @bunzip2 ||= (system('which lbunzip2 > /dev/null') ? 'lbunzip2' : 'bunzip2')
7
+ end
@@ -2,12 +2,15 @@ require 'techinform/version'
2
2
  require 'techinform/projects'
3
3
  require_relative 'techinform/backup'
4
4
  require 'thor'
5
+ require 'bzip2_selector'
6
+
5
7
 
6
8
  module Techinform
7
9
  class CLI < Thor
8
10
  desc 'restore [type] [absolute_filename or database to select file] [dbname]', 'Restore database from backup; if no absolute filename given, will present select menu to choose file'
9
- def restore(type, filename, dbname, just_decrypt = false)
11
+ def restore(type, filename, dbname = nil, just_decrypt = false)
10
12
  require 'highline'
13
+ dbname = filename if dbname.nil?
11
14
  if !File.exist?(filename)
12
15
  cli = HighLine.new
13
16
  path = type == 'pg' ? PostgreBackup.new(database: filename).restore_path : MysqlBackup.new(database: filename).restore_path
@@ -15,28 +18,31 @@ module Techinform
15
18
  end
16
19
  encrypted = filename.split('.').last == 'gpg'
17
20
  if type == 'pg'
18
- puts "Restoring postgres backup to database #{dbname}..."
19
21
  if encrypted && just_decrypt
20
- `pv --wait #{filename} | gpg2 --decrypt | bzip2 > #{File.basename(filename, '.*')}`
22
+ puts "Decrypting postgres backup of #{filename}..."
23
+ `pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
21
24
  elsif encrypted
25
+ puts "Restoring postgres backup to database #{dbname}..."
22
26
  `pv --wait #{filename} | gpg2 --decrypt | psql #{dbname} > /dev/null`
23
27
  else
24
- `pv --wait #{filename} | bunzip2 | psql #{dbname} > /dev/null`
28
+ `pv --wait #{filename} | #{bunzip2} | psql #{dbname} > /dev/null`
25
29
  end
26
30
  else
27
- puts "Restoring mysql backup to database #{dbname}..."
28
31
  if encrypted && just_decrypt
29
- `pv --wait #{filename} | gpg2 --decrypt | bzip2 > #{File.basename(filename, '.*')}`
32
+ puts "Decrypting mysql backup of #{filename}..."
33
+ `pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
30
34
  elsif encrypted
31
- `pv --wait #{filename} | gpg2 --decrypt | mysql #{"-u#{ENV['USER']}" if !ENV['USER'].nil?} #{"-p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
35
+ puts "Restoring mysql backup to database #{dbname}..."
36
+ `pv --wait #{filename} | gpg2 --decrypt | mysql#{" -u#{ENV['DBUSER']}" if !ENV['DBUSER'].nil?}#{" -p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
32
37
  else
33
- `pv --wait #{filename} | bunzip2 | mysql #{"-u#{ENV['USER']}" if !ENV['USER'].nil?} #{"-p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
38
+ `pv --wait #{filename} | #{bunzip2} | mysql#{" -u#{ENV['DBUSER']}" if !ENV['DBUSER'].nil?}#{" -p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
34
39
  end
35
40
  end
36
41
  end
37
42
 
38
43
  desc 'decrypt [type] [absolute_filename or database to select file]', 'Decrypt file from backup; if no absolute filename given, will present select menu to choose file'
39
44
  def decrypt(type, filename)
45
+ puts "lbzip2 is not found. Single-threaded bzip2 will be used. Consider installing lbzip2" if bzip2 == 'bzip2'
40
46
  restore(type, filename, nil, true)
41
47
  end
42
48
 
@@ -1,3 +1,3 @@
1
1
  module Techinform
2
- VERSION = "1.5.0"
2
+ VERSION = "1.5.1"
3
3
  end
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
20
20
 
21
21
  spec.metadata["homepage_uri"] = spec.homepage
22
- spec.metadata["source_code_uri"] = "https://github.com/techinform-dev/techinform"
23
- spec.metadata["changelog_uri"] = "https://github.com/techinform-dev/techinform/CHANGELOG.md"
22
+ spec.metadata["source_code_uri"] = "https://github.com/alexey-chernikov/techinform"
23
+ spec.metadata["changelog_uri"] = "https://github.com/alexey-chernikov/techinform/CHANGELOG.md"
24
24
  else
25
25
  raise "RubyGems 2.0 or newer is required to protect against " \
26
26
  "public gem pushes."
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency 'thor', '~> 0.20'
39
39
  spec.add_dependency 'highline', '~> 2.0'
40
40
 
41
- spec.add_development_dependency 'bundler', '~> 1.15'
41
+ spec.add_development_dependency 'bundler', '~> 2.1'
42
42
  spec.add_development_dependency 'rake', '~> 13.0.1'
43
43
  spec.add_development_dependency 'minitest', '~> 5.0'
44
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: techinform
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Chernikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-08 00:00:00.000000000 Z
11
+ date: 2020-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.15'
47
+ version: '2.1'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.15'
54
+ version: '2.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -109,6 +109,7 @@ files:
109
109
  - lib/backup/files_backup.rb
110
110
  - lib/backup/mysql_backup.rb
111
111
  - lib/backup/postgre_backup.rb
112
+ - lib/bzip2_selector.rb
112
113
  - lib/techinform.rb
113
114
  - lib/techinform/backup.rb
114
115
  - lib/techinform/defaults.rb
@@ -122,8 +123,8 @@ licenses:
122
123
  metadata:
123
124
  allowed_push_host: https://rubygems.org
124
125
  homepage_uri: https://techinform.dev
125
- source_code_uri: https://github.com/techinform-dev/techinform
126
- changelog_uri: https://github.com/techinform-dev/techinform/CHANGELOG.md
126
+ source_code_uri: https://github.com/alexey-chernikov/techinform
127
+ changelog_uri: https://github.com/alexey-chernikov/techinform/CHANGELOG.md
127
128
  post_install_message:
128
129
  rdoc_options: []
129
130
  require_paths: