backup_on_the_go 0.1.3
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 +15 -0
- data/LICENSE +23 -0
- data/README.md +69 -0
- data/bin/backup-on-the-go +45 -0
- data/lib/backup_on_the_go.rb +180 -0
- data/lib/backup_on_the_go/version.rb +11 -0
- metadata +105 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTU0NzNlZWUzYWY4OWY5YmUxNzUyMjM3OTA4MzMyOTk3YzIzNzc5NA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OGUzOGUwNmQyZDFhYTljNGMwNjc0YzZmNjFhMTI0OGRlZjgyNDQ2Mw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YThkYzQxMWUzNTQzYjUyZjk3MzVmZGFkZjVhOGI4ZjJiZjIyNzIzMzI3NDAy
|
10
|
+
Y2RmMjMzNGE0MTdhZGIxNTlkZWMyZGI5ZmRhZmVhNjA3YmM4OTE0ZjhmZjhl
|
11
|
+
ZmMzYTBiNmZiNjI4YWQyYThlZGUzMzgwYzljZjdjYzE5YWE3Yzg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MDFkMWI5ZjRjZDI5OTI3YjRkY2VlZDhlNmUwYWY1NDg0N2QxNDA5NzhlYjI1
|
14
|
+
NmQ2ZTJhOWFkNjZkYjkzMTE5MDJjZjU4Nzk3MWZiOThhYjlhY2QyMjYzM2Nm
|
15
|
+
YzJjYzFlYmNlYTViZTFiMzQxZDY4OWQ3ZWVmZTIwYjIzNWQ3YzY=
|
data/LICENSE
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Copyright (c) 2013 Hong Xu
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
1. Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
|
13
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
14
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
15
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
16
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
17
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
18
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
19
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
20
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
21
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
22
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
23
|
+
POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Backup On The Go
|
2
|
+
|
3
|
+
[RubyGems][1] | [RDocs][2]
|
4
|
+
|
5
|
+
Back up (or mirror) your GitHub repositories to BitBucket.
|
6
|
+
|
7
|
+
## Install
|
8
|
+
|
9
|
+
gem install backup_on_the_go
|
10
|
+
|
11
|
+
## Run Locally
|
12
|
+
|
13
|
+
Shortcut:
|
14
|
+
|
15
|
+
Back up your personal repositories (will back up your repositories to BitBucket
|
16
|
+
with a prefix of `backup-on-the-go-`):
|
17
|
+
|
18
|
+
backup-on-the-go user:your_user_name
|
19
|
+
|
20
|
+
Back up your personal repositories to a different account on BitBucket:
|
21
|
+
|
22
|
+
backup-on-the-go github_user:user_name_on_github bitbucket_user:user_name_on_github
|
23
|
+
|
24
|
+
Back up your organization repositories:
|
25
|
+
|
26
|
+
backup-on-the-go user:your_user_name github_repos_owner:organization_name bitbucket_repos_owner:team_name
|
27
|
+
|
28
|
+
For more options, see the parameters of [BackupOnTheGo.backup][3].
|
29
|
+
|
30
|
+
|
31
|
+
## Run in the Cloud
|
32
|
+
|
33
|
+
You can deploy to some cloud services to run the backup timely.
|
34
|
+
|
35
|
+
### Deploy to Heroku
|
36
|
+
|
37
|
+
If you are new to [Heroku](http://heroku.com), first go to Heroku website to
|
38
|
+
[create an account][heroku_signup], install [Heroku Toolbelt][], and run
|
39
|
+
`heroku login` to login.
|
40
|
+
|
41
|
+
Run the following command to obtain the pre-prepared files for deploying:
|
42
|
+
|
43
|
+
git clone -b heroku git://github.com/xuhdev/backup-on-the-go.git
|
44
|
+
cd backup-on-the-go
|
45
|
+
bundle
|
46
|
+
heroku create
|
47
|
+
|
48
|
+
Then edit `backup.rb` to configure your backup. After configuring, you may
|
49
|
+
wanna run `foreman start` to test locally. Then:
|
50
|
+
|
51
|
+
git commit -a -m "My initial backup commit."
|
52
|
+
git push heroku heroku:master
|
53
|
+
|
54
|
+
**NOTE**: Don't push to any public repositories, since your password is there!
|
55
|
+
|
56
|
+
At last, you need to [scale your dyno formation][] in order to run the backup
|
57
|
+
dyno instead of the web dyno:
|
58
|
+
|
59
|
+
heroku scale web=0 worker=1
|
60
|
+
|
61
|
+
Done!
|
62
|
+
|
63
|
+
|
64
|
+
[1]: https://rubygems.org/gems/backup_on_the_go
|
65
|
+
[2]: http://rubydoc.info/github/xuhdev/backup-on-the-go/master/frames
|
66
|
+
[3]: http://rubydoc.info/github/xuhdev/backup-on-the-go/master/BackupOnTheGo.backup
|
67
|
+
[heroku_signup]: https://id.heroku.com/signup
|
68
|
+
[Heroku Toolbelt]: https://toolbelt.heroku.com/
|
69
|
+
[scale your dyno formation]: https://devcenter.heroku.com/articles/scaling
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'backup_on_the_go'
|
4
|
+
|
5
|
+
if ARGV.length == 0
|
6
|
+
puts <<END
|
7
|
+
Usage:
|
8
|
+
|
9
|
+
backup-on-the-go key0:string_value0 key1:string_value1 key2?boolean_value2 ...
|
10
|
+
|
11
|
+
e.g.
|
12
|
+
backup-on-the-go user:username is_prviate?false
|
13
|
+
|
14
|
+
For the description of keys and values, please see the document of
|
15
|
+
BackupOnTheGo.backup
|
16
|
+
|
17
|
+
END
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
|
21
|
+
config = Hash.new
|
22
|
+
|
23
|
+
ARGV.each do |a|
|
24
|
+
|
25
|
+
# string value
|
26
|
+
key, value = a.split(':', 2)
|
27
|
+
if value != nil
|
28
|
+
config[key.to_sym] = value
|
29
|
+
next
|
30
|
+
end
|
31
|
+
|
32
|
+
# boolean value
|
33
|
+
key, value = a.split('?', 2)
|
34
|
+
if value != nil
|
35
|
+
value.strip!
|
36
|
+
|
37
|
+
if value == 'true' or value == 'yes' or value == '1'
|
38
|
+
config[key.to_sym] = true
|
39
|
+
elsif value == 'false' or value == 'no' or value == '0'
|
40
|
+
config[key.to_sym] = false
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
BackupOnTheGo.backup config
|
@@ -0,0 +1,180 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'github_api'
|
4
|
+
require 'bitbucket_rest_api'
|
5
|
+
require 'highline/import'
|
6
|
+
require 'tmpdir'
|
7
|
+
require 'colorize'
|
8
|
+
|
9
|
+
# The module of BackupOnTheGo
|
10
|
+
module BackupOnTheGo #:nodoc:#
|
11
|
+
|
12
|
+
DEFAULT_CONFIG = {
|
13
|
+
:backup_fork => false,
|
14
|
+
:git_cmd => 'git',
|
15
|
+
:is_private => true,
|
16
|
+
:no_public_fork => true,
|
17
|
+
:repo_prefix => 'backup-on-the-go-',
|
18
|
+
:verbose => true
|
19
|
+
}.freeze
|
20
|
+
|
21
|
+
# Backup GitHub repositories to BitBucket.
|
22
|
+
#
|
23
|
+
# = Parameters
|
24
|
+
# * <tt>:backup_fork</tt> - Optional boolean - <tt>true</tt> to backup forked repositories, <tt>false</tt> to skip them. Default is <tt>false</tt>.
|
25
|
+
# * <tt>:bitbucket_password</tt> - Optional string - The password to access the BitBucket account. If not specified, a prompt will show up to ask for the password.
|
26
|
+
# * <tt>:bitbucket_repos_owner</tt> - Optional string - Owner of the backup repositories on BitBucket. The owner could be a team. If not specified, <tt>:bitbucket_user</tt> will be used.
|
27
|
+
# * <tt>:bitbucket_user</tt> - *Required* string if <tt>:user</tt> is not specified - The user name on BitBucket. If not specified, <tt>:user</tt> will be used.
|
28
|
+
# * <tt>:git_cmd</tt> - Optional string - The git command you want to use. Default is 'git'.
|
29
|
+
# * <tt>:github_repos_owner</tt> - Optional string - The owner of the repositories that need to be backed up. The owner could be an organization. If not specified, <tt>:github_user</tt> will be used.
|
30
|
+
# * <tt>:github_user</tt> - *Required* string if <tt>:user</tt> is not specified - The user name on GitHub. If not specified, <tt>:user</tt> will be used.
|
31
|
+
# * <tt>:is_private</tt> - Optional boolean - <tt>true</tt> to make the backup repositories private, <tt>false</tt> to make them public. Default is <tt>true</tt>.
|
32
|
+
# * <tt>:no_public_fork</tt> - Optional boolean - <tt>true</tt> to forbid public fork for the backup repositories, <tt>false</tt> to allow public fork. Default is <tt>true</tt>.
|
33
|
+
# * <tt>:repo_prefix</tt> - Optional string - The prefix you wanna prepend to the backup repository names. In this way, if you have a repository with the same name on BitBucket, it won't get flushed. Default is <tt>"backup-on-the-go-"</tt>.
|
34
|
+
# * <tt>:user</tt> - *Required* string if <tt>:github_user</tt> and <tt>:bitbucket_user</tt> are not both specified - The user name of GitHub and BitBucket (if they are same for you). If you want to use different user names on GitHub and BitBucket, please specify <tt>:github_user</tt> and <tt>:bitbucket_user</tt> instead.
|
35
|
+
# * <tt>:verbose</tt> - Optional boolean - <tt>true</tt> to print additional information and <tt>false</tt> to suppress them. Default is <tt>true</tt>.
|
36
|
+
#
|
37
|
+
# = Examples
|
38
|
+
#
|
39
|
+
# # Back up personal repositories
|
40
|
+
# BackupOnTheGo.backup :github_user => 'github_user_name',
|
41
|
+
# :bitbucket_user => 'bitbucket_user_name',
|
42
|
+
# :is_private => false, # make backup repositories public
|
43
|
+
# :bitbucket_password => 'bitbucket_password',
|
44
|
+
# :repo_prefix => '' # don't need any prefix
|
45
|
+
#
|
46
|
+
# = Examples
|
47
|
+
#
|
48
|
+
# # Back up organization repositories
|
49
|
+
# BackupOnTheGo.backup :github_user => 'github_user_name',
|
50
|
+
# :github_repos_owner => 'organization_name',
|
51
|
+
# :bitbucket_user => 'bitbucket_user_name',
|
52
|
+
# :bitbucket_repos_owner => 'bitbucket_team_name',
|
53
|
+
# :bitbucket_password => 'bitbucket_password',
|
54
|
+
# :repo_prefix => 'our-backup'
|
55
|
+
#
|
56
|
+
def self.backup(configs = {})
|
57
|
+
|
58
|
+
config = DEFAULT_CONFIG.merge(configs)
|
59
|
+
|
60
|
+
# either :user or :github_user and :bitbucket_user have to be set
|
61
|
+
if config.has_key?(:user)
|
62
|
+
config[:github_user] = config[:user] unless config.has_key?(:github_user)
|
63
|
+
config[:bitbucket_user] = config[:user] unless config.has_key?(:bitbucket_user)
|
64
|
+
end
|
65
|
+
|
66
|
+
unless config.has_key?(:github_user) and config.has_key?(:bitbucket_user)
|
67
|
+
raise 'No user name provided.'
|
68
|
+
end
|
69
|
+
|
70
|
+
unless config.has_key?(:github_repos_owner) # Owner of the github repos. Could be an organization
|
71
|
+
config[:github_repos_owner] = config[:github_user]
|
72
|
+
end
|
73
|
+
|
74
|
+
unless config.has_key?(:bitbucket_repos_owner) # Owner of backup repositories. Could be a team.
|
75
|
+
config[:bitbucket_repos_owner] = config[:bitbucket_user]
|
76
|
+
end
|
77
|
+
|
78
|
+
# Ask for the password if it is not specified
|
79
|
+
unless config.has_key?(:bitbucket_password)
|
80
|
+
config[:bitbucket_password] = ask("Enter your BitBucket password: ") { |q| q.echo = false }
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
gh_repos = Github.repos.list :user => config[:github_repos_owner] # obtain github repos
|
85
|
+
|
86
|
+
bb = BitBucket.new :login => config[:bitbucket_user], :password => config[:bitbucket_password]
|
87
|
+
|
88
|
+
backup_repo_names = Array.new
|
89
|
+
|
90
|
+
bb.repos.list do |repo|
|
91
|
+
if repo.owner == config[:bitbucket_repos_owner]
|
92
|
+
backup_repo_names.push(repo.slug)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
gh_repos.each do |repo|
|
97
|
+
next if repo.fork && !config[:backup_fork]
|
98
|
+
|
99
|
+
puts "Backing up #{repo.name}..." if config[:verbose]
|
100
|
+
|
101
|
+
backup_repo_name = "#{config[:repo_prefix]}#{repo.name}"
|
102
|
+
|
103
|
+
# Create backup repositories if we don't have them yet
|
104
|
+
unless backup_repo_names.include?(backup_repo_name.downcase)
|
105
|
+
puts "Creating new repository #{config[:bitbucket_repos_owner]}/#{backup_repo_name}..." if config[:verbose]
|
106
|
+
begin
|
107
|
+
bb.repos.create :name => backup_repo_name, :owner => config[:bitbucket_repos_owner],
|
108
|
+
:scm => 'git', :is_private => config[:is_private], :no_public_fork => config[:no_public_fork]
|
109
|
+
rescue
|
110
|
+
puts_warning "Creation of repository #{config[:bitbucket_repos_owner]}/#{backup_repo_name} failed."
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
puts "Backing up resources..." if config[:verbose]
|
115
|
+
|
116
|
+
begin
|
117
|
+
bb.repos.edit config[:bitbucket_repos_owner], backup_repo_name,
|
118
|
+
:website => repo.homepage,
|
119
|
+
:description => repo.description,
|
120
|
+
:is_private => config[:is_private]
|
121
|
+
rescue
|
122
|
+
puts_warning "Failed to update information for #{config[:bitbucket_repos_owner]}/#{backup_repo_name}"
|
123
|
+
end
|
124
|
+
|
125
|
+
Dir.mktmpdir do |dir|
|
126
|
+
cmd = "#{config[:git_cmd]} clone --mirror #{repo.git_url} #{dir}/tmp-repo"
|
127
|
+
puts "Executing #{cmd}" if config[:verbose]
|
128
|
+
unless system(cmd)
|
129
|
+
puts_warning "'git clone' failed for #{repo.git_url}\n"
|
130
|
+
break
|
131
|
+
end
|
132
|
+
|
133
|
+
# Add bitbucket remote
|
134
|
+
cmd = "cd #{dir}/tmp-repo && " +
|
135
|
+
"#{config[:git_cmd]} remote add bitbucket 'https://#{config[:bitbucket_user]}:#{config[:bitbucket_password]}@bitbucket.org/#{config[:bitbucket_repos_owner]}/#{backup_repo_name}.git'"
|
136
|
+
puts "Executing [#{config[:git_cmd]} remote add bitbucket 'https://#{config[:bitbucket_user]}:your_password@bitbucket.org/#{config[:bitbucket_repos_owner]}/#{backup_repo_name}.git']" if config[:verbose]
|
137
|
+
`#{cmd}`
|
138
|
+
unless $?.exitstatus
|
139
|
+
puts_warning "'git remote add bitbucket ...' failed for #{config[:bitbucket_repos_owner]}/#{backup_repo_name}\n"
|
140
|
+
break
|
141
|
+
end
|
142
|
+
|
143
|
+
# obtain the main branch (usually master, just in case)
|
144
|
+
cmd = "cd #{dir}/tmp-repo && #{config[:git_cmd]} branch"
|
145
|
+
puts "Executing #{cmd}" if config[:verbose]
|
146
|
+
branches = `#{cmd}`
|
147
|
+
unless $?.exitstatus
|
148
|
+
puts_warning "''#{config[:git_cmd]} branch' failed for #{config[:github_repos_owner]}/#{repo.name}"
|
149
|
+
break
|
150
|
+
end
|
151
|
+
main_branch = nil
|
152
|
+
branches.each_line do |line|
|
153
|
+
# This is the main branch we need
|
154
|
+
if line.length >= 1 and line[0] == '*'
|
155
|
+
main_branch = line[1..-1].strip
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
cmd = "cd #{dir}/tmp-repo && "
|
160
|
+
if main_branch != nil # push bitbucket #{main_branch} first before push --mirror
|
161
|
+
cmd += "#{config[:git_cmd]} push bitbucket #{main_branch} && "
|
162
|
+
end
|
163
|
+
cmd += "#{config[:git_cmd]} push --mirror bitbucket"
|
164
|
+
puts "Executing #{cmd}" if config[:verbose]
|
165
|
+
`#{cmd}`
|
166
|
+
unless $?.exitstatus
|
167
|
+
puts_warning "'#{config[:git_cmd]} push' failed for #{config[:bitbucket_repos_owner]}/#{backup_repo_name}\n"
|
168
|
+
break
|
169
|
+
end
|
170
|
+
puts
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
private
|
176
|
+
|
177
|
+
def self.puts_warning(str)
|
178
|
+
puts "[Warning]: #{str}".red
|
179
|
+
end
|
180
|
+
end
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: backup_on_the_go
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Hong Xu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-03-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: github_api
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.11
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.11
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: highline
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.6.16
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.6.16
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bitbucket_rest_api
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.1.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.1.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: colorize
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.5.8
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.5.8
|
69
|
+
description: Backup GitHub repositories to BitBucket
|
70
|
+
email: hong@topbug.net
|
71
|
+
executables:
|
72
|
+
- backup-on-the-go
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- bin/backup-on-the-go
|
77
|
+
- lib/backup_on_the_go/version.rb
|
78
|
+
- lib/backup_on_the_go.rb
|
79
|
+
- LICENSE
|
80
|
+
- README.md
|
81
|
+
homepage: https://github.com/xuhdev/backup-on-the-go#readme
|
82
|
+
licenses:
|
83
|
+
- BSD
|
84
|
+
metadata: {}
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 2.0.3
|
102
|
+
signing_key:
|
103
|
+
specification_version: 4
|
104
|
+
summary: Backup GitHub repositories to BitBucket
|
105
|
+
test_files: []
|