surrender 0.8.2 → 0.8.3
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.
- 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
|