monos 0.2.1 → 0.3.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 +4 -4
- data/Manifest.txt +2 -2
- data/README.md +22 -1
- data/Rakefile +4 -3
- data/lib/mono.rb +16 -9
- data/lib/mono/base.rb +2 -2
- data/lib/mono/commands/env.rb +14 -1
- data/lib/mono/commands/fetch.rb +7 -12
- data/lib/mono/commands/run.rb +47 -0
- data/lib/mono/commands/status.rb +7 -13
- data/lib/mono/commands/sync.rb +8 -14
- data/lib/mono/tool.rb +2 -0
- data/lib/mono/version.rb +20 -15
- data/lib/{mono/sportdb.rb → sportdb/setup.rb} +27 -30
- data/test/test_base.rb +29 -2
- metadata +18 -4
- data/lib/mono/git/base.rb +0 -226
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cafc90639b5bb02b8be04d5f993dd518a53db83
|
4
|
+
data.tar.gz: b3aba3dbae6d86e86d78eb53add58def4faa3844
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9192d91ab18d06d5b167be39171f86d71daf40629c5cf5aeeff8de9e8cb9c5b681e33de16ef08e02ee2986c97b46e9c4bc2292e364d6dab94ee6f28ce98e93e0
|
7
|
+
data.tar.gz: a48bacb9f54bf48e6264c9ece66e030cdd3c8c900373d141cc4d430b913851b802b4cb8b8c6d4d3c7b9f458584dcc372fe4e7e0ea45585d6cfcc20ca6f5a6414
|
data/Manifest.txt
CHANGED
@@ -8,12 +8,12 @@ lib/mono.rb
|
|
8
8
|
lib/mono/base.rb
|
9
9
|
lib/mono/commands/env.rb
|
10
10
|
lib/mono/commands/fetch.rb
|
11
|
+
lib/mono/commands/run.rb
|
11
12
|
lib/mono/commands/status.rb
|
12
13
|
lib/mono/commands/sync.rb
|
13
|
-
lib/mono/git/base.rb
|
14
|
-
lib/mono/sportdb.rb
|
15
14
|
lib/mono/tool.rb
|
16
15
|
lib/mono/version.rb
|
17
16
|
lib/monos.rb
|
17
|
+
lib/sportdb/setup.rb
|
18
18
|
test/helper.rb
|
19
19
|
test/test_base.rb
|
data/README.md
CHANGED
@@ -52,7 +52,7 @@ openfootball:
|
|
52
52
|
|
53
53
|
### Commands
|
54
54
|
|
55
|
-
`status` • `fetch` • `sync` • `env`
|
55
|
+
`status` • `fetch` • `sync` • `run` •`env`
|
56
56
|
|
57
57
|
### `status` Command
|
58
58
|
|
@@ -114,6 +114,27 @@ $ mo get
|
|
114
114
|
Note: `install` or `get` or `up` are all aliases that you can use for `sync`.
|
115
115
|
|
116
116
|
|
117
|
+
### `run` Command
|
118
|
+
|
119
|
+
Use the `run` command to run any command in all repos. Example:
|
120
|
+
|
121
|
+
```
|
122
|
+
$ mono run git ls-files
|
123
|
+
$ mono exec git ls-files # exec is an alias for run
|
124
|
+
$ mo run git ls-files # mo is a "shortcut" convenience alias for mono
|
125
|
+
$ mo exec git ls-files
|
126
|
+
|
127
|
+
# -or-
|
128
|
+
|
129
|
+
$ mono run tree
|
130
|
+
$ mono exec tree
|
131
|
+
$ mo run tree
|
132
|
+
$ mo exec tree
|
133
|
+
```
|
134
|
+
|
135
|
+
Note: `exec` is an alias that you can use for `run`.
|
136
|
+
|
137
|
+
|
117
138
|
|
118
139
|
### `env` Command
|
119
140
|
|
data/Rakefile
CHANGED
@@ -3,12 +3,11 @@ require './lib/mono/version.rb'
|
|
3
3
|
|
4
4
|
Hoe.spec 'monos' do
|
5
5
|
|
6
|
-
self.version =
|
6
|
+
self.version = MonoCore::VERSION
|
7
7
|
|
8
8
|
self.summary = "monos - monorepo / mono source tree tools and (startup) scripts"
|
9
9
|
self.description = summary
|
10
10
|
|
11
|
-
# self.urls = ['https://github.com/sportdb/sport.db' ]
|
12
11
|
self.urls = { home: 'https://github.com/sportdb/sport.db' }
|
13
12
|
|
14
13
|
self.author = 'Gerald Bauer'
|
@@ -20,7 +19,9 @@ Hoe.spec 'monos' do
|
|
20
19
|
|
21
20
|
self.licenses = ['Public Domain']
|
22
21
|
|
23
|
-
self.extra_deps = [
|
22
|
+
self.extra_deps = [
|
23
|
+
['gitti', '>= 0.4.0' ],
|
24
|
+
]
|
24
25
|
|
25
26
|
self.spec_extras = {
|
26
27
|
required_ruby_version: '>= 2.2.2'
|
data/lib/mono.rb
CHANGED
@@ -1,24 +1,31 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
## first add git support
|
2
|
+
## note: use the "modular" version WITHOUT auto-include gitti,
|
3
|
+
## thus, require 'gitti/base' (and NOT 'gitti')
|
4
|
+
require 'gitti/base'
|
5
|
+
|
6
|
+
module Mono
|
7
|
+
## note: make Git, GitProject, GitRepoSet, etc. available without Gitti::
|
8
|
+
include Gitti
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
## some more stdlibs
|
13
|
+
# require 'optparse'
|
14
|
+
|
8
15
|
|
9
16
|
|
10
17
|
###
|
11
18
|
# our own code
|
12
19
|
require 'mono/version' # let version always go first
|
13
20
|
require 'mono/base'
|
14
|
-
require 'mono/git/base'
|
15
21
|
|
16
22
|
require 'mono/commands/status'
|
17
23
|
require 'mono/commands/fetch'
|
18
24
|
require 'mono/commands/sync'
|
19
25
|
require 'mono/commands/env'
|
26
|
+
require 'mono/commands/run'
|
20
27
|
require 'mono/tool'
|
21
28
|
|
22
29
|
|
23
30
|
|
24
|
-
puts
|
31
|
+
puts MonoCore.banner # say hello
|
data/lib/mono/base.rb
CHANGED
data/lib/mono/commands/env.rb
CHANGED
@@ -2,9 +2,22 @@ module Mono
|
|
2
2
|
|
3
3
|
def self.env ## check environment setup
|
4
4
|
puts "Mono.root (MOPATH): >#{Mono.root}<"
|
5
|
-
puts "
|
5
|
+
puts "MonoCore.root: >#{MonoCore.root}<"
|
6
|
+
puts
|
7
|
+
|
8
|
+
## add ruby version and path - why? why not? e.g.
|
9
|
+
## ruby:
|
10
|
+
## bin: C:/ri330/Ruby2.0.0/bin/ruby.exe
|
11
|
+
## version: ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]
|
12
|
+
|
6
13
|
puts "git version:"
|
7
14
|
Git.version
|
15
|
+
## Git.config( 'user.name' )
|
16
|
+
## Git.config( 'user.email', show_origin: true )
|
17
|
+
|
18
|
+
## dump/print all user.* settings e.g. user.name, user.email
|
19
|
+
Git.config( /user/, show_origin: true )
|
20
|
+
|
8
21
|
puts
|
9
22
|
puts "monorepo.yml:"
|
10
23
|
pp Mono.monofile
|
data/lib/mono/commands/fetch.rb
CHANGED
@@ -1,21 +1,16 @@
|
|
1
1
|
module Mono
|
2
2
|
|
3
3
|
## pass along hash of repos (e.g. monorepo.yml or repos.yml )
|
4
|
-
def self.fetch
|
4
|
+
def self.fetch
|
5
|
+
repos = Mono.monofile
|
6
|
+
|
5
7
|
count_orgs = 0
|
6
8
|
count_repos = 0
|
7
9
|
|
8
|
-
|
9
|
-
total_repos = h.reduce(0) {|sum,(_,names)| sum+= names.size; sum }
|
10
|
-
|
10
|
+
total_repos = repos.size
|
11
11
|
|
12
|
-
h.each do |org_with_counter,names|
|
13
12
|
|
14
|
-
|
15
|
-
## mrhydescripts (3) => mrhydescripts
|
16
|
-
## footballjs (4) => footballjs
|
17
|
-
## etc.
|
18
|
-
org = org_with_counter.sub( /\([0-9]+\)/, '' ).strip
|
13
|
+
repos.each do |org,names|
|
19
14
|
|
20
15
|
org_path = "#{Mono.root}/#{org}"
|
21
16
|
|
@@ -26,8 +21,8 @@ module Mono
|
|
26
21
|
|
27
22
|
Dir.chdir( org_path ) do
|
28
23
|
if Dir.exist?( repo.name )
|
29
|
-
GitProject.open( repo.name ) do |
|
30
|
-
|
24
|
+
GitProject.open( repo.name ) do |proj|
|
25
|
+
proj.fetch
|
31
26
|
end
|
32
27
|
else
|
33
28
|
puts "!! repo not found / missing"
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Mono
|
2
|
+
|
3
|
+
def self.run( *args )
|
4
|
+
## todo/fix: use a "standard" argument to pass along hash of repos
|
5
|
+
## (e.g. monorepo.yml or repos.yml ) how? - why? why not?
|
6
|
+
repos = Mono.monofile
|
7
|
+
|
8
|
+
|
9
|
+
cmd = args.join( ' ' )
|
10
|
+
|
11
|
+
count_orgs = 0
|
12
|
+
count_repos = 0
|
13
|
+
|
14
|
+
total_repos = repos.size
|
15
|
+
|
16
|
+
repos.each do |org,names|
|
17
|
+
|
18
|
+
org_path = "#{Mono.root}/#{org}"
|
19
|
+
|
20
|
+
names.each do |name|
|
21
|
+
puts "[#{count_repos+1}/#{total_repos}] #{org}@#{name}..."
|
22
|
+
|
23
|
+
repo = GitHubRepo.new( org, name ) ## owner, name e.g. rubylibs/webservice
|
24
|
+
|
25
|
+
Dir.chdir( org_path ) do
|
26
|
+
if Dir.exist?( repo.name )
|
27
|
+
GitProject.open( repo.name ) do |proj|
|
28
|
+
proj.run( cmd )
|
29
|
+
end
|
30
|
+
else
|
31
|
+
puts "!! repo not found / missing"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
count_repos += 1
|
36
|
+
end
|
37
|
+
count_orgs += 1
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
## print stats & changes summary
|
42
|
+
puts
|
43
|
+
print "#{count_repos} repo(s) @ #{count_orgs} org(s)"
|
44
|
+
print "\n"
|
45
|
+
end # method run
|
46
|
+
|
47
|
+
end # module Mono
|
data/lib/mono/commands/status.rb
CHANGED
@@ -1,23 +1,17 @@
|
|
1
1
|
module Mono
|
2
2
|
|
3
3
|
## pass along hash of repos (e.g. monorepo.yml or repos.yml )
|
4
|
-
def self.status
|
4
|
+
def self.status
|
5
|
+
repos = Mono.monofile
|
6
|
+
|
5
7
|
changes = [] ## track changes
|
6
8
|
|
7
9
|
count_orgs = 0
|
8
10
|
count_repos = 0
|
9
11
|
|
10
|
-
|
11
|
-
total_repos = h.reduce(0) {|sum,(_,names)| sum+= names.size; sum }
|
12
|
-
|
13
|
-
|
14
|
-
h.each do |org_with_counter,names|
|
12
|
+
total_repos = repos.size
|
15
13
|
|
16
|
-
|
17
|
-
## mrhydescripts (3) => mrhydescripts
|
18
|
-
## footballjs (4) => footballjs
|
19
|
-
## etc.
|
20
|
-
org = org_with_counter.sub( /\([0-9]+\)/, '' ).strip
|
14
|
+
repos.each do |org,names|
|
21
15
|
|
22
16
|
org_path = "#{Mono.root}/#{org}"
|
23
17
|
|
@@ -28,8 +22,8 @@ module Mono
|
|
28
22
|
|
29
23
|
Dir.chdir( org_path ) do
|
30
24
|
if Dir.exist?( repo.name )
|
31
|
-
GitProject.open( repo.name ) do |
|
32
|
-
output =
|
25
|
+
GitProject.open( repo.name ) do |proj|
|
26
|
+
output = proj.changes
|
33
27
|
if output.empty?
|
34
28
|
puts " - no changes -"
|
35
29
|
else
|
data/lib/mono/commands/sync.rb
CHANGED
@@ -1,21 +1,15 @@
|
|
1
1
|
module Mono
|
2
2
|
|
3
3
|
## pass along hash of repos (e.g. monorepo.yml or repos.yml )
|
4
|
-
def self.sync
|
4
|
+
def self.sync
|
5
|
+
repos = Mono.monofile
|
6
|
+
|
5
7
|
count_orgs = 0
|
6
8
|
count_repos = 0
|
7
9
|
|
8
|
-
|
9
|
-
total_repos = h.reduce(0) {|sum,(_,names)| sum+= names.size; sum }
|
10
|
-
|
11
|
-
h.each do |org_with_counter,names|
|
12
|
-
|
13
|
-
## remove optional number from key e.g.
|
14
|
-
## mrhydescripts (3) => mrhydescripts
|
15
|
-
## footballjs (4) => footballjs
|
16
|
-
## etc.
|
17
|
-
org = org_with_counter.sub( /\([0-9]+\)/, '' ).strip
|
10
|
+
total_repos = repos.size
|
18
11
|
|
12
|
+
repos.each do |org,names|
|
19
13
|
org_path = "#{Mono.root}/#{org}"
|
20
14
|
FileUtils.mkdir_p( org_path ) unless Dir.exist?( org_path ) ## make sure path exists
|
21
15
|
|
@@ -26,11 +20,11 @@ module Mono
|
|
26
20
|
|
27
21
|
Dir.chdir( org_path ) do
|
28
22
|
if Dir.exist?( repo.name )
|
29
|
-
GitProject.open( repo.name ) do |
|
30
|
-
if
|
23
|
+
GitProject.open( repo.name ) do |proj|
|
24
|
+
if proj.changes?
|
31
25
|
puts "!! WARN - local changes in workdir; skipping fast forward (remote) sync / merge"
|
32
26
|
else
|
33
|
-
|
27
|
+
proj.fast_forward ## note: use git pull --ff-only (fast forward only - do NOT merge)
|
34
28
|
end
|
35
29
|
end
|
36
30
|
else
|
data/lib/mono/tool.rb
CHANGED
data/lib/mono/version.rb
CHANGED
@@ -1,28 +1,33 @@
|
|
1
1
|
## note: use a different module/namespace
|
2
|
-
## for the gem version info e.g.
|
2
|
+
## for the gem version info e.g. MonoCore vs Mono
|
3
3
|
|
4
|
-
module
|
4
|
+
module MonoCore ## todo/check: rename to MonoMeta, MonoModule or such - why? why not?
|
5
|
+
|
6
|
+
## note: move root to its own namespace to avoid
|
7
|
+
## conflict with Mono.root!!!!
|
5
8
|
MAJOR = 0 ## todo: namespace inside version or something - why? why not??
|
6
|
-
MINOR =
|
7
|
-
PATCH =
|
9
|
+
MINOR = 3
|
10
|
+
PATCH = 0
|
8
11
|
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
9
12
|
|
10
13
|
def self.version
|
11
14
|
VERSION
|
12
15
|
end
|
13
16
|
|
17
|
+
def self.banner
|
18
|
+
"monos/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.root
|
22
|
+
File.expand_path( File.dirname(File.dirname(__FILE__) ))
|
23
|
+
end
|
14
24
|
|
15
|
-
|
16
|
-
## note: move root to its own namespace to avoid
|
17
|
-
## conflict with Mono.root!!!!
|
25
|
+
end # module MonoCore
|
18
26
|
|
19
|
-
def self.banner
|
20
|
-
"monos/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
21
|
-
end
|
22
27
|
|
23
|
-
|
24
|
-
|
25
|
-
|
28
|
+
##################################
|
29
|
+
# add a convenience shortcut for now - why? why not?
|
30
|
+
module Mono
|
31
|
+
VERSION = MonoCore::VERSION
|
32
|
+
end
|
26
33
|
|
27
|
-
end # module Module
|
28
|
-
end # module Mono
|
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
|
15
15
|
## todo/fix: move later app/gem-family/-specific configs
|
16
|
-
## to its own gem e.g. mono-sportdb or such - why? why not?
|
16
|
+
## to its own gem e.g. mono-sportdb or sportdb-boot/starter/startup or such - why? why not?
|
17
17
|
|
18
18
|
|
19
19
|
|
@@ -40,30 +40,22 @@ require_relative '../mono'
|
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
-
|
44
|
-
SPORTDB_DIR = "#{Mono.root}/sportdb" # path to libs
|
45
|
-
OPENFOOTBALL_DIR = "#{Mono.root}/openfootball"
|
46
|
-
## add more "standard" dirs - why? why not? - why? why not?
|
47
|
-
## use
|
48
|
-
## module SportDb::Source / Code / Boot or such????
|
49
|
-
##
|
50
|
-
## use module SportDb::Boot - yes, yes, yes - why? why not?
|
51
|
-
|
52
|
-
|
53
|
-
|
54
43
|
## convenience pre-configured/pre-built shortcut - lets you use
|
55
|
-
## require '
|
56
|
-
##
|
44
|
+
## require 'sportdb/setup'
|
45
|
+
## SportDb::Boot.setup
|
46
|
+
|
57
47
|
|
58
|
-
|
48
|
+
module SportDb
|
49
|
+
module Boot
|
50
|
+
def self.root() Mono.root; end
|
59
51
|
|
60
|
-
|
61
|
-
def self.setup ## setup load path
|
52
|
+
def self.setup ## setup load path
|
62
53
|
### note: for now always assume dev/development
|
63
54
|
### add ENV check later or pass in as args or such
|
64
55
|
|
65
|
-
puts "
|
56
|
+
puts "SportDb::Boot.root: >#{root}<"
|
66
57
|
|
58
|
+
### todo/fix: use an inline Gemfile and bundler's setup? why? why not?
|
67
59
|
$LOAD_PATH.unshift( "#{root}/yorobot/sport.db.more/sportdb-exporters/lib" )
|
68
60
|
$LOAD_PATH.unshift( "#{root}/yorobot/sport.db.more/sportdb-writers/lib" )
|
69
61
|
$LOAD_PATH.unshift( "#{root}/yorobot/sport.db.more/sportdb-linters/lib" )
|
@@ -90,20 +82,25 @@ module Mono
|
|
90
82
|
$LOAD_PATH.unshift( "#{root}/sportdb/sport.db/alphabets/lib" )
|
91
83
|
|
92
84
|
pp $: # print load path
|
93
|
-
|
94
|
-
end # module
|
85
|
+
end # method setup
|
86
|
+
end # module Boot
|
87
|
+
end # module Sportdb
|
88
|
+
|
95
89
|
|
90
|
+
### use something like SportDb::Path[:sportdb]
|
91
|
+
## SportDb.path( :sportdb )
|
92
|
+
## SportDb::Boot.sportdb_path or sportdb_dir or such???
|
93
|
+
## SportDb::Env.path( 'sportdb' ) ???
|
94
|
+
## SportDb::Env::SPORTDB_DIR ???
|
95
|
+
## or such - why? why not?
|
96
|
+
##
|
97
|
+
## check rails path setup / style ???
|
96
98
|
|
97
|
-
|
99
|
+
SPORTDB_DIR = "#{SportDb::Boot.root}/sportdb" # path to libs
|
100
|
+
OPENFOOTBALL_DIR = "#{SportDb::Boot.root}/openfootball"
|
101
|
+
## add more "standard" dirs - why? why not? - why? why not?
|
98
102
|
## use
|
99
|
-
##
|
100
|
-
## module SportDb
|
101
|
-
## def setup ...
|
102
|
-
## end
|
103
|
-
## end
|
103
|
+
## module SportDb::Source / Code / Boot or such????
|
104
104
|
##
|
105
|
-
##
|
106
|
-
## module Mono
|
107
|
-
## extend Starter::SportDb
|
108
|
-
## end
|
105
|
+
## use module SportDb::Boot - yes, yes, yes - why? why not?
|
109
106
|
|
data/test/test_base.rb
CHANGED
@@ -6,10 +6,14 @@ require 'helper'
|
|
6
6
|
|
7
7
|
class TestBase < MiniTest::Test
|
8
8
|
|
9
|
+
Git = Mono::Git
|
10
|
+
|
9
11
|
def test_version
|
12
|
+
puts MonoCore::VERSION
|
13
|
+
puts MonoCore.banner
|
14
|
+
puts MonoCore.root
|
15
|
+
|
10
16
|
puts Mono::VERSION
|
11
|
-
puts Mono::Module.banner
|
12
|
-
puts Mono::Module.root
|
13
17
|
end
|
14
18
|
|
15
19
|
def test_root
|
@@ -20,5 +24,28 @@ class TestBase < MiniTest::Test
|
|
20
24
|
puts Mono.env
|
21
25
|
end
|
22
26
|
|
27
|
+
|
28
|
+
def test_git_config
|
29
|
+
puts "---"
|
30
|
+
Git.config( 'user.name' )
|
31
|
+
Git.config( 'user.name', show_origin: true )
|
32
|
+
# Git.config( 'user.name', show_scope: true )
|
33
|
+
|
34
|
+
puts "---"
|
35
|
+
Git.config( /user/ ) ## note: pass in regex for regex match/search
|
36
|
+
Git.config( /user/, show_origin: true )
|
37
|
+
# Git.config( /user/, show_scope: true )
|
38
|
+
|
39
|
+
puts "---"
|
40
|
+
Git.config( /user\./ ) ## note: pass in regex for regex match/search
|
41
|
+
|
42
|
+
puts "---"
|
43
|
+
## note: if NOT found Mono::Git.config will exit(1) !!!
|
44
|
+
## Mono::Git.config( /proxy/, show_origin: true )
|
45
|
+
## Mono::Git.config( /http/, show_origin: true )
|
46
|
+
|
47
|
+
puts "---"
|
48
|
+
end
|
49
|
+
|
23
50
|
end # class TestBase
|
24
51
|
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: gitti
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.4.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.4.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rdoc
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,13 +73,13 @@ files:
|
|
59
73
|
- lib/mono/base.rb
|
60
74
|
- lib/mono/commands/env.rb
|
61
75
|
- lib/mono/commands/fetch.rb
|
76
|
+
- lib/mono/commands/run.rb
|
62
77
|
- lib/mono/commands/status.rb
|
63
78
|
- lib/mono/commands/sync.rb
|
64
|
-
- lib/mono/git/base.rb
|
65
|
-
- lib/mono/sportdb.rb
|
66
79
|
- lib/mono/tool.rb
|
67
80
|
- lib/mono/version.rb
|
68
81
|
- lib/monos.rb
|
82
|
+
- lib/sportdb/setup.rb
|
69
83
|
- test/helper.rb
|
70
84
|
- test/test_base.rb
|
71
85
|
homepage: https://github.com/sportdb/sport.db
|
data/lib/mono/git/base.rb
DELETED
@@ -1,226 +0,0 @@
|
|
1
|
-
|
2
|
-
class GitError < StandardError
|
3
|
-
end
|
4
|
-
|
5
|
-
class Git ## make Git a module - why? why not?
|
6
|
-
|
7
|
-
###
|
8
|
-
## todo/fix: change opts=nil to *args or such - why? why not?
|
9
|
-
|
10
|
-
|
11
|
-
###############
|
12
|
-
## "setup" starter git commands
|
13
|
-
|
14
|
-
def self.clone( repo, name=nil )
|
15
|
-
cmd = "git clone #{repo}"
|
16
|
-
cmd << " #{name}" unless name.nil? || name.empty?
|
17
|
-
Shell.run( cmd )
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.mirror( repo )
|
21
|
-
cmd = "git clone --mirror #{repo}"
|
22
|
-
Shell.run( cmd )
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
#################
|
27
|
-
## standard git commands
|
28
|
-
|
29
|
-
def self.version
|
30
|
-
cmd = 'git --version'
|
31
|
-
Shell.run( cmd )
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.status( short: false )
|
35
|
-
cmd = 'git status'
|
36
|
-
cmd << " --short" if short
|
37
|
-
Shell.run( cmd )
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.changes ## same as git status --short - keep shortcut / alias - why? why not?
|
41
|
-
## returns changed files - one per line or empty if no changes
|
42
|
-
cmd = 'git status --short'
|
43
|
-
Shell.run( cmd )
|
44
|
-
end
|
45
|
-
|
46
|
-
#####################
|
47
|
-
## status helpers
|
48
|
-
|
49
|
-
## git status --short returns empty stdout/list
|
50
|
-
def self.clean?() changes.empty?; end
|
51
|
-
|
52
|
-
def self.changes?() clean? == false; end ## reverse of clean?
|
53
|
-
class << self
|
54
|
-
alias_method :dirty?, :changes? ## add alias
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
#######
|
59
|
-
## more (major) git commands
|
60
|
-
|
61
|
-
def self.fetch
|
62
|
-
cmd = 'git fetch'
|
63
|
-
Shell.run( cmd )
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.pull
|
67
|
-
cmd = 'git pull'
|
68
|
-
Shell.run( cmd )
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.fast_forward
|
72
|
-
cmd = 'git pull --ff-only'
|
73
|
-
Shell.run( cmd )
|
74
|
-
end
|
75
|
-
class << self
|
76
|
-
alias_method :ff, :fast_forward ## add alias
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
|
-
def self.push
|
81
|
-
cmd = 'git push'
|
82
|
-
Shell.run( cmd )
|
83
|
-
end
|
84
|
-
|
85
|
-
def self.add( pathspec=nil ) ## e.g. git add . or git add *.rb or such
|
86
|
-
cmd = 'git add'
|
87
|
-
cmd << " #{pathspec}" unless pathspec.nil? || pathspec.empty?
|
88
|
-
Shell.run( cmd )
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.add_all
|
92
|
-
cmd = 'git add --all'
|
93
|
-
Shell.run( cmd )
|
94
|
-
end
|
95
|
-
|
96
|
-
def self.commit( message: )
|
97
|
-
cmd = 'git commit'
|
98
|
-
cmd << %Q{ -m "#{message}"} unless message.nil? || message.empty?
|
99
|
-
Shell.run( cmd )
|
100
|
-
end
|
101
|
-
|
102
|
-
|
103
|
-
#############
|
104
|
-
# change git ls-files to git ls-tree ... - why? why not?
|
105
|
-
#
|
106
|
-
# git ls-tree --full-tree --name-only -r HEAD
|
107
|
-
# --full-tree makes the command run as if you were in the repo's root directory.
|
108
|
-
# -r recurses into subdirectories. Combined with --full-tree, this gives you all committed, tracked files.
|
109
|
-
# --name-only removes SHA / permission info for when you just want the file paths.
|
110
|
-
# HEAD specifies which branch you want the list of tracked, committed files for.
|
111
|
-
# You could change this to master or any other branch name, but HEAD is the commit you have checked out right now.
|
112
|
-
#
|
113
|
-
# see https://stackoverflow.com/questions/15606955/how-can-i-make-git-show-a-list-of-the-files-that-are-being-tracked
|
114
|
-
#
|
115
|
-
# was:
|
116
|
-
|
117
|
-
def self.files ## was: e.g. git ls-files . or git ls-files *.rb or such
|
118
|
-
cmd = 'git ls-tree --full-tree --name-only -r HEAD' # was: 'git ls-files'
|
119
|
-
Shell.run( cmd )
|
120
|
-
end
|
121
|
-
## add list_files or ls_files alias - why? why not?
|
122
|
-
|
123
|
-
|
124
|
-
###
|
125
|
-
# use nested class for "base" for running commands - why? why not?
|
126
|
-
class Shell
|
127
|
-
def self.run( cmd )
|
128
|
-
print "cmd exec >#{cmd}<..."
|
129
|
-
stdout, stderr, status = Open3.capture3( cmd )
|
130
|
-
|
131
|
-
if status.success?
|
132
|
-
print " OK"
|
133
|
-
print "\n"
|
134
|
-
else
|
135
|
-
print " FAIL (#{status.exitstatus})"
|
136
|
-
print "\n"
|
137
|
-
end
|
138
|
-
|
139
|
-
unless stdout.empty?
|
140
|
-
puts stdout
|
141
|
-
end
|
142
|
-
|
143
|
-
unless stderr.empty?
|
144
|
-
## todo/check: or use >2: or &2: or such
|
145
|
-
## stderr output not always an error (that is, exit status might be 0)
|
146
|
-
puts "STDERR:"
|
147
|
-
puts stderr
|
148
|
-
end
|
149
|
-
|
150
|
-
if status.success?
|
151
|
-
stdout # return stdout string
|
152
|
-
else
|
153
|
-
puts "!! ERROR: cmd exec >#{cmd}< failed with exit status #{status.exitstatus}:"
|
154
|
-
puts stderr
|
155
|
-
raise GitError, "git cmd exec >#{cmd}< failed with exit status #{status.exitstatus}<: #{stderr}"
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end # class Shell
|
159
|
-
|
160
|
-
end # class Git
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
class GitProject
|
165
|
-
def self.open( path, &blk )
|
166
|
-
new( path ).open( &blk )
|
167
|
-
end
|
168
|
-
|
169
|
-
def initialize( path )
|
170
|
-
raise ArgumentError, "dir >#{path}< not found; dir MUST already exist for GitProject class - sorry" unless Dir.exist?( path )
|
171
|
-
raise ArgumentError, "dir >#{path}/.git< not found; dir MUST already be initialized with git for GitProject class - sorry" unless Dir.exist?( "#{path}/.git" )
|
172
|
-
@path = path
|
173
|
-
end
|
174
|
-
|
175
|
-
|
176
|
-
def open( &blk )
|
177
|
-
## puts "Dir.getwd: #{Dir.getwd}"
|
178
|
-
Dir.chdir( @path ) do
|
179
|
-
blk.call( self )
|
180
|
-
end
|
181
|
-
## puts "Dir.getwd: #{Dir.getwd}"
|
182
|
-
end
|
183
|
-
|
184
|
-
|
185
|
-
def status( short: false ) Git.status( short: short ); end
|
186
|
-
def changes() Git.changes; end
|
187
|
-
def clean?() Git.clean?; end
|
188
|
-
def changes?() Git.changes?; end
|
189
|
-
alias_method :dirty?, :changes?
|
190
|
-
|
191
|
-
|
192
|
-
def fetch() Git.fetch; end
|
193
|
-
def pull() Git.pull; end
|
194
|
-
def fast_forward() Git.fast_forward; end
|
195
|
-
alias_method :ff, :fast_forward
|
196
|
-
|
197
|
-
def push() Git.push; end
|
198
|
-
|
199
|
-
def add( pathspec ) Git.add( pathspec ); end
|
200
|
-
def add_all() Git.add_all; end
|
201
|
-
def commit( message: ) Git.commit( message: message ); end
|
202
|
-
|
203
|
-
def files() Git.files; end
|
204
|
-
|
205
|
-
end # class GitProject
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
## todo: change to GitHubRepoRef or GitHubProject
|
211
|
-
## or Git::GitHub or Git::Source::GitHub or such - why? why not?
|
212
|
-
class GitHubRepo
|
213
|
-
attr_reader :owner, :name
|
214
|
-
|
215
|
-
def initialize( owner, name )
|
216
|
-
@owner = owner ## use/rename to login or something - why? why not??
|
217
|
-
@name = name # e.g. "rubylibs/webservice"
|
218
|
-
end
|
219
|
-
|
220
|
-
def ssh_clone_url
|
221
|
-
## check: use https: as default? for github - http:// still supported? or redirected?
|
222
|
-
## "http://github.com/#{@owner}/#{@name}"
|
223
|
-
"git@github.com:#{@owner}/#{@name}.git"
|
224
|
-
end
|
225
|
-
end ## class GitHubRepo
|
226
|
-
|