github_records_archiver 0.2.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +16 -2
- data/bin/github-records-archiver +1 -73
- data/lib/github_records_archiver.rb +3 -1
- data/lib/github_records_archiver/cli.rb +72 -0
- data/lib/github_records_archiver/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb654d261b3fe129aad0e82db6b04026abae2b8b98abec9a15547ee04d42781c
|
4
|
+
data.tar.gz: 801eec766b98062c6484841f1c3089cb07bba749216caeddc4ec7c34acb03d7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7dfa550f2a3a483cf3713324c228ecbe9b8253d9c1841bb7c1a88cfe8a5b5ee26f45ce5679f23f2d75a7d5802b588e7899f9cde48765fda9e60645cafa7d992a
|
7
|
+
data.tar.gz: 23d37b11234cfc06eec4ab49c962c3d374b0dcd2d893a00863e0643395bbd7950a72948143618170a70dcac826846e629ee7adf95e70de2b64698e7e915437e3
|
data/.rubocop.yml
CHANGED
@@ -2,8 +2,7 @@ AllCops:
|
|
2
2
|
Exclude:
|
3
3
|
- archive/**/*
|
4
4
|
- vendor/**/*
|
5
|
-
|
6
|
-
|
5
|
+
|
7
6
|
Style/Documentation:
|
8
7
|
Enabled: false
|
9
8
|
|
@@ -11,10 +10,25 @@ Metrics/BlockLength:
|
|
11
10
|
Exclude:
|
12
11
|
- spec/**/*
|
13
12
|
- '*.gemspec'
|
13
|
+
- lib/github_records_archiver/cli.rb
|
14
14
|
|
15
15
|
Metrics/LineLength:
|
16
16
|
Exclude:
|
17
17
|
- spec/**/*
|
18
|
+
- lib/github_records_archiver/cli.rb
|
19
|
+
|
20
|
+
Metrics/MethodLength:
|
21
|
+
Exclude:
|
22
|
+
- lib/github_records_archiver/cli.rb
|
23
|
+
- spec/spec_helper.rb
|
24
|
+
|
25
|
+
Metrics/AbcSize:
|
26
|
+
Exclude:
|
27
|
+
- lib/github_records_archiver/cli.rb
|
28
|
+
|
29
|
+
Metrics/CyclomaticComplexity:
|
30
|
+
Exclude:
|
31
|
+
- spec/spec_helper.rb
|
18
32
|
|
19
33
|
Layout/IndentHeredoc:
|
20
34
|
Enabled: false
|
data/bin/github-records-archiver
CHANGED
@@ -1,77 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'thor'
|
4
|
-
require 'parallel'
|
5
3
|
require_relative '../lib/github_records_archiver'
|
6
4
|
|
7
|
-
|
8
|
-
package_name 'GitHub Records Archiver'
|
9
|
-
class_option :dest_dir, type: :string, required: false,
|
10
|
-
desc: "The destination directory for the archive", default: GitHubRecordsArchiver.dest_dir
|
11
|
-
class_option :token, type: :string, required: false, desc: "A GitHub personal access token with repo scope"
|
12
|
-
class_option :verbose, type: :boolean, desc: 'Display verbose output while archiving', default: false
|
13
|
-
|
14
|
-
desc 'version', 'Outputs the GitHubRecordsArchiver version'
|
15
|
-
def version
|
16
|
-
say "GitHub Records Archiver v#{GitHubRecordsArchiver::VERSION}"
|
17
|
-
end
|
18
|
-
|
19
|
-
desc "delete [ORGANIZATION]", "Deletes all archives, or the archive for an organization"
|
20
|
-
def delete(org_name = nil)
|
21
|
-
path = GitHubRecordsArchiver.dest_dir
|
22
|
-
path = File.join path, org_name if org_name
|
23
|
-
FileUtils.rm_rf(path) if yes? "Are you sure? Remove #{path}?"
|
24
|
-
end
|
25
|
-
|
26
|
-
desc 'archive ORGANIZATION', 'Create or update archive for the given organization'
|
27
|
-
def archive(org_name)
|
28
|
-
start_time # Memoize start time for comparison
|
29
|
-
@org_name = org_name
|
30
|
-
|
31
|
-
GitHubRecordsArchiver.shell = shell
|
32
|
-
%i(token dest_dir verbose).each do |option|
|
33
|
-
next unless options[option]
|
34
|
-
GitHubRecordsArchiver.public_send "#{option}=".to_sym, options[option]
|
35
|
-
end
|
36
|
-
|
37
|
-
say "Starting archive for @#{org.name} in #{org.archive_dir}"
|
38
|
-
shell.indent(2) do
|
39
|
-
archive_teams
|
40
|
-
archive_repos
|
41
|
-
end
|
42
|
-
say "Done in #{Time.now - start_time} seconds.", :green
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def start_time
|
48
|
-
@start_time ||= Time.now
|
49
|
-
end
|
50
|
-
|
51
|
-
def organization
|
52
|
-
@organization ||= GitHubRecordsArchiver::Organization.new @org_name
|
53
|
-
end
|
54
|
-
alias_method :org, :organization
|
55
|
-
|
56
|
-
def archive_teams
|
57
|
-
say_status "Teams found:", org.teams.count, :white
|
58
|
-
Parallel.each(org.teams, progress: 'Archiving teams', &:archive)
|
59
|
-
end
|
60
|
-
|
61
|
-
def archive_repos
|
62
|
-
say_status "Repositories found:", org.repos.count, :white
|
63
|
-
|
64
|
-
Parallel.each(org.repos, progress: 'Archiving repos') do |repo|
|
65
|
-
begin
|
66
|
-
repo.clone
|
67
|
-
repo.wiki.clone if repo.has_wiki?
|
68
|
-
Parallel.each(repo.issues, &:archive)
|
69
|
-
rescue GitHubRecordsArchiver::GitError => e
|
70
|
-
say "Failed to archive #{repo.name}", :red
|
71
|
-
say e.message, :red
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
GitHubRecordsArchiverCLI.start(ARGV)
|
5
|
+
GitHubRecordsArchiver::CLI.start(ARGV)
|
@@ -7,6 +7,7 @@ require 'fileutils'
|
|
7
7
|
require 'open3'
|
8
8
|
require 'thor'
|
9
9
|
require 'octokit'
|
10
|
+
require 'parallel'
|
10
11
|
require 'dotenv/load'
|
11
12
|
|
12
13
|
Octokit.auto_paginate = true
|
@@ -14,6 +15,7 @@ Octokit.auto_paginate = true
|
|
14
15
|
module GitHubRecordsArchiver
|
15
16
|
autoload :DataHelper, 'github_records_archiver/data_helper'
|
16
17
|
autoload :Comment, 'github_records_archiver/comment'
|
18
|
+
autoload :CLI, 'github_records_archiver/cli'
|
17
19
|
autoload :GitRepository, 'github_records_archiver/git_repository'
|
18
20
|
autoload :Issue, 'github_records_archiver/issue'
|
19
21
|
autoload :Organization, 'github_records_archiver/organization'
|
@@ -24,7 +26,7 @@ module GitHubRecordsArchiver
|
|
24
26
|
autoload :Wiki, 'github_records_archiver/wiki'
|
25
27
|
|
26
28
|
class << self
|
27
|
-
attr_writer :token, :dest_dir, :verbose, :shell
|
29
|
+
attr_writer :token, :dest_dir, :verbose, :shell, :client
|
28
30
|
|
29
31
|
def token
|
30
32
|
@token ||= ENV['GITHUB_TOKEN']
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module GitHubRecordsArchiver
|
2
|
+
class CLI < Thor
|
3
|
+
package_name 'GitHub Records Archiver'
|
4
|
+
class_option :dest_dir, type: :string, required: false,
|
5
|
+
desc: 'The destination directory for the archive', default: GitHubRecordsArchiver.dest_dir
|
6
|
+
class_option :token, type: :string, required: false, desc: 'A GitHub personal access token with repo scope'
|
7
|
+
class_option :verbose, type: :boolean, desc: 'Display verbose output while archiving', default: false
|
8
|
+
|
9
|
+
desc 'version', 'Outputs the GitHubRecordsArchiver version'
|
10
|
+
def version
|
11
|
+
say "GitHub Records Archiver v#{GitHubRecordsArchiver::VERSION}"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'delete [ORGANIZATION]', 'Deletes all archives, or the archive for an organization'
|
15
|
+
option :force, type: :boolean, desc: 'Delete without prompting', default: false
|
16
|
+
def delete(org_name = nil)
|
17
|
+
path = GitHubRecordsArchiver.dest_dir
|
18
|
+
path = File.join path, org_name if org_name
|
19
|
+
FileUtils.rm_rf(path) if options[:force] || yes?("Are you sure? Remove #{path}?")
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'archive ORGANIZATION', 'Create or update archive for the given organization'
|
23
|
+
def archive(org_name)
|
24
|
+
start_time # Memoize start time for comparison
|
25
|
+
@org_name = org_name
|
26
|
+
|
27
|
+
GitHubRecordsArchiver.shell = shell
|
28
|
+
%i[token dest_dir verbose].each do |option|
|
29
|
+
next unless options[option]
|
30
|
+
GitHubRecordsArchiver.public_send "#{option}=".to_sym, options[option]
|
31
|
+
end
|
32
|
+
|
33
|
+
say "Starting archive for @#{org.name} in #{org.archive_dir}"
|
34
|
+
shell.indent(2) do
|
35
|
+
archive_teams
|
36
|
+
archive_repos
|
37
|
+
end
|
38
|
+
say "Done in #{Time.now - start_time} seconds.", :green
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def start_time
|
44
|
+
@start_time ||= Time.now
|
45
|
+
end
|
46
|
+
|
47
|
+
def organization
|
48
|
+
@organization ||= GitHubRecordsArchiver::Organization.new @org_name
|
49
|
+
end
|
50
|
+
alias org organization
|
51
|
+
|
52
|
+
def archive_teams
|
53
|
+
say_status 'Teams found:', org.teams.count, :white
|
54
|
+
Parallel.each(org.teams, progress: 'Archiving teams', &:archive)
|
55
|
+
end
|
56
|
+
|
57
|
+
def archive_repos
|
58
|
+
say_status 'Repositories found:', org.repos.count, :white
|
59
|
+
|
60
|
+
Parallel.each(org.repos, progress: 'Archiving repos') do |repo|
|
61
|
+
begin
|
62
|
+
repo.clone
|
63
|
+
repo.wiki.clone if repo.has_wiki?
|
64
|
+
Parallel.each(repo.issues, &:archive)
|
65
|
+
rescue GitHubRecordsArchiver::GitError => e
|
66
|
+
say "Failed to archive #{repo.name}", :red
|
67
|
+
say e.message, :red
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: github_records_archiver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Balter
|
@@ -205,6 +205,7 @@ files:
|
|
205
205
|
- docs/CONTRIBUTING.md
|
206
206
|
- github_records_archiver.gemspec
|
207
207
|
- lib/github_records_archiver.rb
|
208
|
+
- lib/github_records_archiver/cli.rb
|
208
209
|
- lib/github_records_archiver/comment.rb
|
209
210
|
- lib/github_records_archiver/data_helper.rb
|
210
211
|
- lib/github_records_archiver/git_repository.rb
|