travis-backup 0.1.2 → 0.3.0

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -1
  4. data/README.md +14 -4
  5. data/lib/backup/load_from_files.rb +245 -0
  6. data/lib/backup/move_logs.rb +43 -0
  7. data/lib/backup/remove_orphans.rb +177 -0
  8. data/lib/backup/remove_specified/remove_heavy_data.rb +99 -0
  9. data/lib/backup/remove_specified/remove_with_all_dependencies.rb +51 -0
  10. data/lib/backup/remove_specified/shared.rb +20 -0
  11. data/lib/backup/remove_specified.rb +68 -0
  12. data/lib/backup/save_file.rb +43 -0
  13. data/lib/backup/save_id_hash_to_file.rb +33 -0
  14. data/lib/backup/save_nullified_rels_to_file.rb +29 -0
  15. data/lib/config.rb +37 -7
  16. data/lib/db_helper.rb +27 -0
  17. data/lib/dry_run_reporter.rb +47 -0
  18. data/lib/id_hash.rb +97 -0
  19. data/lib/ids_of_all_dependencies.rb +330 -0
  20. data/lib/model.rb +77 -0
  21. data/lib/models/abuse.rb +9 -0
  22. data/lib/models/annotation.rb +8 -0
  23. data/lib/models/branch.rb +9 -1
  24. data/lib/models/broadcast.rb +8 -0
  25. data/lib/models/build.rb +23 -3
  26. data/lib/models/commit.rb +8 -1
  27. data/lib/models/cron.rb +2 -1
  28. data/lib/models/email.rb +8 -0
  29. data/lib/models/invoice.rb +8 -0
  30. data/lib/models/job.rb +10 -2
  31. data/lib/models/log.rb +1 -1
  32. data/lib/models/membership.rb +9 -0
  33. data/lib/models/message.rb +8 -0
  34. data/lib/models/organization.rb +15 -1
  35. data/lib/models/owner_group.rb +8 -0
  36. data/lib/models/permission.rb +9 -0
  37. data/lib/models/pull_request.rb +5 -1
  38. data/lib/models/queueable_job.rb +8 -0
  39. data/lib/models/repository.rb +16 -3
  40. data/lib/models/request.rb +11 -1
  41. data/lib/models/ssl_key.rb +2 -1
  42. data/lib/models/stage.rb +4 -1
  43. data/lib/models/star.rb +9 -0
  44. data/lib/models/subscription.rb +9 -0
  45. data/lib/models/tag.rb +7 -1
  46. data/lib/models/token.rb +8 -0
  47. data/lib/models/trial.rb +9 -0
  48. data/lib/models/trial_allowance.rb +9 -0
  49. data/lib/models/user.rb +33 -1
  50. data/lib/models/user_beta_feature.rb +8 -0
  51. data/lib/nullify_dependencies.rb +42 -0
  52. data/lib/travis-backup.rb +40 -266
  53. data/travis-backup.gemspec +2 -1
  54. metadata +53 -9
  55. data/Gemfile.lock +0 -212
  56. data/lib/models/model.rb +0 -8
@@ -1,10 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'models/model'
3
+ require 'model'
4
4
  require 'models/repository'
5
5
 
6
6
  class Request < Model
7
+ belongs_to :owner, polymorphic: true
8
+ belongs_to :sender, polymorphic: true
7
9
  belongs_to :repository
10
+ belongs_to :branch
11
+ belongs_to :pull_request
12
+ belongs_to :tag
13
+ belongs_to :commit
14
+ has_many :abuses
15
+ has_many :messages, as: :subject
16
+ has_many :jobs, as: :source
17
+ has_many :builds
8
18
 
9
19
  self.table_name = 'requests'
10
20
  end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'models/model'
3
+ require 'model'
4
4
 
5
5
  class SslKey < Model
6
+ belongs_to :repository
6
7
  self.table_name = 'ssl_keys'
7
8
  end
data/lib/models/stage.rb CHANGED
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'models/model'
3
+ require 'model'
4
4
 
5
5
  class Stage < Model
6
+ belongs_to :build
7
+ has_many :jobs
8
+
6
9
  self.table_name = 'stages'
7
10
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'model'
4
+
5
+ class Star < Model
6
+ belongs_to :repository
7
+ belongs_to :user
8
+ self.table_name = 'stars'
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'model'
4
+
5
+ class Subscription < Model
6
+ belongs_to :owner, polymorphic: true
7
+ has_many :invoices
8
+ self.table_name = 'subscriptions'
9
+ end
data/lib/models/tag.rb CHANGED
@@ -1,7 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'models/model'
3
+ require 'model'
4
4
 
5
5
  class Tag < Model
6
+ belongs_to :last_build, foreign_key: :last_build_id, class_name: 'Build'
7
+ belongs_to :repository
8
+ has_many :builds
9
+ has_many :commits
10
+ has_many :requests
11
+
6
12
  self.table_name = 'tags'
7
13
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'model'
4
+
5
+ class Token < Model
6
+ belongs_to :user
7
+ self.table_name = 'tokens'
8
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'model'
4
+
5
+ class Trial < Model
6
+ belongs_to :owner, polymorphic: true
7
+ has_many :trial_allowances
8
+ self.table_name = 'trials'
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'model'
4
+
5
+ class TrialAllowance < Model
6
+ belongs_to :creator, polymorphic: true
7
+ belongs_to :trial
8
+ self.table_name = 'trial_allowances'
9
+ end
data/lib/models/user.rb CHANGED
@@ -1,7 +1,39 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'models/model'
3
+ require 'model'
4
+ require 'models/abuse'
5
+ require 'models/subscription'
6
+ require 'models/owner_group'
7
+ require 'models/trial'
8
+ require 'models/trial_allowance'
9
+ require 'models/broadcast'
10
+ require 'models/star'
11
+ require 'models/permission'
12
+ require 'models/token'
13
+ require 'models/email'
14
+ require 'models/membership'
15
+ require 'models/user_beta_feature'
4
16
 
5
17
  class User < Model
18
+ has_many :builds_for_that_this_user_is_owner, as: :owner, class_name: 'Build'
19
+ has_many :builds_for_that_this_user_is_sender, as: :sender, class_name: 'Build'
20
+ has_many :repositories, as: :owner
21
+ has_many :jobs, as: :owner
22
+ has_many :requests_for_that_this_user_is_owner, as: :owner, class_name: 'Request'
23
+ has_many :abuses, as: :owner
24
+ has_many :subscriptions, as: :owner
25
+ has_many :owner_groups, as: :owner
26
+ has_many :trials, as: :owner
27
+ has_many :trial_allowances, as: :creator
28
+ has_many :broadcasts, as: :recipient
29
+ has_many :requests_for_that_this_user_is_sender, as: :sender, class_name: 'Request'
30
+
31
+ has_many :stars
32
+ has_many :permissions
33
+ has_many :tokens
34
+ has_many :emails
35
+ has_many :memberships
36
+ has_many :user_beta_features
37
+
6
38
  self.table_name = 'users'
7
39
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'model'
4
+
5
+ class UserBetaFeature < Model
6
+ belongs_to :user
7
+ self.table_name = 'user_beta_features'
8
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NullifyDependencies
4
+ def nullify_dependencies(dependencies_symbols_to_nullify)
5
+ dependencies_symbols_to_nullify.map do |symbol|
6
+ dependencies = self.send(symbol) # e.g. build.tags_for_that_this_build_is_last
7
+
8
+ dependencies.map do |entry|
9
+ foreign_key = self.class.reflect_on_association(symbol).foreign_key.to_sym
10
+ entry.update(foreign_key => nil) # e.g. tag.update(last_build_id: nil)
11
+ {
12
+ related_table: entry.class.table_name,
13
+ foreign_key: foreign_key,
14
+ parent_id: self.id,
15
+ related_id: entry.id
16
+ }
17
+ end
18
+ end.flatten
19
+ end
20
+
21
+ def nullify_all_dependencies
22
+ nullify_dependencies(symbols_of_all_direct_dependencies)
23
+ end
24
+
25
+ def nullify_default_dependencies
26
+ nullify_dependencies(default_dependencies_symbols_to_nullify)
27
+ end
28
+
29
+ def default_dependencies_symbols_to_nullify
30
+ self.class.default_dependencies_symbols_to_nullify
31
+ end
32
+
33
+ def self.default_dependencies_symbols_to_nullify
34
+ raise "self.default_dependencies_symbols_to_nullify not implemented in the #{self.class} class"
35
+ end
36
+
37
+ def default_dependencies_to_nullify
38
+ default_dependencies_symbols_to_nullify.map do |symbol|
39
+ self.send(symbol).to_a
40
+ end.flatten(1)
41
+ end
42
+ end
data/lib/travis-backup.rb CHANGED
@@ -3,298 +3,72 @@
3
3
  require 'active_support/core_ext/array'
4
4
  require 'active_support/time'
5
5
  require 'config'
6
+ require 'db_helper'
7
+ require 'dry_run_reporter'
8
+ require 'models/abuse'
9
+ require 'models/annotation'
6
10
  require 'models/repository'
7
- require 'models/log'
8
11
  require 'models/branch'
9
- require 'models/tag'
12
+ require 'models/broadcast'
13
+ require 'models/build'
10
14
  require 'models/commit'
11
15
  require 'models/cron'
16
+ require 'models/email'
17
+ require 'models/invoice'
18
+ require 'models/job'
19
+ require 'models/log'
20
+ require 'models/membership'
21
+ require 'models/message'
22
+ require 'models/organization'
23
+ require 'models/owner_group'
24
+ require 'models/permission'
12
25
  require 'models/pull_request'
13
- require 'models/ssl_key'
26
+ require 'models/queueable_job'
27
+ require 'models/repository'
14
28
  require 'models/request'
29
+ require 'models/ssl_key'
15
30
  require 'models/stage'
31
+ require 'models/star'
32
+ require 'models/subscription'
33
+ require 'models/tag'
34
+ require 'models/token'
35
+ require 'models/trial_allowance'
36
+ require 'models/trial'
37
+ require 'models/user_beta_feature'
38
+ require 'models/user'
39
+ require 'backup/move_logs'
40
+ require 'backup/remove_orphans'
41
+ require 'backup/load_from_files'
42
+ require 'backup/remove_specified'
16
43
 
17
44
  # main travis-backup class
18
45
  class Backup
19
46
  attr_accessor :config
20
- attr_reader :dry_run_report
21
47
 
22
48
  def initialize(config_args={})
23
49
  @config = Config.new(config_args)
50
+ @db_helper = DbHelper.new(@config)
24
51
 
25
52
  if @config.dry_run
26
- @dry_run_report = {builds: [], jobs: [], logs: [], requests: []}
53
+ @dry_run_reporter = DryRunReporter.new
27
54
  end
28
-
29
- connect_db
30
55
  end
31
56
 
32
- def connect_db(url=@config.database_url)
33
- ActiveRecord::Base.establish_connection(url)
57
+ def dry_run_report
58
+ @dry_run_reporter.report
34
59
  end
35
60
 
36
61
  def run(args={})
37
- user_id = args[:user_id] || @config.user_id
38
- repo_id = args[:repo_id] || @config.repo_id
39
- org_id = args[:org_id] || @config.org_id
40
-
41
- if user_id
42
- owner_id = user_id
43
- owner_type = 'User'
44
- elsif org_id
45
- owner_id = org_id
46
- owner_type = 'Organization'
47
- end
48
-
49
62
  if @config.move_logs
50
- move_logs
63
+ Backup::MoveLogs.new(@config, @db_helper, @dry_run_reporter).run
64
+ elsif @config.load_from_files
65
+ Backup::LoadFromFiles.new(@config, @dry_run_reporter).run
51
66
  elsif @config.remove_orphans
52
- remove_orphans
53
- elsif owner_id
54
- process_repos_for_owner(owner_id, owner_type)
55
- elsif repo_id
56
- process_repo_with_id(repo_id)
57
- else
58
- process_all_repos
59
- end
60
-
61
- print_dry_run_report if @config.dry_run
62
- end
63
-
64
- def process_repos_for_owner(owner_id, owner_type)
65
- Repository.where('owner_id = ? and owner_type = ?', owner_id, owner_type).order(:id).each do |repository|
66
- process_repo(repository)
67
- end
68
- end
69
-
70
- def process_repo_with_id(repo_id)
71
- process_repo(Repository.find(repo_id))
72
- end
73
-
74
- def process_all_repos
75
- Repository.order(:id).each do |repository|
76
- process_repo(repository)
77
- end
78
- end
79
-
80
- def print_dry_run_report
81
- if @dry_run_report.to_a.map(&:second).flatten.empty?
82
- puts 'Dry run active. No data would be removed in normal run.'
83
- else
84
- puts 'Dry run active. The following data would be removed in normal run:'
85
-
86
- @dry_run_report.to_a.map(&:first).each do |symbol|
87
- print_dry_run_report_line(symbol)
88
- end
89
- end
90
- end
91
-
92
- def print_dry_run_report_line(symbol)
93
- puts " - #{symbol}: #{@dry_run_report[symbol].to_json}" if @dry_run_report[symbol].any?
94
- end
95
-
96
- def process_repo(repository)
97
- process_repo_builds(repository)
98
- process_repo_requests(repository)
99
- end
100
-
101
- def process_repo_builds(repository) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
102
- threshold = @config.threshold.to_i.months.ago.to_datetime
103
- current_build_id = repository.current_build_id || -1
104
- repository.builds.where('created_at < ? and id != ?', threshold, current_build_id)
105
- .in_groups_of(@config.limit.to_i, false).map do |builds_batch|
106
- @config.if_backup ? save_and_destroy_builds_batch(builds_batch, repository) : destroy_builds_batch(builds_batch)
107
- end.compact
108
- end
109
-
110
- def process_repo_requests(repository)
111
- threshold = @config.threshold.to_i.months.ago.to_datetime
112
- repository.requests.where('created_at < ?', threshold)
113
- .in_groups_of(@config.limit.to_i, false).map do |requests_batch|
114
- @config.if_backup ? save_and_destroy_requests_batch(requests_batch, repository) : destroy_requests_batch(requests_batch)
115
- end.compact
116
- end
117
-
118
- def move_logs
119
- return move_logs_dry if config.dry_run
120
-
121
- connect_db(@config.database_url)
122
- Log.order(:id).in_groups_of(@config.limit.to_i, false).map do |logs_batch|
123
- log_hashes = logs_batch.as_json
124
- connect_db(@config.destination_db_url)
125
-
126
- log_hashes.each do |log_hash|
127
- new_log = Log.new(log_hash)
128
- new_log.save!
129
- end
130
-
131
- connect_db(@config.database_url)
132
-
133
- logs_batch.each(&:destroy)
134
- end
135
- end
136
-
137
- def move_logs_dry
138
- dry_run_report[:logs].concat(Log.order(:id).map(&:id))
139
- end
140
-
141
- def remove_orphans
142
- remove_orphans_for_table(Repository, 'repositories', 'builds', 'current_build_id')
143
- remove_orphans_for_table(Repository, 'repositories', 'builds', 'last_build_id')
144
- remove_orphans_for_table(Build, 'builds', 'repositories', 'repository_id')
145
- remove_orphans_for_table(Build, 'builds', 'commits', 'commit_id')
146
- remove_orphans_for_table(Build, 'builds', 'requests', 'request_id')
147
- remove_orphans_for_table(Build, 'builds', 'pull_requests', 'pull_request_id')
148
- remove_orphans_for_table(Build, 'builds', 'branches', 'branch_id')
149
- remove_orphans_for_table(Build, 'builds', 'tags', 'tag_id')
150
- remove_orphans_for_table(Job, 'jobs', 'repositories', 'repository_id')
151
- remove_orphans_for_table(Job, 'jobs', 'commits', 'commit_id')
152
- remove_orphans_for_table(Job, 'jobs', 'stages', 'stage_id')
153
- remove_orphans_for_table(Branch, 'branches', 'repositories', 'repository_id')
154
- remove_orphans_for_table(Branch, 'branches', 'builds', 'last_build_id')
155
- remove_orphans_for_table(Tag, 'tags', 'repositories', 'repository_id')
156
- remove_orphans_for_table(Tag, 'tags', 'builds', 'last_build_id')
157
- remove_orphans_for_table(Commit, 'commits', 'repositories', 'repository_id')
158
- remove_orphans_for_table(Commit, 'commits', 'branches', 'branch_id')
159
- remove_orphans_for_table(Commit, 'commits', 'tags', 'tag_id')
160
- remove_orphans_for_table(Cron, 'crons', 'branches', 'branch_id')
161
- remove_orphans_for_table(PullRequest, 'pull_requests', 'repositories', 'repository_id')
162
- remove_orphans_for_table(SslKey, 'ssl_keys', 'repositories', 'repository_id')
163
- remove_orphans_for_table(Request, 'requests', 'commits', 'commit_id')
164
- remove_orphans_for_table(Request, 'requests', 'pull_requests', 'pull_request_id')
165
- remove_orphans_for_table(Request, 'requests', 'branches', 'branch_id')
166
- remove_orphans_for_table(Request, 'requests', 'tags', 'tag_id')
167
- remove_orphans_for_table(Stage, 'stages', 'builds', 'build_id')
168
- end
169
-
170
- def remove_orphans_for_table(model_class, table_a_name, table_b_name, fk_name)
171
- for_delete = model_class.find_by_sql(%{
172
- select a.*
173
- from #{table_a_name} a
174
- left join #{table_b_name} b
175
- on a.#{fk_name} = b.id
176
- where
177
- a.#{fk_name} is not null
178
- and b.id is null;
179
- })
180
-
181
- if config.dry_run
182
- key = table_a_name.to_sym
183
- dry_run_report[key] = [] if dry_run_report[key].nil?
184
- dry_run_report[key].concat(for_delete.map(&:id))
185
- dry_run_report[key].uniq!
67
+ Backup::RemoveOrphans.new(@config, @dry_run_reporter).run
186
68
  else
187
- model_class.where(id: for_delete.map(&:id)).destroy_all
188
- end
189
- end
190
-
191
- private
192
-
193
- def save_and_destroy_builds_batch(builds_batch, repository)
194
- builds_export = export_builds(builds_batch)
195
- file_name = "repository_#{repository.id}_builds_#{builds_batch.first.id}-#{builds_batch.last.id}.json"
196
- pretty_json = JSON.pretty_generate(builds_export)
197
- if save_file(file_name, pretty_json)
198
- destroy_builds_batch(builds_batch)
69
+ Backup::RemoveSpecified.new(@config, @dry_run_reporter).run(args)
199
70
  end
200
- builds_export
201
- end
202
-
203
- def destroy_builds_batch(builds_batch)
204
- return destroy_builds_batch_dry(builds_batch) if @config.dry_run
205
-
206
- builds_batch.each(&:destroy)
207
- end
208
71
 
209
- def destroy_builds_batch_dry(builds_batch)
210
- @dry_run_report[:builds].concat(builds_batch.map(&:id))
211
-
212
- jobs = builds_batch.map do |build|
213
- build.jobs.map(&:id) || []
214
- end.flatten
215
-
216
- @dry_run_report[:jobs].concat(jobs)
217
-
218
- logs = builds_batch.map do |build|
219
- build.jobs.map do |job|
220
- job.logs.map(&:id) || []
221
- end.flatten || []
222
- end.flatten
223
-
224
- @dry_run_report[:logs].concat(logs)
225
- end
226
-
227
- def save_and_destroy_requests_batch(requests_batch, repository)
228
- requests_export = export_requests(requests_batch)
229
- file_name = "repository_#{repository.id}_requests_#{requests_batch.first.id}-#{requests_batch.last.id}.json"
230
- pretty_json = JSON.pretty_generate(requests_export)
231
- if save_file(file_name, pretty_json)
232
- destroy_requests_batch(requests_batch)
233
- end
234
- requests_export
235
- end
236
-
237
- def destroy_requests_batch(requests_batch)
238
- return destroy_requests_batch_dry(requests_batch) if @config.dry_run
239
-
240
- requests_batch.each(&:destroy)
241
- end
242
-
243
- def destroy_requests_batch_dry(requests_batch)
244
- @dry_run_report[:requests].concat(requests_batch.map(&:id))
245
- end
246
-
247
- def save_file(file_name, content) # rubocop:disable Metrics/MethodLength
248
- return true if @config.dry_run
249
-
250
- saved = false
251
- begin
252
- unless File.directory?(@config.files_location)
253
- FileUtils.mkdir_p(@config.files_location)
254
- end
255
-
256
- File.open(file_path(file_name), 'w') do |file|
257
- file.write(content)
258
- file.close
259
- saved = true
260
- end
261
- rescue => e
262
- print "Failed to save #{file_name}, error: #{e.inspect}\n"
263
- end
264
- saved
265
- end
266
-
267
- def file_path(file_name)
268
- "#{@config.files_location}/#{file_name}"
269
- end
270
-
271
- def export_builds(builds)
272
- builds.map do |build|
273
- build_export = build.attributes
274
- build_export[:jobs] = export_jobs(build.jobs)
275
-
276
- build_export
277
- end
278
- end
279
-
280
- def export_jobs(jobs)
281
- jobs.map do |job|
282
- job_export = job.attributes
283
- job_export[:logs] = export_logs(job.logs)
284
-
285
- job_export
286
- end
287
- end
288
-
289
- def export_logs(logs)
290
- logs.map do |log|
291
- log.attributes
292
- end
293
- end
294
-
295
- def export_requests(requests)
296
- requests.map do |request|
297
- request.attributes
298
- end
72
+ @dry_run_reporter.print_report if @config.dry_run
299
73
  end
300
74
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'travis-backup'
3
- s.version = '0.1.2'
3
+ s.version = '0.3.0'
4
4
  s.summary = 'Travis CI backup tool'
5
5
  s.authors = ['Karol Selak']
6
6
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
@@ -26,4 +26,5 @@ Gem::Specification.new do |s|
26
26
  s.add_development_dependency 'listen'
27
27
  s.add_development_dependency 'rubocop', '~> 0.75.1'
28
28
  s.add_development_dependency 'rubocop-rspec'
29
+ s.add_development_dependency 'database_cleaner-active_record'
29
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: travis-backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol Selak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-13 00:00:00.000000000 Z
11
+ date: 2021-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -192,24 +192,37 @@ dependencies:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: database_cleaner-active_record
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
195
209
  description:
196
210
  email:
197
211
  executables:
198
212
  - setup
199
- - rails
213
+ - console
214
+ - rake
215
+ - travis_backup
200
216
  - spring
201
- - yarn
217
+ - rails
202
218
  - bundle
203
- - travis_backup
204
- - rake
205
- - console
219
+ - yarn
206
220
  extensions: []
207
221
  extra_rdoc_files: []
208
222
  files:
209
223
  - ".gitignore"
210
224
  - ".travis.yml"
211
225
  - Gemfile
212
- - Gemfile.lock
213
226
  - README.md
214
227
  - Rakefile
215
228
  - bin/bundle
@@ -247,22 +260,53 @@ files:
247
260
  - config/spring.rb
248
261
  - db/schema.sql
249
262
  - dump/.keep
263
+ - lib/backup/load_from_files.rb
264
+ - lib/backup/move_logs.rb
265
+ - lib/backup/remove_orphans.rb
266
+ - lib/backup/remove_specified.rb
267
+ - lib/backup/remove_specified/remove_heavy_data.rb
268
+ - lib/backup/remove_specified/remove_with_all_dependencies.rb
269
+ - lib/backup/remove_specified/shared.rb
270
+ - lib/backup/save_file.rb
271
+ - lib/backup/save_id_hash_to_file.rb
272
+ - lib/backup/save_nullified_rels_to_file.rb
250
273
  - lib/config.rb
274
+ - lib/db_helper.rb
275
+ - lib/dry_run_reporter.rb
276
+ - lib/id_hash.rb
277
+ - lib/ids_of_all_dependencies.rb
278
+ - lib/model.rb
279
+ - lib/models/abuse.rb
280
+ - lib/models/annotation.rb
251
281
  - lib/models/branch.rb
282
+ - lib/models/broadcast.rb
252
283
  - lib/models/build.rb
253
284
  - lib/models/commit.rb
254
285
  - lib/models/cron.rb
286
+ - lib/models/email.rb
287
+ - lib/models/invoice.rb
255
288
  - lib/models/job.rb
256
289
  - lib/models/log.rb
257
- - lib/models/model.rb
290
+ - lib/models/membership.rb
291
+ - lib/models/message.rb
258
292
  - lib/models/organization.rb
293
+ - lib/models/owner_group.rb
294
+ - lib/models/permission.rb
259
295
  - lib/models/pull_request.rb
296
+ - lib/models/queueable_job.rb
260
297
  - lib/models/repository.rb
261
298
  - lib/models/request.rb
262
299
  - lib/models/ssl_key.rb
263
300
  - lib/models/stage.rb
301
+ - lib/models/star.rb
302
+ - lib/models/subscription.rb
264
303
  - lib/models/tag.rb
304
+ - lib/models/token.rb
305
+ - lib/models/trial.rb
306
+ - lib/models/trial_allowance.rb
265
307
  - lib/models/user.rb
308
+ - lib/models/user_beta_feature.rb
309
+ - lib/nullify_dependencies.rb
266
310
  - lib/travis-backup.rb
267
311
  - log/.keep
268
312
  - package.json