gitbulk 0.0.2.134741

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
+ SHA256:
3
+ metadata.gz: 8a7bb2ee8c9dd947e3887a78ac5e3921d3899787cd1877cef5800746ebae0426
4
+ data.tar.gz: 572f89c47b6e4a135c20b9003ced7ed2be87bfded951c2ff15dcb120a5706044
5
+ SHA512:
6
+ metadata.gz: e57a8d23cb854dfbd065a266388a6db030a79b73c142638e3d3e28d4e1dfdf5d34ca739b1c58035d76d57f31f1d392375552b796fcfbc576759ab396d96309e9
7
+ data.tar.gz: 26acdcd253c305eb7a333092b1daba8977a0f17bb08d77ab495206e43226e07f2a9f272c5ff6ff6e6432fac15950ec9376534141d529d9c2ac045bebe0a42356
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in gitbulk.gemspec
6
+ gemspec
7
+
8
+
data/Gemfile.lock ADDED
@@ -0,0 +1,113 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gitbulk (0.0.2.134741)
5
+ activesupport (~> 6.0)
6
+ colorize
7
+ fileutils
8
+ json
9
+ thor
10
+ uri
11
+ yaml
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ activesupport (6.1.7.3)
17
+ concurrent-ruby (~> 1.0, >= 1.0.2)
18
+ i18n (>= 1.6, < 2)
19
+ minitest (>= 5.1)
20
+ tzinfo (~> 2.0)
21
+ zeitwerk (~> 2.3)
22
+ addressable (2.8.1)
23
+ public_suffix (>= 2.0.2, < 6.0)
24
+ ansi (1.5.0)
25
+ ast (2.4.2)
26
+ colorize (0.8.1)
27
+ concurrent-ruby (1.2.2)
28
+ crack (0.4.5)
29
+ rexml
30
+ diff-lcs (1.5.0)
31
+ docile (1.4.0)
32
+ fileutils (1.7.1)
33
+ hashdiff (1.0.1)
34
+ i18n (1.12.0)
35
+ concurrent-ruby (~> 1.0)
36
+ json (2.6.3)
37
+ minitest (5.18.0)
38
+ parallel (1.22.1)
39
+ parser (3.2.1.1)
40
+ ast (~> 2.4.1)
41
+ public_suffix (5.0.1)
42
+ rainbow (3.1.1)
43
+ rake (13.0.6)
44
+ regexp_parser (2.7.0)
45
+ rexml (3.2.5)
46
+ rspec (3.12.0)
47
+ rspec-core (~> 3.12.0)
48
+ rspec-expectations (~> 3.12.0)
49
+ rspec-mocks (~> 3.12.0)
50
+ rspec-core (3.12.1)
51
+ rspec-support (~> 3.12.0)
52
+ rspec-expectations (3.12.2)
53
+ diff-lcs (>= 1.2.0, < 2.0)
54
+ rspec-support (~> 3.12.0)
55
+ rspec-mocks (3.12.4)
56
+ diff-lcs (>= 1.2.0, < 2.0)
57
+ rspec-support (~> 3.12.0)
58
+ rspec-support (3.12.0)
59
+ rspec_junit_formatter (0.6.0)
60
+ rspec-core (>= 2, < 4, != 2.12.0)
61
+ rubocop (1.48.1)
62
+ json (~> 2.3)
63
+ parallel (~> 1.10)
64
+ parser (>= 3.2.0.0)
65
+ rainbow (>= 2.2.2, < 4.0)
66
+ regexp_parser (>= 1.8, < 3.0)
67
+ rexml (>= 3.2.5, < 4.0)
68
+ rubocop-ast (>= 1.26.0, < 2.0)
69
+ ruby-progressbar (~> 1.7)
70
+ unicode-display_width (>= 2.4.0, < 3.0)
71
+ rubocop-ast (1.28.0)
72
+ parser (>= 3.2.1.0)
73
+ ruby-progressbar (1.13.0)
74
+ simplecov (0.22.0)
75
+ docile (~> 1.1)
76
+ simplecov-html (~> 0.11)
77
+ simplecov_json_formatter (~> 0.1)
78
+ simplecov-console (0.9.1)
79
+ ansi
80
+ simplecov
81
+ terminal-table
82
+ simplecov-html (0.12.3)
83
+ simplecov_json_formatter (0.1.4)
84
+ terminal-table (3.0.2)
85
+ unicode-display_width (>= 1.1.1, < 3)
86
+ thor (1.2.1)
87
+ tzinfo (2.0.6)
88
+ concurrent-ruby (~> 1.0)
89
+ unicode-display_width (2.4.2)
90
+ uri (0.12.1)
91
+ webmock (3.18.1)
92
+ addressable (>= 2.8.0)
93
+ crack (>= 0.3.2)
94
+ hashdiff (>= 0.4.0, < 2.0.0)
95
+ yaml (0.2.1)
96
+ zeitwerk (2.6.7)
97
+
98
+ PLATFORMS
99
+ x86_64-linux
100
+
101
+ DEPENDENCIES
102
+ bundler (~> 2.2, >= 2.2.1)
103
+ gitbulk!
104
+ rake
105
+ rspec
106
+ rspec_junit_formatter
107
+ rubocop
108
+ simplecov
109
+ simplecov-console
110
+ webmock
111
+
112
+ BUNDLED WITH
113
+ 2.2.33
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2014-2022 Рнд Софт
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # Gitbulk
2
+
3
+ Консольная утилита для зеркалирования git-репозиториев.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ $ gitbulk --help
9
+
10
+ Usage: gitbulk [options]
11
+ --config=./gitbulk.yml ENV[GITBULK_CONFIG] Path to configuration file
12
+ --dryrun ENV[GITBULK_DRYRUN] Dry Run
13
+ --debug ENV[LOG_LEVEL] Verbose logs. ENV values: debug, info, warn, error
14
+ ```
15
+
16
+ ### Configuration
17
+
18
+ ```yaml
19
+ workdir: repositories
20
+ repositories:
21
+ - git: git@br.rnds.pro:ruby/lusnoc.git
22
+ mirrors:
23
+ - git@gitflic.ru:rndsoft/lusnoc.git
24
+ - git@github.com:RND-SOFT/lusnoc.git
25
+ ```
26
+
27
+ ## Installation
28
+
29
+ ```ruby
30
+ gem 'gitbulk'
31
+ ```
32
+
33
+ And then execute:
34
+
35
+ ```bash
36
+ $ bundle install
37
+ ```
38
+
39
+ Or install it yourself as:
40
+
41
+ ```bash
42
+ $ gem install gitbulk
43
+ ```
44
+
45
+
data/bin/console ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'retag'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require 'irb'
15
+ IRB.start(__FILE__)
16
+
data/bin/gitbulk ADDED
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # cwd = __dir__
4
+ # $root = "#{cwd}/"
5
+ # $: << $root
6
+
7
+ # lib = File.expand_path('lib', __dir__)
8
+ # $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
9
+
10
+
11
+ # require 'rubygems'
12
+ # require 'bundler'
13
+ # require 'bundler/setup'
14
+ # Bundler.require(:default)
15
+
16
+ require 'optparse'
17
+ require 'yaml'
18
+ require 'fileutils'
19
+
20
+ require 'gitbulk'
21
+
22
+ UTIL = File.basename(__FILE__)
23
+
24
+ Gitbulk::Util.setup
25
+
26
+ @opts = {
27
+ dryrun: ENV.fetch('GITBULK_DRYRUN', 'false').to_bool,
28
+ config: ENV.fetch('GITBULK_CONFIG', './gitbulk.yml'),
29
+ log_level: ENV.fetch('LOG_LEVEL', ::Logger::INFO)
30
+ }
31
+
32
+ parser = OptionParser.new do |o|
33
+ o.banner = "Usage: #{UTIL} [options] "
34
+
35
+ o.on("--config=#{@opts[:config]}",
36
+ 'ENV[GITBULK_CONFIG]'.ljust(25) + 'Path to configuration file') do |path|
37
+ @opts[:config] = File.expand_path(path.strip)
38
+ end
39
+
40
+ o.on('--dryrun',
41
+ 'ENV[GITBULK_DRYRUN]'.ljust(25) + 'Dry Run') do
42
+ @opts[:dryrun] = true
43
+ end
44
+
45
+ o.on('--debug',
46
+ 'ENV[LOG_LEVEL]'.ljust(25) + 'Verbose logs. ENV values: debug, info, warn, error') do
47
+ @opts[:log_level] = ::Logger::DEBUG
48
+ end
49
+ end
50
+ parser.parse!
51
+
52
+ Gitbulk::Util.logger.level = @opts[:log_level]
53
+
54
+ Gitbulk::Util.logger.debug do
55
+ "Config: #{JSON.pretty_generate(@opts)}"
56
+ end
57
+
58
+ config = YAML.load_file(@opts[:config])
59
+ logger = Gitbulk::Util.logger
60
+
61
+ FileUtils.mkdir_p(File.expand_path(config['workdir']))
62
+
63
+ Dir.chdir(config['workdir']) do |_dir|
64
+ config['repositories'].shuffle.each do |repo|
65
+ git = repo['git']
66
+
67
+ logger.info "Mirroring: #{git.inspect}".colorize(:green)
68
+
69
+
70
+ Gitbulk::Util.within_repo(git, logger: logger) do |_name|
71
+ repo['mirrors'].shuffle.each do |mirror|
72
+ logger.info "Pushing to #{mirror}".colorize(:blue)
73
+
74
+ #cmd = "git push --mirror #{mirror}"
75
+ cmd = "git push --all #{mirror}"
76
+ if @opts[:dryrun]
77
+ logger.tagged("DRYRUN") { logger.info cmd }
78
+ else
79
+ Gitbulk::Util.cmd!(cmd)
80
+ end
81
+ end
82
+ end
83
+
84
+ rescue StandardError => e
85
+ logger.error "Exception: #{e.inspect}".colorize(:light_red)
86
+ end
87
+ end
88
+
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/gitbulk.gemspec ADDED
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/gitbulk/version'
4
+
5
+ Gem::Specification.new 'gitbulk' do |spec|
6
+ spec.version = ENV['BUILDVERSION'].to_i > 0 ? "#{Gitbulk::VERSION}.#{ENV['BUILDVERSION'].to_i}" : Gitbulk::VERSION
7
+ spec.authors = ['Samoilenko Yuri']
8
+ spec.email = ['kinnalru@gmail.com']
9
+ spec.description = spec.summary = 'Gitbulk is cli for mirroring many git repositories at once'
10
+ spec.homepage = 'https://github.com/RnD-Soft/gitbulk'
11
+ spec.license = 'MIT'
12
+
13
+ spec.required_ruby_version = '>= 2.5.0'
14
+ spec.metadata['homepage_uri'] = spec.homepage
15
+ spec.metadata['source_code_uri'] = 'https://github.com/RnD-Soft/gitbulk'
16
+
17
+ spec.files = Dir['bin/**/*', 'lib/**/*', 'sig/**/*', 'Gemfile*', 'LICENSE', 'README.md', '*.gemspec']
18
+
19
+ spec.bindir = 'bin'
20
+ spec.executables = spec.files.grep(%r{^bin/gitbulk}) {|f| File.basename(f) }
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.1'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'rspec_junit_formatter'
27
+ spec.add_development_dependency 'rubocop'
28
+ spec.add_development_dependency 'simplecov'
29
+ spec.add_development_dependency 'simplecov-console'
30
+ spec.add_development_dependency 'webmock'
31
+
32
+ spec.add_runtime_dependency 'activesupport', '~> 6.0'
33
+ spec.add_runtime_dependency 'colorize'
34
+ spec.add_runtime_dependency 'json'
35
+ spec.add_runtime_dependency 'thor'
36
+ spec.add_runtime_dependency 'uri'
37
+ spec.add_runtime_dependency 'yaml'
38
+ spec.add_runtime_dependency 'fileutils'
39
+
40
+ end
41
+
@@ -0,0 +1,98 @@
1
+ require 'logger'
2
+ require 'colorize'
3
+ require 'open3'
4
+ require 'active_support/all'
5
+
6
+ module Gitbulk
7
+ class Util
8
+
9
+ class << self
10
+
11
+ def logger
12
+ $logger ||= ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)).tap do |logger|
13
+ logger.level = ENV.fetch('LOG_LEVEL', Logger::INFO)
14
+ formatter = Logger::Formatter.new
15
+ formatter.extend ActiveSupport::TaggedLogging::Formatter
16
+ logger.formatter = formatter
17
+ end
18
+ end
19
+
20
+ def setup
21
+ STDOUT.sync = true
22
+ STDERR.sync = true
23
+
24
+ String.class_eval do
25
+ def to_bool
26
+ return true if self == true || self =~ (/(true|t|yes|y|1)$/i)
27
+ return false if self == false || self.blank? || self =~ (/(false|f|no|n|0)$/i)
28
+
29
+ raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
30
+ end
31
+ end
32
+ end
33
+
34
+ def within_repo(git, logger: $logger)
35
+ _host, name = git.split(':')
36
+
37
+ logger.tagged(name) do
38
+ if File.exist?(name)
39
+ Dir.chdir(name) do |_dir|
40
+ cmd!('git fetch --prune', logger: logger)
41
+ yield(name)
42
+ end
43
+ else
44
+ cmd!("git clone --mirror #{git} #{name}", logger: logger)
45
+ Dir.chdir(name) do |_dir|
46
+ yield(name)
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ def cmd!(cmd, capture: false, logger: $logger)
53
+ $cmdnum ||= 0
54
+ $cmdnum += 1
55
+ tag = $cmdnum.to_s.rjust(3, '0')
56
+ output = ''
57
+
58
+ logger.tagged("CMD#{tag}".colorize(:light_black)) do
59
+ logger.debug cmd.colorize(:light_black)
60
+ end
61
+
62
+ code = Open3.popen3(cmd) do |stdin, stdout, stderr, thr|
63
+ stdin.close_write
64
+ files = [stdout, stderr]
65
+
66
+ until files.empty?
67
+ ready = IO.select(files)
68
+ readable = ready[0]
69
+
70
+ readable.each do |f|
71
+ begin
72
+ line = f.readline
73
+ if f == stderr
74
+ logger.tagged("ERR#{tag}") { logger.error(line.strip) }
75
+ else
76
+ output += line
77
+ logger.tagged("OUT#{tag}") { logger.info(line.strip) } unless capture
78
+ end
79
+ rescue EOFError => e
80
+ files.delete f
81
+ end
82
+ end
83
+ end
84
+
85
+ thr.value
86
+ end
87
+
88
+ raise "Execution failed #{code}: #{cmd}" unless code.success?
89
+
90
+ output
91
+ end
92
+
93
+
94
+ end
95
+
96
+ end
97
+ end
98
+
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitbulk
4
+
5
+ VERSION = '0.0.2'
6
+
7
+ end
8
+
data/lib/gitbulk.rb ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support'
4
+ require_relative 'gitbulk/version'
5
+ require_relative 'gitbulk/utils'
6
+
7
+ module Gitbulk
8
+ class Error < StandardError; end
9
+ end
10
+
metadata ADDED
@@ -0,0 +1,273 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitbulk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2.134741
5
+ platform: ruby
6
+ authors:
7
+ - Samoilenko Yuri
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-04-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.2.1
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.2.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec_junit_formatter
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rubocop
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: simplecov
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: simplecov-console
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: webmock
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: activesupport
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '6.0'
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '6.0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: colorize
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: json
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: thor
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :runtime
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: uri
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :runtime
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: yaml
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :runtime
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ - !ruby/object:Gem::Dependency
216
+ name: fileutils
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ type: :runtime
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ description: Gitbulk is cli for mirroring many git repositories at once
230
+ email:
231
+ - kinnalru@gmail.com
232
+ executables:
233
+ - gitbulk
234
+ extensions: []
235
+ extra_rdoc_files: []
236
+ files:
237
+ - Gemfile
238
+ - Gemfile.lock
239
+ - LICENSE
240
+ - README.md
241
+ - bin/console
242
+ - bin/gitbulk
243
+ - bin/setup
244
+ - gitbulk.gemspec
245
+ - lib/gitbulk.rb
246
+ - lib/gitbulk/utils.rb
247
+ - lib/gitbulk/version.rb
248
+ homepage: https://github.com/RnD-Soft/gitbulk
249
+ licenses:
250
+ - MIT
251
+ metadata:
252
+ homepage_uri: https://github.com/RnD-Soft/gitbulk
253
+ source_code_uri: https://github.com/RnD-Soft/gitbulk
254
+ post_install_message:
255
+ rdoc_options: []
256
+ require_paths:
257
+ - lib
258
+ required_ruby_version: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - ">="
261
+ - !ruby/object:Gem::Version
262
+ version: 2.5.0
263
+ required_rubygems_version: !ruby/object:Gem::Requirement
264
+ requirements:
265
+ - - ">="
266
+ - !ruby/object:Gem::Version
267
+ version: '0'
268
+ requirements: []
269
+ rubygems_version: 3.4.10
270
+ signing_key:
271
+ specification_version: 4
272
+ summary: Gitbulk is cli for mirroring many git repositories at once
273
+ test_files: []