update_repo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b8306af42ee0918611be90bb7d383edd58b01809
4
+ data.tar.gz: 0044b4e45d04bf1d7e453f4d2186507c4ff93742
5
+ SHA512:
6
+ metadata.gz: 48dcd4bc4e2333d0ba99b885d632b9c13e8b88c657b1a47ff501b1289cb3d7e8ba7289027a253c14f48af34a1725819c49df3de63170b039dc5605b23411eac9
7
+ data.tar.gz: 5751e8889ff7c22b04a06d8ff6b1bca976ab3536d513dda738f7461b542c5679a53322c1876e006d2a2c323ca4c3050471564be2c4e0f37b61fb62b2042be169
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .remote-sync.json
11
+ .token
12
+ .updatereporc
@@ -0,0 +1,4 @@
1
+ ---
2
+ notifications:
3
+ pullrequest:
4
+ comment: verbose
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.1
5
+ - 2.2.3
6
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in update_repo.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Grant Ramsay
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.
@@ -0,0 +1,103 @@
1
+ # update_repo
2
+
3
+ A Simple Gem to keep multiple cloned Git Repositories up to date.
4
+
5
+ This is the conversion to a Gem of one of my standalone Ruby scripts. Still very much work in progress, but functions as required.
6
+
7
+ ## Usage
8
+
9
+ #### Pre-requirements
10
+
11
+ It goes without saying that at the very least a working copy of [Git][git] needs to be installed on your machine. Also, the script has only been tested under Linux, not windows.
12
+
13
+ [git]: http://git-scm.com
14
+
15
+ #### Quick start
16
+ Create a [YAML](http://yaml.org/)-formatted configuration file `.updatereporc` **in your home directory** that contains at least a 'location' tag pointing to the directory containing the git repositories you wish to have updated :
17
+ ```yaml
18
+ ---
19
+ location:
20
+ - /media/myuser/git-repos
21
+ - /data/RepoDir
22
+ ```
23
+ This is the most basic example of a configuration file and there are other options that can be added to fine-tune the operation - see the description of configuration options below.
24
+
25
+ This file should be located in the users home directory (`~/.updatereporc`).
26
+
27
+ Run the script :
28
+ ```
29
+ $ update_repo
30
+ ```
31
+
32
+ ## Configuration
33
+ #### Configuration file
34
+ To be added.
35
+
36
+ #### Command line switches
37
+ To be added.
38
+
39
+ ## To-Do
40
+ Not in any specific order :
41
+
42
+ - Improve error-checking and recovery while parsing the configuration file (convert to using my '[Confoog][confoog]' gem for example)
43
+ - Either add an option 'variants' or similar to allow non-standard git pull commands (eg Ubuntu kernel), or update the 'exceptions' option to do same.
44
+ - Error checking and reporting for the git processes - retry for connection issues etc (config setting).
45
+ - Add extra (optional) stats / info at end-of-job :
46
+ * number of repos updated
47
+ * number of repos skipped
48
+ * list of changed repos
49
+ * errors or connection problems
50
+ * _more..._
51
+ - Add command line options to override configuration, and even specify an alternate config file. Any options so specified will have precedence over settings specified in the configuration file.
52
+ - Add command line options for verbose or quiet, with same options in config file.
53
+ - Add ability to specify a new directory (containing Git repos) to search from the command line, and optionally save this to the standard configuration.
54
+ - Add new repo from the command line that will be cloned to the default repo directory and then updated as usual. Extra flag added for "add only, clone later" for offline use.
55
+ - Add flag for 'default' repo directory (or another specific directory - if it does not already exist it will be created and added to the standard list) which will be used for new additions.
56
+ - Option to save log file for each run.
57
+ - Add option to only display a (text) tree of the discovered git repositories, not updating them; Similar option to just dump a list of the remote git locations.
58
+ - Document configuration file format and options.
59
+ - Add testing!
60
+
61
+ [confoog]: http://confoog.seapagan.net
62
+
63
+ ## Development
64
+
65
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests (or simply `rake`). You can also run `bin/console` for an interactive prompt that will allow you to experiment.
66
+
67
+ To install this gem onto your local machine, run `bundle exec rake install`.
68
+
69
+ Run `rake` to run the RSpec tests, which also runs `RuboCop`, `Reek` and `inch --pedantic` too.
70
+
71
+ ## Contributing
72
+
73
+ 1. Fork it
74
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
75
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
76
+ 4. Push to the branch (`git push origin my-new-feature`)
77
+ 5. Create new Pull Request
78
+
79
+ <del>Please note - This Gem currently aims to pass 100% on [RuboCop][rubocop], [Reek][reek] and [Inch-CI][inch] (on pedantic mode), so all pull requests should do likewise. Ask for guidance if needed.
80
+ Running `rake` will automatically test all 3 of those along with the RSpec tests. Note that Failures of Rubocop will cause the CI (Travis) to fail, however 'Reek' failures will not.</del>
81
+ This is still currently a messy conversion to Gem from a standalone script, so the RSpec tests are non-existent and it will fail all [RuboCop][rubocop], [Reek][reek] and [Inch-CI][inch]. This will be quickly fixed though. Once that is done this message will be removed and the above comment reinstated.
82
+
83
+ [rubocop]: https://github.com/bbatsov/rubocop
84
+ [reek]: https://github.com/troessner/reek
85
+ [inch]: https://inch-ci.org
86
+
87
+ ## Versioning
88
+
89
+ This Gem aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations
90
+ of this scheme should be reported as bugs. Specifically, if a minor or patch
91
+ version is released that breaks backward compatibility, that version should be
92
+ immediately yanked and/or a new version should be immediately released that
93
+ restores compatibility. Breaking changes to the public API will only be
94
+ introduced with new major versions.
95
+
96
+ Of course, currently we have not even reached version 1, so leave off the version requirement completely. Expect any and all of the API and interface to change!
97
+
98
+ [semver]: http://semver.org/
99
+ [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
100
+
101
+ ## License
102
+
103
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,31 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require 'rubocop/rake_task'
4
+ require 'inch/rake'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ RuboCop::RakeTask.new do |task|
9
+ task.options << 'lib'
10
+ end
11
+
12
+ Inch::Rake::Suggest.new do |suggest|
13
+ suggest.args << '--pedantic'
14
+ end
15
+
16
+ # reek is not compatible with Ruby < 2.0]
17
+ if RUBY_VERSION > '2.0'
18
+ require 'reek/rake/task'
19
+ Reek::Rake::Task.new do |t|
20
+ t.fail_on_error = false
21
+ t.verbose = true
22
+ t.reek_opts = '-U'
23
+ end
24
+ else
25
+ task :reek do
26
+ # Empty task
27
+ end
28
+ end
29
+
30
+ # task default: [:rubocop, :inch, :reek, :spec, :build]
31
+ task default: [ :spec, :build] # leave the others off until we are more advanced.
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "update_repo"
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
@@ -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
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'update_repo' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require "pathname"
10
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require "rubygems"
14
+ require "bundler/setup"
15
+
16
+ load Gem.bin_path("update_repo", "update_repo")
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "update_repo"
4
+ include UpdateRepo
5
+
6
+ # start the process...
7
+ configs, location = check_config
8
+
9
+ show_header(configs, location)
10
+
11
+ # save the current time
12
+ start_time = Time.now
13
+ configs['location'].each do |loc|
14
+ recurse_dir(loc, configs['exceptions'])
15
+ end
16
+
17
+ # get duration since we saved the time
18
+ duration = Time.now - start_time
19
+
20
+ puts "\nUpdates completed - #{$counter} repositories processed in #{Time.at(duration).utc.strftime("%H:%M:%S")}\n".underline
@@ -0,0 +1,73 @@
1
+ require "update_repo/version"
2
+ require 'yaml'
3
+ require 'colorize'
4
+
5
+ module UpdateRepo
6
+
7
+ CONFIG_FILE = '.updatereporc'
8
+ $counter = 0
9
+
10
+ def recurse_dir(dirname, exceptions)
11
+ Dir.foreach(dirname) do |dir|
12
+ dirpath= dirname + '/' + dir
13
+ if File.directory?(dirpath) && dir != '.' && dir != '..' then
14
+ gitpath = dirpath + '/.git'
15
+ if File.exists?(gitpath) && File.directory?(gitpath) then
16
+ if exceptions.nil? || !exceptions.include?(dir.chomp)
17
+ update_repo(dirpath)
18
+ $counter += 1
19
+ else
20
+ Dir.chdir(gitpath) do
21
+ repo_url = `git config remote.origin.url`.chomp
22
+ print "* Skipping #{dirpath}".yellow, " (#{repo_url})\n"
23
+ end
24
+ end
25
+ else
26
+ recurse_dir(dirpath, exceptions)
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def show_header(configs, location)
33
+ # print an informative header before starting
34
+ print "\nGit Repo update utility (v.0.1.0)".underline, " \u00A9 Grant Ramsay <seapagan@gmail.com>\n"
35
+ puts "Using Configuration from #{location}"
36
+ puts "\nRepo location(s):".underline
37
+ configs['location'].each do |loc|
38
+ print "-> ", loc.cyan, "\n"
39
+ end
40
+ if !configs['exceptions'].nil? then
41
+ print "\nExclusions:".underline, " ", configs['exceptions'].join(', ').yellow, "\n"
42
+ end
43
+ puts # blank line before processing starts
44
+ end
45
+
46
+ def update_repo(dirname)
47
+ Dir.chdir(dirname) do
48
+ repo_url = `git config remote.origin.url`.chomp
49
+ print "* ", "Checking ", dirname.green, " (#{repo_url})\n"
50
+ print " -> "
51
+ system "git pull"
52
+ end
53
+ end
54
+
55
+ def check_config
56
+ # locate the configuration file.
57
+ # first we check in this script location and if present then we ignore any
58
+ # further files.
59
+ dev_config = File.join '.', CONFIG_FILE
60
+ user_config = File.join Gem.user_home, CONFIG_FILE
61
+
62
+ if File.exist? dev_config
63
+ # configuration exists in script directory so we ignore any others.
64
+ return YAML.load_file(dev_config), File.expand_path(dev_config)
65
+ elsif File.exist? user_config
66
+ # configuration exists in user home directory so we use that.
67
+ return YAML.load_file(user_config), File.expand_path(user_config)
68
+ end
69
+ # otherwise return error
70
+ puts "Error : Cannot find configuration file '#{user_config}', aborting".red
71
+ exit 1
72
+ end
73
+ end
@@ -0,0 +1,3 @@
1
+ module UpdateRepo
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+ # rubocop:disable LineLength
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'update_repo/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "update_repo"
9
+ spec.version = UpdateRepo::VERSION
10
+ spec.required_ruby_version = '>= 1.9.3'
11
+ spec.authors = ["Grant Ramsay"]
12
+ spec.email = ["seapagan@gmail.com"]
13
+
14
+ spec.summary = 'A Simple Gem to keep multiple cloned Git Repositories up to date'
15
+ spec.homepage = "http://opensource.seapagan.net"
16
+ spec.license = "MIT"
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.11"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency 'pry'
27
+ spec.add_development_dependency 'fakefs'
28
+ spec.add_development_dependency 'coveralls'
29
+ spec.add_development_dependency 'rubocop'
30
+ spec.add_development_dependency 'inch'
31
+ spec.add_development_dependency 'simplecov', '~> 0.10'
32
+ spec.add_development_dependency 'pullreview-coverage'
33
+ spec.add_development_dependency 'should_not'
34
+
35
+ spec.add_dependency 'colorize'
36
+
37
+ # Depends on Ruby version if we can use 'Reek'
38
+ spec.add_development_dependency 'reek', '~> 3.3' if RUBY_VERSION > '2.0'
39
+ end
metadata ADDED
@@ -0,0 +1,243 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: update_repo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Grant Ramsay
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-03-01 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: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fakefs
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coveralls
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: inch
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.10'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.10'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pullreview-coverage
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: should_not
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: colorize
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: reek
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '3.3'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '3.3'
195
+ description:
196
+ email:
197
+ - seapagan@gmail.com
198
+ executables:
199
+ - update_repo
200
+ extensions: []
201
+ extra_rdoc_files: []
202
+ files:
203
+ - ".gitignore"
204
+ - ".pullreview.yml"
205
+ - ".rspec"
206
+ - ".travis.yml"
207
+ - Gemfile
208
+ - LICENSE.txt
209
+ - README.md
210
+ - Rakefile
211
+ - bin/console
212
+ - bin/setup
213
+ - bin/update_repo
214
+ - exe/update_repo
215
+ - lib/update_repo.rb
216
+ - lib/update_repo/version.rb
217
+ - update_repo.gemspec
218
+ homepage: http://opensource.seapagan.net
219
+ licenses:
220
+ - MIT
221
+ metadata: {}
222
+ post_install_message:
223
+ rdoc_options: []
224
+ require_paths:
225
+ - lib
226
+ required_ruby_version: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: 1.9.3
231
+ required_rubygems_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ requirements: []
237
+ rubyforge_project:
238
+ rubygems_version: 2.6.1
239
+ signing_key:
240
+ specification_version: 4
241
+ summary: A Simple Gem to keep multiple cloned Git Repositories up to date
242
+ test_files: []
243
+ has_rdoc: