surrender 0.8.2 → 0.8.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +27 -1
- data/bin/surrender +2 -0
- data/lib/surrender/bucket_policy.rb +4 -0
- data/lib/surrender/most_recent_policy.rb +4 -0
- data/lib/surrender/version.rb +1 -1
- data/lib/surrender.rb +10 -0
- data/spec/monthly_policy_spec.rb +2 -0
- data/spec/most_recent_policy_spec.rb +2 -0
- data/spec/weekly_policy_spec.rb +2 -0
- data/spec/yearly_policy_spec.rb +2 -0
- metadata +4 -4
data/README.md
CHANGED
@@ -22,7 +22,7 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
Acts as a filter, returning files which should be removed from a backup scheme:
|
24
24
|
|
25
|
-
$ find /var/backup/database -type f | sort | surrender --most-recent=7 --weekly=5 --monthly=12 --yearly=2 | xargs rm
|
25
|
+
$ find /var/backup/database -type f | sort | surrender --most-recent=7 --weekly=5 --monthly=12 --yearly=2 | xargs rm --verbose
|
26
26
|
|
27
27
|
Would keep the most recent 7 files, irrespective of their dates, the 5 most recent
|
28
28
|
weekly backups, the 12 most recent monthly backups, and the 2 most recent yearly
|
@@ -45,6 +45,32 @@ STDOUT, implying the file must be kept.
|
|
45
45
|
Incidentally, all parameters to surrender are optional. The default values are the ones expressed above.
|
46
46
|
surrender uses a constant amount of memory, related to the total number of files in the input stream.
|
47
47
|
|
48
|
+
## Viewing the inner workings
|
49
|
+
|
50
|
+
If you pass the `--verbose` option, Surrender will tell you how it arrived at it's decision:
|
51
|
+
|
52
|
+
$ for DATE in 2013-12-{10..20} ; do echo "backup.${DATE}.tar.gz" ; done | RUBYOPT=-Ilib bin/surrender --verbose
|
53
|
+
"backup.2013-12-10.tar.gz": most recent=delete, weekly=delete, monthly=delete, yearly=delete
|
54
|
+
"backup.2013-12-11.tar.gz": most recent=delete, weekly=delete, monthly=delete, yearly=delete
|
55
|
+
"backup.2013-12-12.tar.gz": most recent=delete, weekly=delete, monthly=delete, yearly=delete
|
56
|
+
"backup.2013-12-13.tar.gz": most recent=delete, weekly=delete, monthly=delete, yearly=delete
|
57
|
+
"backup.2013-12-14.tar.gz": most recent=keep, weekly=keep, monthly=delete, yearly=delete
|
58
|
+
"backup.2013-12-15.tar.gz": most recent=keep, weekly=delete, monthly=delete, yearly=delete
|
59
|
+
"backup.2013-12-16.tar.gz": most recent=keep, weekly=delete, monthly=delete, yearly=delete
|
60
|
+
"backup.2013-12-17.tar.gz": most recent=keep, weekly=delete, monthly=delete, yearly=delete
|
61
|
+
"backup.2013-12-18.tar.gz": most recent=keep, weekly=delete, monthly=delete, yearly=delete
|
62
|
+
"backup.2013-12-19.tar.gz": most recent=keep, weekly=delete, monthly=delete, yearly=delete
|
63
|
+
"backup.2013-12-20.tar.gz": most recent=keep, weekly=keep, monthly=keep, yearly=keep
|
64
|
+
backup.2013-12-10.tar.gz
|
65
|
+
backup.2013-12-11.tar.gz
|
66
|
+
backup.2013-12-12.tar.gz
|
67
|
+
backup.2013-12-13.tar.gz
|
68
|
+
|
69
|
+
In this example, you can see that the `backup.2013-12-10.tar.gz` file was voted to be deleted by all
|
70
|
+
policies, while `backup.2013-12-14.tar.gz` was voted to be kept by the most recent and weekly policies.
|
71
|
+
|
72
|
+
The `--verbose` flag outputs to STDERR, keeping STDOUT clean.
|
73
|
+
|
48
74
|
## Contributing
|
49
75
|
|
50
76
|
1. Fork it
|
data/bin/surrender
CHANGED
@@ -11,6 +11,8 @@ options = ARGV.each_with_object(Surrender::DEFAULT_ARGUMENTS.dup) do |arg, memo|
|
|
11
11
|
memo[:monthly] = Integer($1)
|
12
12
|
when /^--yearly=(\d+)$/
|
13
13
|
memo[:yearly] = Integer($1)
|
14
|
+
when /^--verbose$/
|
15
|
+
memo[:verbose] = true
|
14
16
|
else
|
15
17
|
raise ArgumentError, "Unknown option #{arg.inspect}"
|
16
18
|
end
|
data/lib/surrender/version.rb
CHANGED
data/lib/surrender.rb
CHANGED
@@ -7,6 +7,7 @@ require "date"
|
|
7
7
|
|
8
8
|
module Surrender
|
9
9
|
DEFAULT_ARGUMENTS = {
|
10
|
+
verbose: false,
|
10
11
|
most_recent: 7,
|
11
12
|
weekly: 5,
|
12
13
|
monthly: 12,
|
@@ -21,6 +22,8 @@ module Surrender
|
|
21
22
|
extra_keys = options.keys - DEFAULT_ARGUMENTS.keys
|
22
23
|
raise ArgumentError, "Unknown keys: #{extra_keys.inspect} -- won't proceed" unless extra_keys.empty?
|
23
24
|
|
25
|
+
verbose = options[:verbose]
|
26
|
+
|
24
27
|
policies = [
|
25
28
|
Surrender::MostRecentPolicy.new(options.fetch(:most_recent)),
|
26
29
|
Surrender::WeeklyPolicy.new(options.fetch(:weekly)),
|
@@ -41,6 +44,13 @@ module Surrender
|
|
41
44
|
end
|
42
45
|
|
43
46
|
deleteable = valid_filenames.select do |filename|
|
47
|
+
if verbose then
|
48
|
+
message = policies.map do |policy|
|
49
|
+
"#{policy.name}=#{policy.deleteable?(filename) ? "delete" : "keep"}"
|
50
|
+
end.join(", ")
|
51
|
+
STDERR.puts "#{filename.inspect}: #{message}"
|
52
|
+
end
|
53
|
+
|
44
54
|
policies.all?{|policy| policy.deleteable?(filename)}
|
45
55
|
end
|
46
56
|
|
data/spec/monthly_policy_spec.rb
CHANGED
@@ -5,6 +5,8 @@ describe Surrender::MonthlyPolicy do
|
|
5
5
|
context "when count = 3" do
|
6
6
|
subject { Surrender::MonthlyPolicy.new(3) }
|
7
7
|
|
8
|
+
it { subject.name.should == "monthly" }
|
9
|
+
|
8
10
|
it "keeps the latest backup of the last three months" do
|
9
11
|
subject.add "a", Date.new(2013, 3, 1)
|
10
12
|
subject.add "b", Date.new(2013, 3, 15)
|
@@ -5,6 +5,8 @@ describe Surrender::MostRecentPolicy do
|
|
5
5
|
context "when count = 1" do
|
6
6
|
subject { Surrender::MostRecentPolicy.new(1) }
|
7
7
|
|
8
|
+
it { subject.name.should == "most recent" }
|
9
|
+
|
8
10
|
it "keeps the last entry only" do
|
9
11
|
filename1 = "/var/backups/20130801.sql.gz"
|
10
12
|
subject.add filename1, Date.new(2013, 8, 1)
|
data/spec/weekly_policy_spec.rb
CHANGED
@@ -5,6 +5,8 @@ describe Surrender::WeeklyPolicy do
|
|
5
5
|
context "when count = 1" do
|
6
6
|
subject { Surrender::WeeklyPolicy.new(1) }
|
7
7
|
|
8
|
+
it { subject.name.should == "weekly" }
|
9
|
+
|
8
10
|
it "keeps the last filename per week" do
|
9
11
|
subject.add "a", Date.new(2013, 8, 4)
|
10
12
|
subject.deleteable?("a").should == false
|
data/spec/yearly_policy_spec.rb
CHANGED
@@ -5,6 +5,8 @@ describe Surrender::YearlyPolicy do
|
|
5
5
|
context "when count = 2" do
|
6
6
|
subject { Surrender::YearlyPolicy.new(2) }
|
7
7
|
|
8
|
+
it { subject.name.should == "yearly" }
|
9
|
+
|
8
10
|
it "keeps the most recent filename of the last two years" do
|
9
11
|
subject.add "a", Date.new(2011, 8, 9)
|
10
12
|
subject.add "b", Date.new(2011, 9, 9)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: surrender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-02-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -90,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
90
|
version: '0'
|
91
91
|
segments:
|
92
92
|
- 0
|
93
|
-
hash:
|
93
|
+
hash: 715898748471192036
|
94
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
99
|
version: '0'
|
100
100
|
segments:
|
101
101
|
- 0
|
102
|
-
hash:
|
102
|
+
hash: 715898748471192036
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
105
|
rubygems_version: 1.8.25
|