db2fog 0.8.0 → 0.9.0

This diff has not been reviewed by any users.
Sign up to get free protection for your applications and to get access to all the features.
Files changed (10) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/CHANGELOG.md +106 -0
  4. data/Gemfile +3 -0
  5. data/README.rdoc +2 -21
  6. data/Rakefile +24 -0
  7. data/db2fog.gemspec +27 -0
  8. data/lib/db2fog.rb +32 -45
  9. metadata +67 -50
  10. data/HISTORY +0 -38
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2287c68e77479e2a698f97cced644c95f9e65b79
4
+ data.tar.gz: 9489832660a2a444117b0e36059eb2cae2089047
5
+ SHA512:
6
+ metadata.gz: 16851ca0b78f024c556d7d8019396660b1c9d72692f0d58bfded373b594fa8aa70a5d024cbc563f7a076b8168113410d106e51eee6f3d5d796da598bfd6dab2b
7
+ data.tar.gz: 3932fadd999da08547aa66fbee515d2deebc96edc7403830acbb925bd0d14a7e5578b8ca2d3cc67a68afc586e2620ae9331730352b26c5862c47608960f519b6
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ Gemfile.lock
3
+ spec/db_config.rb
4
+ spec/storage
5
+ /_yardoc/
6
+ /coverage/
7
+ /doc/
8
+ /pkg/
9
+ /spec/reports/
10
+ /tmp/
11
+ /.yardoc
@@ -0,0 +1,106 @@
1
+ # Change Log
2
+ All notable changes to this project will be documented in this file.
3
+ This project adheres to [yob](https://github.com/yob/db2fog) and [itbeaver](http://itbeaver.co).
4
+
5
+ ## [0.9.0]
6
+ ### Added
7
+ - Support ruby version >= 2.0 and rails (active_record) verison >=3.2.0 && <5.0
8
+
9
+ ## [0.8.0] - 2012-06-18
10
+ ### Added
11
+ - Support configurable database names when restoring
12
+
13
+ ## [0.7.0] - 2011-11-03
14
+
15
+ ## [0.6.0] - 2011-10-24
16
+ ### Added
17
+ - Support for postgresql 8
18
+
19
+ ## [0.5.4] - 2011-10-17
20
+ ### Fixed
21
+ - Only clean files that were created by db2fog
22
+
23
+ ## [0.5.3] - 2011-10-12
24
+ ### Added
25
+ - Improve robustness of clean task
26
+
27
+ ## [0.5.2] - 2011-09-15
28
+ ### Fixed
29
+ - Fix restoring of postgresql databases (thanks Dan Neighman)
30
+
31
+ ## [0.5.1] - 2011-08-29
32
+ ### Added
33
+ - Relax fog dependency to allow higher versions
34
+
35
+ ## [0.5.0] - 2011-08-06
36
+ ### Added
37
+ - Initial postgresql support
38
+
39
+ ### Fixed
40
+ - Fix an encoding issue under 1.9
41
+
42
+ ### Removed
43
+ - Removed the statistics rake task
44
+
45
+ ## [0.4.2] - 2011-07-24
46
+ ### Fixed
47
+ - Fixed recording of most recent backup
48
+
49
+ ### Removed
50
+ - Remove runtime dependency on mysql2
51
+
52
+ ## [0.4.1] - 2011-07-23
53
+ ### Fixed
54
+ - Fixed cleaning of old backups
55
+
56
+ ## [0.4.0] - 2011-07-22
57
+ ### Added
58
+ - Forked db2s3 into db2fog
59
+
60
+ ## [0.3.1] - 2009-12-07
61
+ ### Fixed
62
+ - Fixed hardcoded DB name in statistics task
63
+
64
+ ## [0.3.0] - 20090-12-06
65
+ ### Added
66
+ - Added db2s3:backup:clean task to delete old backups
67
+ - Added dependency on activesupport for the clean task
68
+
69
+ ## [0.2.6] - 2009-12-06
70
+ ### Added
71
+ - Add statistics task to show you the size of your tables
72
+ - Only add username to mysql command line if provided in database.yml
73
+
74
+ ### Removed
75
+ - Remove metrics task, since it was far too inaccurate
76
+
77
+ ## [0.2.5]
78
+ ### Added
79
+ - Use host provided in database.yml
80
+
81
+ ## [0.2.4] - 2009-10-02
82
+ ### Fixed
83
+ - Fix credentials bug
84
+
85
+ ## 0.2.3
86
+ ### Added
87
+ - Keep old backups around
88
+
89
+ [0.9.0]: https://github.com/itbeaver/db2fog/compare/v0.8.0...0.9.0
90
+ [0.8.0]: https://github.com/itbeaver/db2fog/compare/v0.7.0...0.8.0
91
+ [0.7.0]: https://github.com/itbeaver/db2fog/compare/v0.6.0...0.7.0
92
+ [0.6.0]: https://github.com/itbeaver/db2fog/compare/v0.5.4...0.6.0
93
+ [0.5.4]: https://github.com/itbeaver/db2fog/compare/v0.5.3...0.5.4
94
+ [0.5.3]: https://github.com/itbeaver/db2fog/compare/v0.5.2...0.5.3
95
+ [0.5.2]: https://github.com/itbeaver/db2fog/compare/v0.5.1...0.5.2
96
+ [0.5.1]: https://github.com/itbeaver/db2fog/compare/v0.5.0...0.5.1
97
+ [0.5.0]: https://github.com/itbeaver/db2fog/compare/v0.4.2...0.5.0
98
+ [0.4.2]: https://github.com/itbeaver/db2fog/compare/v0.4.1...0.4.2
99
+ [0.4.1]: https://github.com/itbeaver/db2fog/compare/v0.4.0...0.4.1
100
+ [0.4.0]: https://github.com/itbeaver/db2fog/compare/v0.3.1...0.4.0
101
+ [0.3.1]: https://github.com/itbeaver/db2fog/compare/v0.3.0...0.3.1
102
+ [0.3.0]: https://github.com/itbeaver/db2fog/compare/v0.2.6...0.3.0
103
+ [0.2.6]: https://github.com/itbeaver/db2fog/compare/v0.2.5...0.2.6
104
+ [0.2.5]: https://github.com/itbeaver/db2fog/compare/v0.2.4...0.2.5
105
+ [0.2.4]: https://github.com/itbeaver/db2fog/compare/v0.2.3...0.2.4
106
+
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -34,6 +34,7 @@ providers they should work with just a config change to Db2Fog.
34
34
  :aws_secret_access_key => 'yoursecretkey',
35
35
  :directory => 'bucket-name',
36
36
  :provider => 'AWS'
37
+ :region => 'region'
37
38
  }
38
39
 
39
40
  === Rackspace Cloudfiles
@@ -74,7 +75,7 @@ pg_version 8 or 9
74
75
  == Usage
75
76
 
76
77
  # Add to your crontab or whatever
77
- rake db2fog:full
78
+ rake db2fog:backup:full
78
79
 
79
80
  # Handy tasks
80
81
  rake db2fog:restore # You should be testing this regularly
@@ -88,26 +89,6 @@ do this:
88
89
  DB2Fog.new.backup
89
90
  DB2Fog.new.clean
90
91
 
91
- === Restoring the production DB to development
92
-
93
- It might be useful to give developers a quick way to restore a production
94
- backup to their local machines. Create a rake task like so:
95
-
96
-
97
- namespace :db do
98
- task :restore => :environment do
99
- DB2Fog.new.restore("production_db_name")
100
- end
101
-
102
- namespace :production do
103
- task :pull => ["db:drop", "db:create", "db:restore", "db:migrate"]
104
- end
105
- end
106
-
107
- .. and then run
108
-
109
- bundle exec rake db:production:pull
110
-
111
92
  == Compatibility
112
93
 
113
94
  This is pure so ruby should run on most ruby VMs. I develop on MRI 1.9.2.
@@ -0,0 +1,24 @@
1
+ require "rubygems"
2
+ require "bundler"
3
+ Bundler.setup
4
+
5
+ require 'rake'
6
+ require 'rspec/core/rake_task'
7
+ require "bundler/gem_tasks"
8
+
9
+ desc "Default Task"
10
+ task :default => [ :spec ]
11
+
12
+ # run all rspecs
13
+ desc "Run all rspec files"
14
+ RSpec::Core::RakeTask.new("spec") do |t|
15
+ t.rspec_opts = ["--color", "--format progress"]
16
+ # turn this off for now. I'd like to leave it on, but thor throws
17
+ # a large amount of noise to my console if I do
18
+ #t.ruby_opts = "-w"
19
+ end
20
+
21
+ desc "Create test database"
22
+ task :create_test_db do
23
+ `mysqladmin -u root create db2s3_unittest`
24
+ end
@@ -0,0 +1,27 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "db2fog"
3
+ s.version = "0.9.0"
4
+ s.licenses = ['MIT']
5
+ s.summary = "db2fog provides rake tasks for backing up and restoring your DB to cloud storage providers"
6
+ s.description = "db2fog provides rake tasks for backing up and restoring your DB to cloud storage providers"
7
+ s.authors = ["James Healy", "Alexander Bobrov", "Denis Erofeev"]
8
+ s.email = ["support@itbeaver.co"]
9
+ s.homepage = "https://github.com/itbeaver/db2fog"
10
+ s.has_rdoc = true
11
+ s.rdoc_options << "--title" << "DB2Fog" << "--line-numbers"
12
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
13
+
14
+ s.required_rubygems_version = ">=1.3.2"
15
+ s.required_ruby_version = ">=2.0.0"
16
+
17
+ s.add_dependency("rails", ['>=3.2.0', '<5.0'])
18
+ s.add_dependency("activerecord", ['>=3.2.0', '<5.0'])
19
+
20
+ s.add_dependency("fog", "~> 1.0")
21
+
22
+ s.add_development_dependency('bundler')
23
+ s.add_development_dependency("rake")
24
+ s.add_development_dependency("mysql2")
25
+ s.add_development_dependency("rspec", "~>2.6")
26
+ s.add_development_dependency("timecop", "~>0.3.5")
27
+ end
@@ -16,19 +16,8 @@ class DB2Fog
16
16
  store.store(most_recent_dump_file_name, file_name)
17
17
  end
18
18
 
19
- # download the latest backup and restore it to the current database.
20
- #
21
- # **** CAUTION **** The database for the current RAILS_ENV will be emptied
22
- # and all tables will be recreated.
23
- #
24
- # The database you're restoring from and restoring to may have a different
25
- # names (ie. restoring mydb_production into mydb_development). If that's
26
- # the case, you should provide the source database name (ie. mydb_production)
27
- # as an argument.
28
- #
29
- def restore(source_database_name = nil)
30
- most_recent_file_name = most_recent_dump_file_name(source_database_name)
31
- dump_file_name = store.fetch(most_recent_file_name).read
19
+ def restore
20
+ dump_file_name = store.fetch(most_recent_dump_file_name).read
32
21
  file = store.fetch(dump_file_name)
33
22
  database.restore(file.path)
34
23
  end
@@ -72,38 +61,55 @@ class DB2Fog
72
61
  @store ||= FogStore.new
73
62
  end
74
63
 
75
- def most_recent_dump_file_name(database_name = nil)
76
- database_name ||= db_credentials[:database]
77
- "most-recent-dump-#{database_name}.txt"
64
+ def most_recent_dump_file_name
65
+ "most-recent-dump-#{db_credentials[:database]}.txt"
78
66
  end
79
67
 
80
68
  def db_credentials
81
- ActiveRecord::Base.connection.instance_eval { @config } # Dodgy!
69
+ if Object.const_defined?(:ActiveRecord)
70
+ ActiveRecord::Base.connection.instance_eval { @config } # Dodgy!
71
+ elsif Object.const_defined?(:DataMapper)
72
+ DataMapper.repository.adapter.options.inject({}){|m,(k,v)| m[k.to_sym] = v;m }
73
+ elsif Object.const_defined?(:Sequel)
74
+ opts = Sequel::DATABASES.first.opts
75
+ opts[:username] = opts[:user]
76
+ opts
77
+ end
82
78
  end
83
79
 
84
80
  def database
85
81
  @database ||= case db_credentials[:adapter]
86
82
  when /mysql/ then MysqlAdaptor.new(db_credentials)
87
- when /postgres/ then PsqlAdaptor.new(db_credentials)
83
+ when /postgres/ || /postgis/ then PsqlAdaptor.new(db_credentials)
88
84
  else
89
85
  raise "database adaptor '#{db_credentials[:adapter]}' not supported"
90
86
  end
91
87
  end
92
88
 
93
- class MysqlAdaptor
89
+ class BaseAdaptor
94
90
 
95
91
  def initialize(credentials)
96
92
  @credentials = credentials
97
93
  end
98
94
 
95
+ def run(command)
96
+ result = system(command)
97
+ raise("error, process exited with status #{$?.exitstatus}") unless result
98
+ end
99
+
99
100
  def dump
100
101
  dump_file = Tempfile.new("dump")
102
+ run(dump_command(dump_file))
103
+ dump_file.path
104
+ end
101
105
 
106
+ end
107
+
108
+ class MysqlAdaptor < BaseAdaptor
109
+
110
+ def dump_command(dump_file)
102
111
  cmd = "mysqldump --quick --single-transaction --create-options #{mysql_options}"
103
112
  cmd += " | gzip -9 > #{dump_file.path}"
104
- run(cmd)
105
-
106
- dump_file.path
107
113
  end
108
114
 
109
115
  def restore(path)
@@ -121,27 +127,13 @@ class DB2Fog
121
127
  cmd += " #{@credentials[:database]}"
122
128
  end
123
129
 
124
- def run(command)
125
- result = system(command)
126
- raise("error, process exited with status #{$?.exitstatus}") unless result
127
- end
128
-
129
130
  end
130
131
 
131
- class PsqlAdaptor
132
-
133
- def initialize(credentials)
134
- @credentials = credentials
135
- end
136
-
137
- def dump
138
- dump_file = Tempfile.new("dump")
139
-
140
- cmd = "pg_dump --clean --format=p #{pg_dump_options}"
141
- cmd += " | gzip -9 > #{dump_file.path}"
142
- run(cmd)
132
+ class PsqlAdaptor < BaseAdaptor
143
133
 
144
- dump_file.path
134
+ def dump_command(dump_file)
135
+ cmd = "pg_dump --clean --format=p --compress=9 #{pg_dump_options}"
136
+ cmd += " > #{dump_file.path}"
145
137
  end
146
138
 
147
139
  def restore(path)
@@ -171,11 +163,6 @@ class DB2Fog
171
163
  opts[:pg_version] || 9
172
164
  end
173
165
 
174
- def run(command)
175
- result = system(command)
176
- raise("error, process exited with status #{$?.exitstatus}") unless result
177
- end
178
-
179
166
  def database_options
180
167
  if DB2Fog.config.respond_to?(:[])
181
168
  DB2Fog.config[:database_options]
metadata CHANGED
@@ -1,167 +1,184 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db2fog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
5
- prerelease:
4
+ version: 0.9.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - James Healy
8
+ - Alexander Bobrov
9
+ - Denis Erofeev
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-06-18 00:00:00.000000000 Z
13
+ date: 2016-02-08 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rails
16
17
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '3.0'
21
+ version: 3.2.0
22
+ - - "<"
23
+ - !ruby/object:Gem::Version
24
+ version: '5.0'
22
25
  type: :runtime
23
26
  prerelease: false
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
28
  requirements:
27
- - - ~>
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 3.2.0
32
+ - - "<"
28
33
  - !ruby/object:Gem::Version
29
- version: '3.0'
34
+ version: '5.0'
30
35
  - !ruby/object:Gem::Dependency
31
36
  name: activerecord
32
37
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
38
  requirements:
35
- - - ~>
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 3.2.0
42
+ - - "<"
36
43
  - !ruby/object:Gem::Version
37
- version: '3.0'
44
+ version: '5.0'
38
45
  type: :runtime
39
46
  prerelease: false
40
47
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
48
  requirements:
43
- - - ~>
49
+ - - ">="
44
50
  - !ruby/object:Gem::Version
45
- version: '3.0'
51
+ version: 3.2.0
52
+ - - "<"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: fog
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ~>
59
+ - - "~>"
52
60
  - !ruby/object:Gem::Version
53
61
  version: '1.0'
54
62
  type: :runtime
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ~>
66
+ - - "~>"
60
67
  - !ruby/object:Gem::Version
61
68
  version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
62
83
  - !ruby/object:Gem::Dependency
63
84
  name: rake
64
85
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
86
  requirements:
67
- - - ! '>='
87
+ - - ">="
68
88
  - !ruby/object:Gem::Version
69
89
  version: '0'
70
90
  type: :development
71
91
  prerelease: false
72
92
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
93
  requirements:
75
- - - ! '>='
94
+ - - ">="
76
95
  - !ruby/object:Gem::Version
77
96
  version: '0'
78
97
  - !ruby/object:Gem::Dependency
79
98
  name: mysql2
80
99
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
100
  requirements:
83
- - - ! '>='
101
+ - - ">="
84
102
  - !ruby/object:Gem::Version
85
103
  version: '0'
86
104
  type: :development
87
105
  prerelease: false
88
106
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
107
  requirements:
91
- - - ! '>='
108
+ - - ">="
92
109
  - !ruby/object:Gem::Version
93
110
  version: '0'
94
111
  - !ruby/object:Gem::Dependency
95
112
  name: rspec
96
113
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
114
  requirements:
99
- - - ~>
115
+ - - "~>"
100
116
  - !ruby/object:Gem::Version
101
117
  version: '2.6'
102
118
  type: :development
103
119
  prerelease: false
104
120
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
121
  requirements:
107
- - - ~>
122
+ - - "~>"
108
123
  - !ruby/object:Gem::Version
109
124
  version: '2.6'
110
125
  - !ruby/object:Gem::Dependency
111
126
  name: timecop
112
127
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
128
  requirements:
115
- - - ~>
129
+ - - "~>"
116
130
  - !ruby/object:Gem::Version
117
131
  version: 0.3.5
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
135
  requirements:
123
- - - ~>
136
+ - - "~>"
124
137
  - !ruby/object:Gem::Version
125
138
  version: 0.3.5
126
139
  description: db2fog provides rake tasks for backing up and restoring your DB to cloud
127
140
  storage providers
128
141
  email:
129
- - james@yob.id.au
142
+ - support@itbeaver.co
130
143
  executables: []
131
144
  extensions: []
132
145
  extra_rdoc_files: []
133
146
  files:
147
+ - ".gitignore"
148
+ - CHANGELOG.md
149
+ - Gemfile
150
+ - README.rdoc
151
+ - Rakefile
152
+ - db2fog.gemspec
153
+ - lib/db2fog.rb
134
154
  - lib/db2fog/railtie.rb
135
155
  - lib/db2fog/tasks.rb
136
- - lib/db2fog.rb
137
- - README.rdoc
138
- - HISTORY
139
- homepage: http://github.com/yob/db2fog
140
- licenses: []
156
+ homepage: https://github.com/itbeaver/db2fog
157
+ licenses:
158
+ - MIT
159
+ metadata: {}
141
160
  post_install_message:
142
161
  rdoc_options:
143
- - --title
162
+ - "--title"
144
163
  - DB2Fog
145
- - --line-numbers
164
+ - "--line-numbers"
146
165
  require_paths:
147
166
  - lib
148
167
  required_ruby_version: !ruby/object:Gem::Requirement
149
- none: false
150
168
  requirements:
151
- - - ! '>='
169
+ - - ">="
152
170
  - !ruby/object:Gem::Version
153
- version: 1.8.7
171
+ version: 2.0.0
154
172
  required_rubygems_version: !ruby/object:Gem::Requirement
155
- none: false
156
173
  requirements:
157
- - - ! '>='
174
+ - - ">="
158
175
  - !ruby/object:Gem::Version
159
176
  version: 1.3.2
160
177
  requirements: []
161
178
  rubyforge_project:
162
- rubygems_version: 1.8.23
179
+ rubygems_version: 2.4.5.1
163
180
  signing_key:
164
- specification_version: 3
181
+ specification_version: 4
165
182
  summary: db2fog provides rake tasks for backing up and restoring your DB to cloud
166
183
  storage providers
167
184
  test_files: []
data/HISTORY DELETED
@@ -1,38 +0,0 @@
1
- v0.8.0 (18th June 2012)
2
- - Support configurable database names when restoring
3
- v0.6.0 (24th October 2011)
4
- - Support for postgresql 8
5
- v0.5.4 (17th October 2011)
6
- - only clean files that were created by db2fog
7
- v0.5.3 (12th October 2011)
8
- - improve robustness of clean task
9
- v0.5.2 (15th September 2011)
10
- - fix restoring of postgresql databases (thanks Dan Neighman)
11
- v0.5.1 (29th August 2011)
12
- - relax fog dependency to allow higher versions
13
- v0.5.0 (6th August 2011)
14
- - initial postgresql support
15
- - removed the statistics rake task
16
- - fix an encoding issue under 1.9
17
- v0.4.2 (24th July 2011)
18
- - fixed recording of most recent backup
19
- - remove runtime dependency on mysql2
20
- v0.4.1 (23rd July 2011)
21
- - fixed cleaning of old backups
22
- v0.4.0 (22nd July 2011)
23
- - forked db2s3 into db2fog
24
- 0.3.1 (7 Dec 2009)
25
- - Fixed hardcoded DB name in statistics task
26
- 0.3.0 (6 Dec 2009)
27
- - Added db2s3:backup:clean task to delete old backups
28
- - Added dependency on activesupport for the clean task
29
- 0.2.6 (6 Dec 2009)
30
- - Remove metrics task, since it was far too inaccurate
31
- - Add statistics task to show you the size of your tables
32
- - Only add username to mysql command line if provided in database.yml
33
- 0.2.5
34
- - Use host provided in database.yml
35
- 0.2.4 (2 Sep 2009)
36
- - Fix credentials bug
37
- 0.2.3
38
- - Keep old backups around