techinform 1.1.5 → 1.2.1

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