backupgem 0.0.7 → 0.0.8

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.
Files changed (61) hide show
  1. data/CHANGELOG +8 -0
  2. data/Rakefile +25 -2
  3. data/bin/backup +1 -1
  4. data/doc/Backup of backupgem.key/Contents/PkgInfo +1 -0
  5. data/doc/Backup of backupgem.key/droppedImage-2.pdf +0 -0
  6. data/doc/Backup of backupgem.key/droppedImage-3.pdf +0 -0
  7. data/doc/Backup of backupgem.key/droppedImage-5.pdf +0 -0
  8. data/doc/Backup of backupgem.key/droppedImage-6.pdf +0 -0
  9. data/doc/Backup of backupgem.key/index.apxl.gz +0 -0
  10. data/doc/Backup of backupgem.key/thumbs/st0.tiff +0 -0
  11. data/doc/Backup of backupgem.key/thumbs/st1.tiff +0 -0
  12. data/doc/Backup of backupgem.key/thumbs/st15.tiff +0 -0
  13. data/doc/Backup of backupgem.key/thumbs/st2.tiff +0 -0
  14. data/doc/Backup of backupgem.key/thumbs/st3-1.tiff +0 -0
  15. data/doc/Backup of backupgem.key/thumbs/st3-2.tiff +0 -0
  16. data/doc/Backup of backupgem.key/thumbs/st3-3.tiff +0 -0
  17. data/doc/Backup of backupgem.key/thumbs/st3-4.tiff +0 -0
  18. data/doc/Backup of backupgem.key/thumbs/st3-5.tiff +0 -0
  19. data/doc/Backup of backupgem.key/thumbs/st3-6.tiff +0 -0
  20. data/doc/Backup of backupgem.key/thumbs/st3-7.tiff +0 -0
  21. data/doc/Backup of backupgem.key/thumbs/st3.tiff +0 -0
  22. data/doc/Backup of backupgem.key/thumbs/st4.tiff +0 -0
  23. data/doc/Backup of backupgem.key/thumbs/st5.tiff +0 -0
  24. data/doc/Backup of backupgem.key/thumbs/st6-1.tiff +0 -0
  25. data/doc/Backup of backupgem.key/thumbs/st6.tiff +0 -0
  26. data/doc/backup_flow.graffle/Icon/r +0 -0
  27. data/doc/backup_flow.graffle/data.plist +320 -0
  28. data/doc/backup_flow.graffle/image1.ai +602 -2
  29. data/doc/backup_flow.graffle/image2.pict +0 -0
  30. data/doc/backupgem.key/Contents/PkgInfo +1 -0
  31. data/doc/backupgem.key/droppedImage-2.pdf +0 -0
  32. data/doc/backupgem.key/droppedImage-3.pdf +0 -0
  33. data/doc/backupgem.key/droppedImage-5.pdf +0 -0
  34. data/doc/backupgem.key/droppedImage-6.pdf +0 -0
  35. data/doc/backupgem.key/index.apxl.gz +0 -0
  36. data/doc/backupgem.key/thumbs/st0.tiff +0 -0
  37. data/doc/backupgem.key/thumbs/st1.tiff +0 -0
  38. data/doc/backupgem.key/thumbs/st15.tiff +0 -0
  39. data/doc/backupgem.key/thumbs/st2.tiff +0 -0
  40. data/doc/backupgem.key/thumbs/st3-1.tiff +0 -0
  41. data/doc/backupgem.key/thumbs/st3-2.tiff +0 -0
  42. data/doc/backupgem.key/thumbs/st3-3.tiff +0 -0
  43. data/doc/backupgem.key/thumbs/st3-4.tiff +0 -0
  44. data/doc/backupgem.key/thumbs/st3-5.tiff +0 -0
  45. data/doc/backupgem.key/thumbs/st3-6.tiff +0 -0
  46. data/doc/backupgem.key/thumbs/st3-7.tiff +0 -0
  47. data/doc/backupgem.key/thumbs/st3.tiff +0 -0
  48. data/doc/backupgem.key/thumbs/st4.tiff +0 -0
  49. data/doc/backupgem.key/thumbs/st5.tiff +0 -0
  50. data/doc/backupgem.key/thumbs/st6-1.tiff +0 -0
  51. data/doc/backupgem.key/thumbs/st6.tiff +0 -0
  52. data/examples/mediawiki_numeric.rb +19 -0
  53. data/lib/backup.rb +8 -0
  54. data/lib/backup/actor.rb +17 -6
  55. data/lib/backup/actor.rb.orig +200 -0
  56. data/lib/backup/cli.rb +45 -6
  57. data/lib/backup/recipes/standard.rb +16 -2
  58. data/lib/backup/rotator.rb +62 -10
  59. data/lib/backup/state_recorder.rb +21 -0
  60. data/tests/s3_test.rb +40 -0
  61. metadata +80 -11
@@ -18,11 +18,33 @@ module Backup
18
18
  # verify that each of the directories exist, grandfathers, fathers, sons
19
19
  hierarchy.each { |m| verify_local_backup_directory_exists(m) }
20
20
 
21
+ where = place_in
22
+
21
23
  # place todays backup into the specified directory with a timestamp.
22
24
  newname = timestamped_prefix(last_result)
23
- sh "mv #{last_result} #{place_in}/#{newname}"
25
+ mv last_result, "#{where}/#{newname}"
26
+
27
+ cleanup_via_mv(where, how_many_to_keep_today)
28
+ update_state
29
+ end
24
30
 
25
- cleanup_via_mv(place_in, how_many_to_keep_today)
31
+ def update_state
32
+ return unless :numeric == c[:rotation_mode]
33
+ where = find_goes_in_by_state
34
+
35
+ previous_sons = $state.system.sons_since_last_promotion || 0
36
+ previous_fathers = $state.system.fathers_since_last_promotion || 0
37
+
38
+ case where
39
+ when "sons"
40
+ $state.system.sons_since_last_promotion = previous_sons + 1
41
+ when "fathers"
42
+ $state.system.sons_since_last_promotion = 0
43
+ $state.system.fathers_since_last_promotion = previous_fathers + 1
44
+ when "grandfathers"
45
+ $state.system.sons_since_last_promotion = 0
46
+ $state.system.fathers_since_last_promotion = 0
47
+ end
26
48
  end
27
49
 
28
50
  def rotate_via_ssh(last_result)
@@ -35,10 +57,12 @@ module Backup
35
57
  ssh.verify_directory_exists(dir)
36
58
  end
37
59
 
60
+ where = place_in
61
+
38
62
  newname = timestamped_prefix(last_result)
39
- ssh.run "mv #{last_result} #{place_in}/#{newname}"
63
+ ssh.run "mv #{last_result} #{where}/#{newname}"
40
64
 
41
- ssh.cleanup_directory(place_in, how_many_to_keep_today)
65
+ ssh.cleanup_directory(where, how_many_to_keep_today)
42
66
  ssh.close
43
67
  end
44
68
 
@@ -86,7 +110,7 @@ module Backup
86
110
  path = c[:backup_path]
87
111
  full = path + "/" + dir
88
112
  unless File.exists?(full)
89
- sh "mkdir -p #{full}"
113
+ mkdir_p full
90
114
  end
91
115
  end
92
116
 
@@ -104,7 +128,7 @@ module Backup
104
128
 
105
129
  1.upto( diff ) do
106
130
  extra = files.shift
107
- sh "rm #{extra}"
131
+ rm extra
108
132
  end
109
133
  end
110
134
 
@@ -119,20 +143,48 @@ module Backup
119
143
  promote_sons_today? ? "fathers" : "sons"
120
144
  end
121
145
 
122
- def self.timestamped_prefix(name)
123
- newname = Time.now.strftime("%Y-%m-%d-%H-%M-%S_") + File.basename(name)
146
+ def self.timestamped_prefix(name,time="%Y-%m-%d-%H-%M-%S")
147
+ time ||= "%Y-%m-%d-%H-%M-%S" # there has to be a better way to do this
148
+ # but it works.
149
+ newname = Time.now.strftime(time) + "_" + File.basename(name)
124
150
  end
125
151
 
126
152
  # Given +name+ returns a timestamped version of name.
127
153
  def timestamped_prefix(name)
128
- Backup::Rotator.timestamped_prefix(name)
154
+ Backup::Rotator.timestamped_prefix(name,c[:timestamp])
129
155
  end
130
156
 
131
157
  private
158
+
159
+ # Decide where to place the next backup. g,f,or s. See the standard
160
+ # config for a description of the difference between numeric and temporal
161
+ # rotation mode
132
162
  def place_in
133
- goes_in = todays_generation
163
+ if :numeric == c[:rotation_mode]
164
+ goes_in = find_goes_in_by_state
165
+ else
166
+ goes_in = todays_generation
167
+ end
168
+
134
169
  place_in = c[:backup_path] + "/" + goes_in
135
170
  end
171
+
172
+ def find_goes_in_by_state
173
+ previous_sons = $state.system.sons_since_last_promotion || 0
174
+ previous_fathers = $state.system.fathers_since_last_promotion || 0
175
+
176
+ #puts "in find goes in"
177
+ #puts "sons since last: " + $state.system.sons_since_last_promotion.to_s
178
+ #puts "fathers since last: " + $state.system.fathers_since_last_promotion.to_s
179
+
180
+ if previous_sons >= c[:sons_promoted_after]
181
+ if previous_fathers >= c[:fathers_promoted_after]
182
+ return "grandfathers"
183
+ end
184
+ return "fathers"
185
+ end
186
+ "sons"
187
+ end
136
188
 
137
189
  # Returns the number of sons to keep. Looks for config values +:sons_to_keep+,
138
190
  # +:son_promoted_on+. Default +14+.
@@ -0,0 +1,21 @@
1
+ require 'fileutils'
2
+
3
+ class StateRecorder
4
+ attr_accessor :sons_since_last_promotion
5
+ attr_accessor :fathers_since_last_promotion
6
+ attr_accessor :saved_state_folder
7
+
8
+ def initialize
9
+ @sons_since_last_promotion = 0
10
+ @fathers_since_last_promotion = 0
11
+ end
12
+
13
+ # cleanup all the snapshots created by madeline
14
+ def cleanup_snapshots
15
+ files = Dir[saved_state_folder + "/*.snapshot"]
16
+ files.pop
17
+ files.sort.each do |f|
18
+ FileUtils.rm(f, :verbose => false)
19
+ end
20
+ end
21
+ end
data/tests/s3_test.rb ADDED
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + "/tests_helper"
2
+
3
+ class S3Test < Test::Unit::TestCase
4
+
5
+ # These tests require actual S3 access keys set as environment variables
6
+
7
+ def setup
8
+ @config = Backup::Configuration.new
9
+ @config.load "standard"
10
+ @config.set :backup_path, 'test_backup'
11
+ @config.action :deliver, :method => :s3
12
+ @actor = Backup::S3Actor.new(@config)
13
+ end
14
+
15
+ def test_exists
16
+ assert @config
17
+ assert @actor
18
+ end
19
+
20
+ def test_on_s3
21
+ dir = create_tmp_files
22
+ config = <<-END
23
+ action :content, :is_folder => "#{dir}"
24
+ action :rotate, :method => :via_s3
25
+ END
26
+ @config.load :string => config
27
+ assert result = @config.actor.content
28
+ assert File.exists?(result)
29
+ @config.actor.start_process!
30
+ end
31
+
32
+ private
33
+
34
+ def create_tmp_files
35
+ newtmp = @config[:tmp_dir] + "/test_#{rand}_" + Time.now.strftime("%Y%m%d%H%M%S")
36
+ sh "mkdir #{newtmp}"
37
+ 0.upto(5) { |i| sh "touch #{newtmp}/#{i}" }
38
+ newtmp
39
+ end
40
+ end
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: backupgem
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.7
7
- date: 2007-01-30 00:00:00 -08:00
6
+ version: 0.0.8
7
+ date: 2007-08-03 00:00:00 -07:00
8
8
  summary: Beginning-to-end solution for backups and rotation.
9
9
  require_paths:
10
10
  - lib
11
11
  email: nate@natemurray.com
12
12
  homepage: http://tech.natemurray.com/backup
13
- rubyforge_project:
13
+ rubyforge_project: backupgem
14
14
  description:
15
15
  autorequire: backupgem
16
- default_executable:
16
+ default_executable: backup
17
17
  bindir: bin
18
18
  has_rdoc: true
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
@@ -32,27 +32,86 @@ files:
32
32
  - bin/backup
33
33
  - bin/commands.sh
34
34
  - lib/backup
35
- - lib/backup.rb
36
35
  - lib/backup/actor.rb
36
+ - lib/backup/actor.rb.orig
37
37
  - lib/backup/cli.rb
38
38
  - lib/backup/configuration.rb
39
39
  - lib/backup/date_parser.rb
40
40
  - lib/backup/extensions.rb
41
41
  - lib/backup/recipes
42
+ - lib/backup/recipes/standard.rb
42
43
  - lib/backup/rotator.rb
43
44
  - lib/backup/s3_helpers.rb
44
45
  - lib/backup/ssh_helpers.rb
45
- - lib/backup/recipes/standard.rb
46
+ - lib/backup/state_recorder.rb
47
+ - lib/backup.rb
46
48
  - tests/actor_test.rb
47
49
  - tests/cleanup.sh
48
50
  - tests/optional
51
+ - tests/optional/s3_test.rb
49
52
  - tests/rotation_test.rb
53
+ - tests/s3_test.rb
50
54
  - tests/ssh_test.rb
51
55
  - tests/tests_helper.rb
52
- - tests/optional/s3_test.rb
53
56
  - examples/global.rb
54
57
  - examples/mediawiki.rb
58
+ - examples/mediawiki_numeric.rb
55
59
  - examples/s3.rb
60
+ - doc/Backup of backupgem.key
61
+ - doc/Backup of backupgem.key/Contents
62
+ - doc/Backup of backupgem.key/Contents/PkgInfo
63
+ - doc/Backup of backupgem.key/droppedImage-2.pdf
64
+ - doc/Backup of backupgem.key/droppedImage-3.pdf
65
+ - doc/Backup of backupgem.key/droppedImage-5.pdf
66
+ - doc/Backup of backupgem.key/droppedImage-6.pdf
67
+ - doc/Backup of backupgem.key/index.apxl.gz
68
+ - doc/Backup of backupgem.key/thumbs
69
+ - doc/Backup of backupgem.key/thumbs/st0.tiff
70
+ - doc/Backup of backupgem.key/thumbs/st1.tiff
71
+ - doc/Backup of backupgem.key/thumbs/st15.tiff
72
+ - doc/Backup of backupgem.key/thumbs/st2.tiff
73
+ - doc/Backup of backupgem.key/thumbs/st3-1.tiff
74
+ - doc/Backup of backupgem.key/thumbs/st3-2.tiff
75
+ - doc/Backup of backupgem.key/thumbs/st3-3.tiff
76
+ - doc/Backup of backupgem.key/thumbs/st3-4.tiff
77
+ - doc/Backup of backupgem.key/thumbs/st3-5.tiff
78
+ - doc/Backup of backupgem.key/thumbs/st3-6.tiff
79
+ - doc/Backup of backupgem.key/thumbs/st3-7.tiff
80
+ - doc/Backup of backupgem.key/thumbs/st3.tiff
81
+ - doc/Backup of backupgem.key/thumbs/st4.tiff
82
+ - doc/Backup of backupgem.key/thumbs/st5.tiff
83
+ - doc/Backup of backupgem.key/thumbs/st6-1.tiff
84
+ - doc/Backup of backupgem.key/thumbs/st6.tiff
85
+ - doc/backup_flow.graffle
86
+ - doc/backup_flow.graffle/data.plist
87
+ - doc/backup_flow.graffle/Icon
88
+ - doc/backup_flow.graffle/image1.ai
89
+ - doc/backup_flow.graffle/image2.pict
90
+ - doc/backupgem.key
91
+ - doc/backupgem.key/Contents
92
+ - doc/backupgem.key/Contents/PkgInfo
93
+ - doc/backupgem.key/droppedImage-2.pdf
94
+ - doc/backupgem.key/droppedImage-3.pdf
95
+ - doc/backupgem.key/droppedImage-5.pdf
96
+ - doc/backupgem.key/droppedImage-6.pdf
97
+ - doc/backupgem.key/index.apxl.gz
98
+ - doc/backupgem.key/thumbs
99
+ - doc/backupgem.key/thumbs/st0.tiff
100
+ - doc/backupgem.key/thumbs/st1.tiff
101
+ - doc/backupgem.key/thumbs/st15.tiff
102
+ - doc/backupgem.key/thumbs/st2.tiff
103
+ - doc/backupgem.key/thumbs/st3-1.tiff
104
+ - doc/backupgem.key/thumbs/st3-2.tiff
105
+ - doc/backupgem.key/thumbs/st3-3.tiff
106
+ - doc/backupgem.key/thumbs/st3-4.tiff
107
+ - doc/backupgem.key/thumbs/st3-5.tiff
108
+ - doc/backupgem.key/thumbs/st3-6.tiff
109
+ - doc/backupgem.key/thumbs/st3-7.tiff
110
+ - doc/backupgem.key/thumbs/st3.tiff
111
+ - doc/backupgem.key/thumbs/st4.tiff
112
+ - doc/backupgem.key/thumbs/st5.tiff
113
+ - doc/backupgem.key/thumbs/st6-1.tiff
114
+ - doc/backupgem.key/thumbs/st6.tiff
56
115
  - doc/index.html
57
116
  - doc/LICENSE-GPL
58
117
  - doc/styles.css
@@ -62,9 +121,10 @@ files:
62
121
  - Rakefile
63
122
  test_files:
64
123
  - tests/actor_test.rb
124
+ - tests/optional/s3_test.rb
65
125
  - tests/rotation_test.rb
126
+ - tests/s3_test.rb
66
127
  - tests/ssh_test.rb
67
- - tests/optional/s3_test.rb
68
128
  rdoc_options: []
69
129
 
70
130
  extra_rdoc_files:
@@ -72,8 +132,8 @@ extra_rdoc_files:
72
132
  - CHANGELOG
73
133
  - TODO
74
134
  - Rakefile
75
- executables: []
76
-
135
+ executables:
136
+ - backup
77
137
  extensions: []
78
138
 
79
139
  requirements: []
@@ -106,3 +166,12 @@ dependencies:
106
166
  - !ruby/object:Gem::Version
107
167
  version: 1.0.9
108
168
  version:
169
+ - !ruby/object:Gem::Dependency
170
+ name: madeleine
171
+ version_requirement:
172
+ version_requirements: !ruby/object:Gem::Version::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: 0.7.3
177
+ version: