techinform 1.1.5 → 1.2.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: 5b46a86627ff6c858e3be17cca5fb11f49e6360be7e4cb3150fe6d14e71e46e7
4
- data.tar.gz: 9b1f8d2f5b26a79c9eff1d9de42d006b1c8687e5e348a425e1325ac56b960aeb
3
+ metadata.gz: a5feb947d3f7cfd7fc1684ffedde7cdd0e8f11bf98cb7d8fdeb9a8acd9e6ab09
4
+ data.tar.gz: '0548eaae7d279ed149c67eccc7bbf1f862fbe2c0e800512d8ca7317f543070fa'
5
5
  SHA512:
6
- metadata.gz: 80b1c0905170c7ac239013e5c2413a8a22c58ab3ba5fa9820ad000aecfde3d884da221a504df442109deda1737621aae82cd740af8628a0b45405861ec1f3c61
7
- data.tar.gz: a6c9290269b5d74fee1293ce55dbe628e49c7fb95bfb2f4b5db7f24b7b39cff3982c9a956ee452824bce60456d3a0301f05802a5cec7da9a729fa363ebcdd531
6
+ metadata.gz: c35eb62de6a8c4501558102b88a75f745402b3d0cdc420733e1666183b119ddbd7811750048edd7ffbc8c28eb2c5f77f54b95029fce6f403d5672a1e26018a5b
7
+ data.tar.gz: 25df7864b78286c8800b31f811ad46799a3d56b33386fa939291cbd78bd52ea5bff1da9b4d187b8df8e76d2545d749b7d28d91c29b31c4e2b3090b522e423bdd
data/lib/backup/backup.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'date'
2
2
  require_relative '../techinform/defaults'
3
+ require 'highline'
3
4
 
4
5
  class Backup
5
6
  DATE_FORMAT = '%Y-%m-%d-%H-%M'
@@ -73,7 +74,8 @@ class Backup
73
74
  end
74
75
 
75
76
  def get_datetime_from_filename filename
76
- DateTime.strptime(filename.split('-')[2], DATE_FORMAT)
77
+ puts 'Filename: ' + filename.split('.').first.split('-')[2..6].join('-')
78
+ DateTime.strptime(filename.split('.').first.split('-')[2..6].join('-'), DATE_FORMAT)
77
79
  end
78
80
 
79
81
  def print_info
@@ -88,34 +90,62 @@ class Backup
88
90
  puts output unless output.empty?
89
91
  end
90
92
 
93
+ # Change it in child class
94
+ def minimum_backup_size
95
+ 50
96
+ end
97
+
98
+ # It worth to redefine that method to better check backup integrity
99
+ # Return true if everything ok
100
+ def verify_backup
101
+ File.size(filepath) > minimum_backup_size
102
+ end
91
103
 
92
- def clean_files
104
+ def clean_files(prefix = 'local', dry_run = true)
105
+ puts(dry_run ? 'Performing dry run' : '!!!! Cleaning backups !!!!')
93
106
  result = {} # true - delete file, false - do not delete
94
107
  months_taken = []
95
108
  days_taken = []
96
- files = Dir.entries(path) - ['.', '..']
97
- files.each do |file|
98
- datetime = get_datetime_from_filename(file)
99
- day_id = datetime.strftime('%Y-%m-%d')
100
- month_id = datetime.strftime('%Y-%m')
101
- if datetime < (DateTime.now << 2) # 2 month ago
102
- if datetime.day == 1 && !(months_taken.include? month_id)
103
- result[file] = false
104
- months_taken << month_id
105
- else
106
- result[file] = true
109
+ # Process each backup type
110
+ Dir["#{Techinform::BACKUPS_PREFIX}/#{prefix}/*"].each do |type|
111
+ puts "Type: #{type}"
112
+ # Get all backup name
113
+ Dir["#{type}/*"].each do |name|
114
+ puts "Name: #{name}"
115
+ # Get all files
116
+ Dir["#{name}/*"].sort.each do |file|
117
+ datetime = get_datetime_from_filename(file)
118
+ day_id = datetime.strftime('%Y-%m-%d')
119
+ month_id = datetime.strftime('%Y-%m')
120
+ if datetime < (DateTime.now << 2) # 2 month ago
121
+ if datetime.day == 1 && !(months_taken.include? month_id)
122
+ result[file] = false
123
+ months_taken << month_id
124
+ else
125
+ result[file] = true
126
+ end
127
+ elsif datetime < DateTime.now - 14 # 2 weeks ago
128
+ if [1, 7, 14, 21].include?(datetime.day) && !(days_taken.include?(day_id))
129
+ result[file] = false
130
+ days_taken << day_id
131
+ else
132
+ result[file] = true
133
+ end
134
+ end
135
+ end
136
+ result.each do |file, delete|
137
+ puts "#{file} #{"*" if delete}"
107
138
  end
108
- elsif datetime < DateTime.now - 14 # 2 weeks ago
109
- if [1, 7, 14, 21].include?(datetime.day) && !(days_taken.include?(day_id))
110
- result[file] = false
111
- days_taken << day_id
112
- else
113
- result[file] = true
139
+ unless dry_run
140
+ return unless HighLine.new.agree "Delete #{result.select{|file, delete| delete}.keys.size} files - Are you sure? (yes/no)"
141
+ # Actually delete files
142
+ result.select{|file, delete| delete}.keys.each do |file|
143
+ puts `rm #{file}`
144
+ end
114
145
  end
115
146
  end
116
147
  end
117
148
 
118
- puts "Candidates to removal: #{result.select{|file, delete| delete }.keys.inspect}"
119
149
  end
120
150
  end
121
151
 
@@ -1,3 +1,3 @@
1
1
  module Techinform
2
- VERSION = "1.1.5"
2
+ VERSION = "1.2.1"
3
3
  end
data/lib/techinform.rb CHANGED
@@ -40,6 +40,11 @@ module Techinform
40
40
  subcommand :projects, Techinform::Projects
41
41
  desc 'backup', 'Backup'
42
42
  subcommand :backup, Techinform::BackupCommand
43
+ desc "clean [prefix]", 'Clean old backup files (default prefix: local)'
44
+ option :delete, type: :boolean, desc: 'Actually delete files'
45
+ def clean(prefix = 'local')
46
+ puts Backup.new.clean_files(prefix, !options[:delete])
47
+ end
43
48
  end
44
49
  end
45
50
 
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.1.5
4
+ version: 1.2.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: 2019-04-20 00:00:00.000000000 Z
11
+ date: 2019-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -130,8 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  requirements: []
133
- rubyforge_project:
134
- rubygems_version: 2.7.9
133
+ rubygems_version: 3.0.3
135
134
  signing_key:
136
135
  specification_version: 4
137
136
  summary: Console tools, useful at Techinform