github_export 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1ee53ab8656f9e71f6ff5ecdcd091a888230b04d
4
+ data.tar.gz: 2a572fc0c2cd86a3a9655c684d125baaffd35d8e
5
+ SHA512:
6
+ metadata.gz: 81612ccce6cb82f5b19ff6a1af3363011192e49334d4749de4b14f9a3d44dc7419e89b4b85137d479de97c881b0f2c9143932383820841a78005f2fd4f377386
7
+ data.tar.gz: df66c2e2033a6f66632e3674c99d8b3c685f453e41bedda4ef2c70d6efdb505d19bec1ae490745b42c546c0e214b7847d15dd1c1fd41bad46306d465b7985e44
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /buckup
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.1
5
+ before_install: gem install bundler -v 1.12.5
@@ -0,0 +1,49 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, and in the interest of
4
+ fostering an open and welcoming community, we pledge to respect all people who
5
+ contribute through reporting issues, posting feature requests, updating
6
+ documentation, submitting pull requests or patches, and other activities.
7
+
8
+ We are committed to making participation in this project a harassment-free
9
+ experience for everyone, regardless of level of experience, gender, gender
10
+ identity and expression, sexual orientation, disability, personal appearance,
11
+ body size, race, ethnicity, age, religion, or nationality.
12
+
13
+ Examples of unacceptable behavior by participants include:
14
+
15
+ * The use of sexualized language or imagery
16
+ * Personal attacks
17
+ * Trolling or insulting/derogatory comments
18
+ * Public or private harassment
19
+ * Publishing other's private information, such as physical or electronic
20
+ addresses, without explicit permission
21
+ * Other unethical or unprofessional conduct
22
+
23
+ Project maintainers have the right and responsibility to remove, edit, or
24
+ reject comments, commits, code, wiki edits, issues, and other contributions
25
+ that are not aligned to this Code of Conduct, or to ban temporarily or
26
+ permanently any contributor for other behaviors that they deem inappropriate,
27
+ threatening, offensive, or harmful.
28
+
29
+ By adopting this Code of Conduct, project maintainers commit themselves to
30
+ fairly and consistently applying these principles to every aspect of managing
31
+ this project. Project maintainers who do not follow or enforce the Code of
32
+ Conduct may be permanently removed from the project team.
33
+
34
+ This code of conduct applies both within project spaces and in public spaces
35
+ when an individual is representing the project or its community.
36
+
37
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
38
+ reported by contacting a project maintainer at akm2000@gmail.com. All
39
+ complaints will be reviewed and investigated and will result in a response that
40
+ is deemed necessary and appropriate to the circumstances. Maintainers are
41
+ obligated to maintain confidentiality with regard to the reporter of an
42
+ incident.
43
+
44
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
45
+ version 1.3.0, available at
46
+ [http://contributor-covenant.org/version/1/3/0/][version]
47
+
48
+ [homepage]: http://contributor-covenant.org
49
+ [version]: http://contributor-covenant.org/version/1/3/0/
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in github_export.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem 'pry'
8
+ gem 'pry-byebug'
9
+ gem 'pry-stack_explorer'
10
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 akm
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,72 @@
1
+ # github_export
2
+
3
+ `github_export` command exports your issues, pull requests, comments, labels, milestones and events to `.json` file.
4
+ And it downloads your files which was uploaded to the issues or the comments.
5
+
6
+ You can use the exported `.json` files and downloaded files for backup or migration to the other.
7
+
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'github_export'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install github_export
24
+
25
+ ## Usage
26
+
27
+ ```bash
28
+ $ github_export all <org_or_user>/<repo> -d path/to/export
29
+ ```
30
+
31
+ Or you can specify access token with `--access-token` options if you know the access token.
32
+
33
+ ```bash
34
+ $ github_export all <org_or_user>/<repo> -d path/to/export -t <access token>
35
+ ```
36
+
37
+ See help for more detail
38
+
39
+ ```bash
40
+ $ github_export
41
+ Commands:
42
+ github_export all REPO # Export all of the repository
43
+ github_export assets # Download assets of the repository
44
+ github_export assets_check # Check downloaded assets exist with assets.txt
45
+ github_export assets_download # Download assets with assets.txt
46
+ github_export assets_list FILES # Scan asset urls to assets.txt
47
+ github_export comments REPO # Export comments of the repository
48
+ github_export events REPO # Export events of the repository
49
+ github_export help [COMMAND] # Describe available commands or one specific command
50
+ github_export issue_events REPO # Export issue events of the repository
51
+ github_export issues REPO # Export issues of the repository
52
+ github_export labels REPO # Export labels of the repository
53
+ github_export milestones REPO # Export milestones of the repository
54
+ github_export releases REPO # Export releases of the repository
55
+ github_export repository REPO # Export repository itself
56
+
57
+ Options:
58
+ -t, [--access-token=ACCESS_TOKEN] # Personal Access Token
59
+ -d, [--output-dir=OUTPUT_DIR] # Output directory path
60
+ # Default: /Users/akima/groovenauts/github_export
61
+ -V, [--verbose], [--no-verbose] # Show more details
62
+ ```
63
+
64
+ ## Contributing
65
+
66
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/github_export. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
67
+
68
+
69
+ ## License
70
+
71
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
72
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "github_export"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/exe/github_export ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "github_export"
4
+ GithubExport::Command.start(ARGV)
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'github_export/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "github_export"
8
+ spec.version = GithubExport::VERSION
9
+ spec.authors = ["akm"]
10
+ spec.email = ["akm2000@gmail.com"]
11
+
12
+ spec.summary = %q{Export Issues, Contents and so on }
13
+ spec.description = %q{Export Issues, Contents and so on}
14
+ spec.homepage = "https://github.com/groovenauts/github_export"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_runtime_dependency "octokit"
23
+ spec.add_runtime_dependency "faraday", "= 0.9.1"
24
+ spec.add_runtime_dependency "thor"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.12"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rspec", "~> 3.0"
29
+ end
@@ -0,0 +1,5 @@
1
+ require "github_export/version"
2
+
3
+ module GithubExport
4
+ autoload :Command, 'github_export/command'
5
+ end
@@ -0,0 +1,211 @@
1
+ # http://whatisthor.com/
2
+ # https://github.com/erikhuda/thor
3
+ require 'thor'
4
+
5
+ # https://github.com/octokit/octokit.rb
6
+ require 'octokit'
7
+
8
+ require 'uri'
9
+ require 'fileutils'
10
+ require 'io/console'
11
+
12
+ module GithubExport
13
+ class Command < Thor
14
+ class_option :access_token, aliases: '-t', type: :string, desc: 'Personal Access Token'
15
+ class_option :output_dir , aliases: '-d', type: :string, desc: 'Output directory path', default: Dir.pwd
16
+ class_option :verbose , aliases: '-V', type: :boolean, desc: "Show more details"
17
+
18
+ desc 'all REPO', "Export all of the repository"
19
+ def all(repo)
20
+ repository(repo)
21
+ milestones(repo)
22
+ releases(repo)
23
+ labels(repo)
24
+ issues(repo)
25
+ comments(repo)
26
+ events(repo)
27
+ issue_events(repo)
28
+ assets
29
+ end
30
+
31
+ desc 'repository REPO', "Export repository itself"
32
+ def repository(repo)
33
+ result = client.repository(repo)
34
+ output_to_file('repository.json', JSON.pretty_generate(result.to_attrs))
35
+ end
36
+
37
+ desc 'milestones REPO', "Export milestones of the repository"
38
+ def milestones(repo)
39
+ call_repo_method(repo, :list_milestones, 'milestones.json')
40
+ end
41
+
42
+ desc 'releases REPO', "Export releases of the repository"
43
+ def releases(repo)
44
+ call_repo_method(repo, :releases, 'releases.json')
45
+ end
46
+
47
+ desc 'labels REPO', "Export labels of the repository"
48
+ def labels(repo)
49
+ call_repo_method(repo, :labels, 'labels.json')
50
+ end
51
+
52
+ desc 'issues REPO', "Export issues of the repository"
53
+ def issues(repo)
54
+ call_repo_method(repo, :list_issues, 'issues.json', state: 'all', sort: 'created', direction: 'asc')
55
+ end
56
+
57
+ desc 'comments REPO', "Export comments of the repository"
58
+ def comments(repo)
59
+ call_repo_method(repo, :issues_comments, 'comments.json', sort: 'created', direction: 'asc')
60
+ end
61
+
62
+ desc 'events REPO', "Export events of the repository"
63
+ def events(repo)
64
+ call_repo_method(repo, :repository_events, 'events.json', sort: 'created', direction: 'asc')
65
+ end
66
+
67
+ # desc 'network_events REPO', "Export network events of the repository"
68
+ # def network_events(repo)
69
+ # call_repo_method(repo, :repository_network_events, 'network_events.json')
70
+ # end
71
+
72
+ desc 'issue_events REPO', "Export issue events of the repository"
73
+ def issue_events(repo)
74
+ call_repo_method(repo, :repository_issue_events, 'issue_events.json', sort: 'created', direction: 'asc')
75
+ end
76
+
77
+ ASSETS_LIST_FILENAME = 'assets.txt'.freeze
78
+
79
+ desc 'assets', "Download assets of the repository"
80
+ def assets
81
+ files = Dir.glob(File.join(options[:output_dir], '**/*.json'))
82
+ assets_list(*files)
83
+ assets_download
84
+ assets_check
85
+ end
86
+
87
+ ASSET_PATTERN = /\!\[[^\[\]]+\]\(([^\(\)]+)\)/.freeze
88
+ desc 'assets_list FILES', "Scan asset urls to #{ASSETS_LIST_FILENAME}"
89
+ def assets_list(*files)
90
+ urls = files.map{|file|
91
+ File.read(file).lines.map{|line| line.scan(ASSET_PATTERN)}.delete_if(&:empty?).flatten.uniq
92
+ }.flatten.sort.uniq
93
+ output_to_file(ASSETS_LIST_FILENAME, urls.join("\n"))
94
+ end
95
+
96
+ desc 'assets_download', "Download assets with #{ASSETS_LIST_FILENAME}"
97
+ option :client_num, aliases: '-n', type: :numeric, default: 3, desc: "Number of clients to download"
98
+ option :force , aliases: '-f', type: :boolean , desc: "Overwrite if the file exists"
99
+ def assets_download
100
+ num = [options[:client_num].to_i, 1].max
101
+ lines = read_from_output_file(ASSETS_LIST_FILENAME).lines.map(&:strip)
102
+ tasks = lines.group_by.with_index{|_, i| i % num}
103
+ tasks.each do |idx, task_lines|
104
+ fork do
105
+ task_lines.each do |url|
106
+ uri = URI.parse(url)
107
+ dest = File.join(options[:output_dir], uri.path)
108
+ if options[:force] || !File.exist?(dest)
109
+ verbose "DL #{url}"
110
+ FileUtils.mkdir_p(File.dirname(dest))
111
+ File.binwrite(dest, client.get(url))
112
+ else
113
+ verbose "SKIP #{url}"
114
+ end
115
+ end
116
+ end
117
+ Process.waitall
118
+ end
119
+ end
120
+
121
+ CHECK_MSG_OK = "\e[32mOK %s\e[0m".freeze
122
+ CHECK_MSG_NG = "\e[31mNG %s\e[0m".freeze
123
+
124
+ desc 'assets_check', "Check downloaded assets exist with #{ASSETS_LIST_FILENAME}"
125
+ def assets_check
126
+ read_from_output_file(ASSETS_LIST_FILENAME).lines.map(&:strip).each do |line|
127
+ path = File.join(options[:output_dir], URI.parse(line).path)
128
+ fmt = File.exist?(path) ? CHECK_MSG_OK : CHECK_MSG_NG
129
+ puts fmt % path
130
+ end
131
+ end
132
+
133
+ no_commands do
134
+ def client
135
+ unless @client
136
+ Octokit.auto_paginate = true
137
+ access_token = options[:access_token]
138
+ access_token ||= generate_access_token
139
+ @client = Octokit::Client.new access_token: access_token
140
+ end
141
+ @client
142
+ end
143
+
144
+ ACCESS_TOKEN_NAME = 'Github Export'.freeze
145
+
146
+ def generate_access_token
147
+ login = ask 'login: '
148
+ pw = ask 'password: ', echo: false
149
+ $stdout.print "\n" # For noecho
150
+ client = Octokit::Client.new login: login, password: pw
151
+ verbose(client.inspect)
152
+
153
+ opts = {:scopes => ["repo", "user"], :note => ACCESS_TOKEN_NAME}
154
+ two_fa_code = ask 'two-factor authentication OTP code(Optional): '
155
+ unless two_fa_code.empty?
156
+ opts[:headers] = { "X-GitHub-OTP" => two_fa_code }
157
+ end
158
+ verbose("client.create_authorization(#{opts.inspect})")
159
+ begin
160
+ res = client.create_authorization(opts)
161
+ verbose("token: #{res.inspect}")
162
+ return res[:token]
163
+ rescue Octokit::Unauthorized => e
164
+ puts_error "Authentication failed. Your login name or password is wrong."
165
+ exit(1)
166
+ rescue Octokit::OneTimePasswordRequired => e
167
+ puts_error "You must specify two-factor authentication OTP code."
168
+ exit(1)
169
+ rescue Octokit::UnprocessableEntity => e
170
+ if e.errors.any?{|err| err[:code] == 'already_exists' && err[:resource] == 'OauthAccess'}
171
+ puts_error "Access Token named \"#{ACCESS_TOKEN_NAME}\" is already created." \
172
+ "\nPlease remove the personal access token named \"#{ACCESS_TOKEN_NAME}\" at https://github.com/settings/tokens ." \
173
+ "\nOr you can regenerate token on Edit view of the personal access token and add --access-token option to github_export command."
174
+ end
175
+ exit(1)
176
+ end
177
+ end
178
+
179
+ def call_repo_method(repo, name, filename, api_opts = {})
180
+ results = client.send(name, repo, api_opts)
181
+ output_to_file(filename, JSON.pretty_generate(results.map(&:to_attrs)))
182
+ end
183
+
184
+ def output_to_file(filename, content)
185
+ path = File.join(options[:output_dir], filename)
186
+ FileUtils.mkdir_p(File.dirname(path))
187
+ open(path, 'w') do |f|
188
+ f.puts(content)
189
+ end
190
+ end
191
+
192
+ def read_from_output_file(filename)
193
+ File.read(File.join(options[:output_dir], filename))
194
+ end
195
+
196
+ def puts_error(msg)
197
+ $stderr.puts "\e[31m#{msg}\e[0m"
198
+ end
199
+
200
+ def puts_info(msg)
201
+ $stderr.puts "\e[0m#{msg}\e[0m"
202
+ end
203
+
204
+ def verbose(msg)
205
+ $stderr.puts "\e[34m#{msg}\e[0m" if options[:verbose]
206
+ end
207
+
208
+ end
209
+
210
+ end
211
+ end
@@ -0,0 +1,3 @@
1
+ module GithubExport
2
+ VERSION = "0.1.1"
3
+ end
metadata ADDED
@@ -0,0 +1,144 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: github_export
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - akm
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-06-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: octokit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.12'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ description: Export Issues, Contents and so on
98
+ email:
99
+ - akm2000@gmail.com
100
+ executables:
101
+ - github_export
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".travis.yml"
108
+ - CODE_OF_CONDUCT.md
109
+ - Gemfile
110
+ - LICENSE.txt
111
+ - README.md
112
+ - Rakefile
113
+ - bin/console
114
+ - bin/setup
115
+ - exe/github_export
116
+ - github_export.gemspec
117
+ - lib/github_export.rb
118
+ - lib/github_export/command.rb
119
+ - lib/github_export/version.rb
120
+ homepage: https://github.com/groovenauts/github_export
121
+ licenses:
122
+ - MIT
123
+ metadata: {}
124
+ post_install_message:
125
+ rdoc_options: []
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ requirements: []
139
+ rubyforge_project:
140
+ rubygems_version: 2.6.4
141
+ signing_key:
142
+ specification_version: 4
143
+ summary: Export Issues, Contents and so on
144
+ test_files: []