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 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
@@ -7,6 +7,10 @@ module Surrender
7
7
 
8
8
  attr_reader :count, :memo
9
9
 
10
+ def name
11
+ self.class.name.sub("Policy", "").sub("Surrender::", "").downcase
12
+ end
13
+
10
14
  def add(filename, date)
11
15
  memo[bucket(date)] = filename
12
16
  memo.delete(memo.keys.first) if memo.size > count
@@ -7,6 +7,10 @@ module Surrender
7
7
 
8
8
  attr_reader :count, :memo
9
9
 
10
+ def name
11
+ "most recent"
12
+ end
13
+
10
14
  def add(filename, _)
11
15
  memo << filename
12
16
  memo.shift if memo.size > count
@@ -1,3 +1,3 @@
1
1
  module Surrender
2
- VERSION = "0.8.2"
2
+ VERSION = "0.8.3"
3
3
  end
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
 
@@ -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)
@@ -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
@@ -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.2
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: 2013-08-15 00:00:00.000000000 Z
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: 1928710586624369307
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: 1928710586624369307
102
+ hash: 715898748471192036
103
103
  requirements: []
104
104
  rubyforge_project:
105
105
  rubygems_version: 1.8.25