backupgem 0.0.7 → 0.0.8

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