backupgem 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -0
- data/Rakefile +25 -2
- data/bin/backup +1 -1
- data/doc/Backup of backupgem.key/Contents/PkgInfo +1 -0
- data/doc/Backup of backupgem.key/droppedImage-2.pdf +0 -0
- data/doc/Backup of backupgem.key/droppedImage-3.pdf +0 -0
- data/doc/Backup of backupgem.key/droppedImage-5.pdf +0 -0
- data/doc/Backup of backupgem.key/droppedImage-6.pdf +0 -0
- data/doc/Backup of backupgem.key/index.apxl.gz +0 -0
- data/doc/Backup of backupgem.key/thumbs/st0.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st1.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st15.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st2.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st3-1.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st3-2.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st3-3.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st3-4.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st3-5.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st3-6.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st3-7.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st3.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st4.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st5.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st6-1.tiff +0 -0
- data/doc/Backup of backupgem.key/thumbs/st6.tiff +0 -0
- data/doc/backup_flow.graffle/Icon/r +0 -0
- data/doc/backup_flow.graffle/data.plist +320 -0
- data/doc/backup_flow.graffle/image1.ai +602 -2
- data/doc/backup_flow.graffle/image2.pict +0 -0
- data/doc/backupgem.key/Contents/PkgInfo +1 -0
- data/doc/backupgem.key/droppedImage-2.pdf +0 -0
- data/doc/backupgem.key/droppedImage-3.pdf +0 -0
- data/doc/backupgem.key/droppedImage-5.pdf +0 -0
- data/doc/backupgem.key/droppedImage-6.pdf +0 -0
- data/doc/backupgem.key/index.apxl.gz +0 -0
- data/doc/backupgem.key/thumbs/st0.tiff +0 -0
- data/doc/backupgem.key/thumbs/st1.tiff +0 -0
- data/doc/backupgem.key/thumbs/st15.tiff +0 -0
- data/doc/backupgem.key/thumbs/st2.tiff +0 -0
- data/doc/backupgem.key/thumbs/st3-1.tiff +0 -0
- data/doc/backupgem.key/thumbs/st3-2.tiff +0 -0
- data/doc/backupgem.key/thumbs/st3-3.tiff +0 -0
- data/doc/backupgem.key/thumbs/st3-4.tiff +0 -0
- data/doc/backupgem.key/thumbs/st3-5.tiff +0 -0
- data/doc/backupgem.key/thumbs/st3-6.tiff +0 -0
- data/doc/backupgem.key/thumbs/st3-7.tiff +0 -0
- data/doc/backupgem.key/thumbs/st3.tiff +0 -0
- data/doc/backupgem.key/thumbs/st4.tiff +0 -0
- data/doc/backupgem.key/thumbs/st5.tiff +0 -0
- data/doc/backupgem.key/thumbs/st6-1.tiff +0 -0
- data/doc/backupgem.key/thumbs/st6.tiff +0 -0
- data/examples/mediawiki_numeric.rb +19 -0
- data/lib/backup.rb +8 -0
- data/lib/backup/actor.rb +17 -6
- data/lib/backup/actor.rb.orig +200 -0
- data/lib/backup/cli.rb +45 -6
- data/lib/backup/recipes/standard.rb +16 -2
- data/lib/backup/rotator.rb +62 -10
- data/lib/backup/state_recorder.rb +21 -0
- data/tests/s3_test.rb +40 -0
- metadata +80 -11
data/lib/backup/rotator.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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} #{
|
63
|
+
ssh.run "mv #{last_result} #{where}/#{newname}"
|
40
64
|
|
41
|
-
ssh.cleanup_directory(
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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
|
-
date: 2007-
|
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/
|
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:
|