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.
- 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:
|