backup_repos 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.rubocop.yml +18 -0
- data/.travis.yml +4 -0
- data/Gemfile +8 -0
- data/README.md +23 -0
- data/Rakefile +6 -0
- data/backup_repos.gemspec +32 -0
- data/bin/backup-repos +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/backup_repos/backup.rb +49 -0
- data/lib/backup_repos/backup_bitbucket.rb +54 -0
- data/lib/backup_repos/backup_github.rb +53 -0
- data/lib/backup_repos/commander.rb +28 -0
- data/lib/backup_repos/config.rb +53 -0
- data/lib/backup_repos/performers/base_git.rb +55 -0
- data/lib/backup_repos/performers/bitbucket_git_repository.rb +23 -0
- data/lib/backup_repos/performers/bitbucket_git_wiki.rb +23 -0
- data/lib/backup_repos/performers/github_gist.rb +21 -0
- data/lib/backup_repos/performers/github_repository.rb +17 -0
- data/lib/backup_repos/performers/github_wiki.rb +17 -0
- data/lib/backup_repos/shell.rb +48 -0
- data/lib/backup_repos/version.rb +3 -0
- data/lib/backup_repos.rb +26 -0
- data/lib/core_ext/object.rb +5 -0
- data/lib/core_ext/string.rb +7 -0
- metadata +183 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0b0884025924fcb946682d88c8c83cef799d0ecb
|
4
|
+
data.tar.gz: 888d46fa8743dc2b2e3a825fa7c5e5527ae6a7b9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 08d84649c437fe0ec1ff33eee8ded77cc0b9f61f3c456b0464bcde28635636c6ca5c3ea83a558dc5d39ddd1bab0c6e32e6e5ad1a0ddd7f424482987384927472
|
7
|
+
data.tar.gz: 2543ba5caf5db9e3595c923bc1df6e736a42e135494ac3018cbf576e670248793a4f62daacb051b69826435dd5e1e2053ad234ebabe5a83abb3dd687fb87a456
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Style/Documentation:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
Style/AlignParameters:
|
5
|
+
Enabled: true
|
6
|
+
EnforcedStyle: with_fixed_indentation
|
7
|
+
|
8
|
+
Style/MultilineOperationIndentation:
|
9
|
+
Enabled: true
|
10
|
+
EnforcedStyle: indented
|
11
|
+
|
12
|
+
Style/MultilineMethodCallIndentation:
|
13
|
+
Enabled: true
|
14
|
+
EnforcedStyle: indented
|
15
|
+
|
16
|
+
Style/CaseIndentation:
|
17
|
+
Enabled: true
|
18
|
+
IndentWhenRelativeTo: end
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Backup Repos
|
2
|
+
|
3
|
+
Backup your GitHub and BitBucket repositories to specified directory.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```shell
|
8
|
+
$ gem install backup_repos
|
9
|
+
```
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
TODO: Write usage instructions here
|
14
|
+
|
15
|
+
## Development
|
16
|
+
|
17
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
18
|
+
|
19
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
20
|
+
|
21
|
+
## Contributing
|
22
|
+
|
23
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/backup_repos.
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'backup_repos/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'backup_repos'
|
8
|
+
spec.version = BackupRepos::VERSION
|
9
|
+
spec.authors = ['Justas Palumickas']
|
10
|
+
spec.email = ['jpalumickas@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'Backup your repositories'
|
13
|
+
spec.description = 'Backup your GitHub, BitBucket repositories to '\
|
14
|
+
'specified directory.'
|
15
|
+
spec.homepage = 'https://github.com/jpalumickas/backup-repos'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
.reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.bindir = 'bin'
|
20
|
+
spec.executables = ['backup-repos']
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_dependency 'commander', '~> 4.3'
|
24
|
+
spec.add_dependency 'colorize', '~> 0.7.7'
|
25
|
+
spec.add_dependency 'hashie', '~> 3.4'
|
26
|
+
spec.add_dependency 'octokit', '~> 4.2'
|
27
|
+
spec.add_dependency 'bitbucket_rest_api', '~> 0.1.7'
|
28
|
+
|
29
|
+
spec.add_development_dependency 'bundler', '~> 1.11'
|
30
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
31
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
32
|
+
end
|
data/bin/backup-repos
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "backup_repos"
|
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,49 @@
|
|
1
|
+
require_relative 'performers/base_git'
|
2
|
+
require_relative 'backup_github'
|
3
|
+
require_relative 'backup_bitbucket'
|
4
|
+
|
5
|
+
module BackupRepos
|
6
|
+
class Backup
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@errors = []
|
11
|
+
|
12
|
+
validate!
|
13
|
+
end
|
14
|
+
|
15
|
+
def process
|
16
|
+
return unless valid?
|
17
|
+
|
18
|
+
BackupGithub.process
|
19
|
+
BackupBitbucket.process
|
20
|
+
end
|
21
|
+
|
22
|
+
def valid?
|
23
|
+
errors.blank?
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def validate!
|
29
|
+
validate_backup_dir!
|
30
|
+
inform_about_error! unless valid?
|
31
|
+
end
|
32
|
+
|
33
|
+
def validate_backup_dir!
|
34
|
+
backup_root = BackupRepos.config.backup_root
|
35
|
+
|
36
|
+
if backup_root.blank?
|
37
|
+
errors.push('Backup directory is not specified.') && return
|
38
|
+
end
|
39
|
+
|
40
|
+
unless File.exist?(backup_root)
|
41
|
+
errors << 'Backup directory is not exists.'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def inform_about_error!
|
46
|
+
puts errors.first.red
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'bitbucket_rest_api'
|
2
|
+
|
3
|
+
require_relative 'performers/bitbucket_git_repository'
|
4
|
+
require_relative 'performers/bitbucket_git_wiki'
|
5
|
+
|
6
|
+
module BackupRepos
|
7
|
+
class BackupBitbucket
|
8
|
+
class << self
|
9
|
+
def process
|
10
|
+
new.process
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def process
|
15
|
+
ask_credentials
|
16
|
+
process_git_repositories
|
17
|
+
process_git_wikis
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def client
|
23
|
+
@client ||= ::BitBucket.new(login: @username, password: @password)
|
24
|
+
end
|
25
|
+
|
26
|
+
def ask_credentials
|
27
|
+
cli = HighLine.new
|
28
|
+
@username = cli.ask('BitBucket Username: ')
|
29
|
+
@password = cli.ask('BitBucket Password: ') { |q| q.echo = false }
|
30
|
+
end
|
31
|
+
|
32
|
+
def process_git_repositories
|
33
|
+
git_repos.each do |repo_params|
|
34
|
+
Performers::BitbucketGitRepository.new(repo_params).backup
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def process_git_wikis
|
39
|
+
wiki_repos = git_repos.select(&:has_wiki)
|
40
|
+
|
41
|
+
wiki_repos.each do |repo_params|
|
42
|
+
Performers::BitbucketGitWiki.new(repo_params).backup
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def git_repos
|
47
|
+
repos.select { |repo| repo.scm == 'git' }
|
48
|
+
end
|
49
|
+
|
50
|
+
def repos
|
51
|
+
@repos ||= client.repos.list
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'octokit'
|
2
|
+
|
3
|
+
require_relative 'performers/github_repository'
|
4
|
+
require_relative 'performers/github_wiki'
|
5
|
+
require_relative 'performers/github_gist'
|
6
|
+
|
7
|
+
module BackupRepos
|
8
|
+
class BackupGithub
|
9
|
+
class << self
|
10
|
+
def process
|
11
|
+
new.process
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def process
|
16
|
+
process_repositories
|
17
|
+
process_wiki
|
18
|
+
process_gist
|
19
|
+
end
|
20
|
+
|
21
|
+
def repos
|
22
|
+
@repos ||= client.repos
|
23
|
+
end
|
24
|
+
|
25
|
+
def client
|
26
|
+
@client ||= Octokit::Client.new(access_token: access_token)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def access_token
|
32
|
+
BackupRepos.config.github_access_token
|
33
|
+
end
|
34
|
+
|
35
|
+
def process_repositories
|
36
|
+
repos.each do |repo_params|
|
37
|
+
Performers::GithubRepository.new(repo_params).backup
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def process_wiki
|
42
|
+
repos.select(&:has_wiki?).each do |repo_params|
|
43
|
+
Performers::GithubWiki.new(repo_params).backup
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def process_gist
|
48
|
+
client.gists.each do |gist_params|
|
49
|
+
Performers::GithubGist.new(gist_params).backup
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'commander'
|
2
|
+
|
3
|
+
module BackupRepos
|
4
|
+
class Commander
|
5
|
+
include ::Commander::Methods
|
6
|
+
|
7
|
+
def run
|
8
|
+
program :name, 'Backup Repos'
|
9
|
+
program :version, BackupRepos::VERSION
|
10
|
+
program :description, 'Backup your repositories to specified directory.'
|
11
|
+
|
12
|
+
command :backup do |c|
|
13
|
+
c.syntax = 'backup-repos backup'
|
14
|
+
c.description = 'Backup your repositories.'
|
15
|
+
|
16
|
+
c.option '--backup_root DIR', String, 'Backup destination directory'
|
17
|
+
c.option '--debug', String, 'Show debug information'
|
18
|
+
|
19
|
+
c.action do |_args, options|
|
20
|
+
BackupRepos.config = options
|
21
|
+
BackupRepos::Backup.new.process
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
run!
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'hashie/mash'
|
3
|
+
|
4
|
+
module BackupRepos
|
5
|
+
class Config
|
6
|
+
attr_reader :options
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
# === OPTIONS
|
13
|
+
|
14
|
+
def debug
|
15
|
+
options.debug || config['debug']
|
16
|
+
end
|
17
|
+
|
18
|
+
def backup_root
|
19
|
+
return if backup_root_dir.blank?
|
20
|
+
File.expand_path(backup_root_dir)
|
21
|
+
end
|
22
|
+
|
23
|
+
def github_access_token
|
24
|
+
config_token = config['github']['access_token'] if config['github']
|
25
|
+
options.github_access_token || config_token
|
26
|
+
end
|
27
|
+
|
28
|
+
# ===
|
29
|
+
|
30
|
+
def method_missing(name, *_args)
|
31
|
+
config[name.to_s]
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def config
|
37
|
+
@config ||= Hashie::Mash.new(file_config)
|
38
|
+
end
|
39
|
+
|
40
|
+
def config_file
|
41
|
+
File.join(Dir.home, '.backup-repos')
|
42
|
+
end
|
43
|
+
|
44
|
+
def file_config
|
45
|
+
return {} unless File.exist?(config_file)
|
46
|
+
@file_config ||= (YAML.load_file(config_file) || {})
|
47
|
+
end
|
48
|
+
|
49
|
+
def backup_root_dir
|
50
|
+
options.backup_root || config['backup_root']
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module BackupRepos
|
2
|
+
module Performers
|
3
|
+
class BaseGit
|
4
|
+
attr_reader :params
|
5
|
+
|
6
|
+
def initialize(params)
|
7
|
+
@params = params
|
8
|
+
end
|
9
|
+
|
10
|
+
def backup
|
11
|
+
print "Backing up #{backup_path.yellow}: "
|
12
|
+
|
13
|
+
if File.exist?(full_backup_path)
|
14
|
+
update_repo
|
15
|
+
else
|
16
|
+
clone_repo
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def clone_url
|
21
|
+
fail 'Not implemented'
|
22
|
+
end
|
23
|
+
|
24
|
+
def backup_path
|
25
|
+
fail 'Not implemented'
|
26
|
+
end
|
27
|
+
|
28
|
+
def provider
|
29
|
+
fail 'Not implemented'
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def clone_repo
|
35
|
+
success, _output = BackupRepos.shell.run(
|
36
|
+
"git clone --mirror -n #{clone_url} #{full_backup_path}")
|
37
|
+
puts success ? 'Successfuly cloned'.green : 'Failed to clone'.red
|
38
|
+
end
|
39
|
+
|
40
|
+
def update_repo
|
41
|
+
FileUtils.cd(full_backup_path) do
|
42
|
+
success, _output = BackupRepos.shell.run('git remote update')
|
43
|
+
puts success ? 'Successfuly updated'.green : 'Failed to update'.red
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def full_backup_path
|
48
|
+
backup_root = BackupRepos.config.backup_root
|
49
|
+
fail 'Backup root is not specified!' if backup_root.blank?
|
50
|
+
|
51
|
+
File.join(backup_root, provider, backup_path)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module BackupRepos
|
2
|
+
module Performers
|
3
|
+
class BitbucketGitRepository < BaseGit
|
4
|
+
def provider
|
5
|
+
'BitBucket'
|
6
|
+
end
|
7
|
+
|
8
|
+
def clone_url
|
9
|
+
"git@bitbucket.org:#{full_name}.git"
|
10
|
+
end
|
11
|
+
|
12
|
+
def backup_path
|
13
|
+
"#{full_name}.git"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def full_name
|
19
|
+
"#{params.owner}/#{params.slug}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module BackupRepos
|
2
|
+
module Performers
|
3
|
+
class BitbucketGitWiki < BaseGit
|
4
|
+
def provider
|
5
|
+
'BitBucket'
|
6
|
+
end
|
7
|
+
|
8
|
+
def clone_url
|
9
|
+
"git@bitbucket.org:#{full_name}.git/wiki"
|
10
|
+
end
|
11
|
+
|
12
|
+
def backup_path
|
13
|
+
"#{full_name}.wiki.git"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def full_name
|
19
|
+
"#{params.owner}/#{params.slug}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module BackupRepos
|
2
|
+
module Performers
|
3
|
+
class GithubGist < BaseGit
|
4
|
+
def provider
|
5
|
+
'GitHub'
|
6
|
+
end
|
7
|
+
|
8
|
+
def clone_url
|
9
|
+
params.git_pull_url
|
10
|
+
end
|
11
|
+
|
12
|
+
def backup_path
|
13
|
+
if params.owner
|
14
|
+
"#{params.owner.login}/gists/#{params.id}.git"
|
15
|
+
else
|
16
|
+
"anonymous/gists/#{params.id}.git"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BackupRepos
|
2
|
+
module Performers
|
3
|
+
class GithubWiki < BaseGit
|
4
|
+
def provider
|
5
|
+
'GitHub'
|
6
|
+
end
|
7
|
+
|
8
|
+
def clone_url
|
9
|
+
"git@github.com:#{params.full_name}.wiki.git"
|
10
|
+
end
|
11
|
+
|
12
|
+
def backup_path
|
13
|
+
"#{params.full_name}.wiki.git"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module BackupRepos
|
2
|
+
class Shell
|
3
|
+
def initialize(opts = {})
|
4
|
+
@debug = opts[:debug] || false
|
5
|
+
end
|
6
|
+
|
7
|
+
def run(command)
|
8
|
+
log_command(command)
|
9
|
+
execute_command(command)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def debug?
|
15
|
+
@debug || BackupRepos.config.debug
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute_command(command)
|
19
|
+
output = IO.popen(command, 'r', err: [:child, :out]) do |io|
|
20
|
+
output = io.read
|
21
|
+
log_output(output)
|
22
|
+
output
|
23
|
+
end
|
24
|
+
|
25
|
+
[success?(output), output]
|
26
|
+
end
|
27
|
+
|
28
|
+
def success?(output)
|
29
|
+
return false if output =~ /remote error\:/
|
30
|
+
return false if output =~ /fatal\:/
|
31
|
+
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
def log_command(command)
|
36
|
+
return unless debug?
|
37
|
+
|
38
|
+
puts "EXECUTING: #{command}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def log_output(output)
|
42
|
+
return unless debug?
|
43
|
+
|
44
|
+
puts 'OUTPUT:'
|
45
|
+
puts output
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/backup_repos.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
|
3
|
+
require 'core_ext/object'
|
4
|
+
require 'core_ext/string'
|
5
|
+
|
6
|
+
require 'backup_repos/commander'
|
7
|
+
require 'backup_repos/config'
|
8
|
+
require 'backup_repos/shell'
|
9
|
+
require 'backup_repos/backup'
|
10
|
+
require 'backup_repos/version'
|
11
|
+
|
12
|
+
module BackupRepos
|
13
|
+
Octokit.auto_paginate = true
|
14
|
+
|
15
|
+
def self.shell
|
16
|
+
@shell ||= BackupRepos::Shell.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.config
|
20
|
+
@config ||= BackupRepos::Config.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.config=(options = {})
|
24
|
+
@config = BackupRepos::Config.new(options)
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: backup_repos
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Justas Palumickas
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: commander
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorize
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.7.7
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.7.7
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: hashie
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.4'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: octokit
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bitbucket_rest_api
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.1.7
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.1.7
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.11'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.11'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '10.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '10.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.0'
|
125
|
+
description: Backup your GitHub, BitBucket repositories to specified directory.
|
126
|
+
email:
|
127
|
+
- jpalumickas@gmail.com
|
128
|
+
executables:
|
129
|
+
- backup-repos
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ".gitignore"
|
134
|
+
- ".rspec"
|
135
|
+
- ".rubocop.yml"
|
136
|
+
- ".travis.yml"
|
137
|
+
- Gemfile
|
138
|
+
- README.md
|
139
|
+
- Rakefile
|
140
|
+
- backup_repos.gemspec
|
141
|
+
- bin/backup-repos
|
142
|
+
- bin/console
|
143
|
+
- bin/setup
|
144
|
+
- lib/backup_repos.rb
|
145
|
+
- lib/backup_repos/backup.rb
|
146
|
+
- lib/backup_repos/backup_bitbucket.rb
|
147
|
+
- lib/backup_repos/backup_github.rb
|
148
|
+
- lib/backup_repos/commander.rb
|
149
|
+
- lib/backup_repos/config.rb
|
150
|
+
- lib/backup_repos/performers/base_git.rb
|
151
|
+
- lib/backup_repos/performers/bitbucket_git_repository.rb
|
152
|
+
- lib/backup_repos/performers/bitbucket_git_wiki.rb
|
153
|
+
- lib/backup_repos/performers/github_gist.rb
|
154
|
+
- lib/backup_repos/performers/github_repository.rb
|
155
|
+
- lib/backup_repos/performers/github_wiki.rb
|
156
|
+
- lib/backup_repos/shell.rb
|
157
|
+
- lib/backup_repos/version.rb
|
158
|
+
- lib/core_ext/object.rb
|
159
|
+
- lib/core_ext/string.rb
|
160
|
+
homepage: https://github.com/jpalumickas/backup-repos
|
161
|
+
licenses: []
|
162
|
+
metadata: {}
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
requirements: []
|
178
|
+
rubyforge_project:
|
179
|
+
rubygems_version: 2.5.1
|
180
|
+
signing_key:
|
181
|
+
specification_version: 4
|
182
|
+
summary: Backup your repositories
|
183
|
+
test_files: []
|