monos 0.2.1 → 0.6.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 +3 -2
- data/README.md +38 -3
- data/Rakefile +6 -4
- data/lib/mono.rb +21 -11
- data/lib/mono/base.rb +137 -40
- data/lib/mono/commands/backup.rb +15 -0
- data/lib/mono/commands/env.rb +26 -13
- data/lib/mono/commands/fetch.rb +43 -49
- data/lib/mono/commands/run.rb +47 -0
- data/lib/mono/commands/status.rb +65 -71
- data/lib/mono/commands/sync.rb +53 -59
- data/lib/mono/experimental.rb +104 -0
- data/lib/mono/tool.rb +40 -36
- data/lib/mono/version.rb +20 -15
- data/test/test_base.rb +29 -2
- metadata +44 -9
- data/lib/mono/git/base.rb +0 -226
- data/lib/mono/sportdb.rb +0 -109
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2b5768d1c5b1f9862099eb5d67e7c574561f256
|
4
|
+
data.tar.gz: e257ffe48bab62974a02b76443e0d0c4aad563af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63f482ee7c5696cff694e57a22efc2a187a20a074e10c651bbd272acedb03104a8646464fe0386cea3bb71f0e532b7f039ebcec9301c185437ca23ac6bfffad0
|
7
|
+
data.tar.gz: 4d6213f4928e6abcb3809101f7b7d299eeaf24c51edeee8424f497bdeed6b3e7406127472e3639eb6efb719d4d98f98663a93b59c77634130074b2053cfc66be
|
data/Manifest.txt
CHANGED
@@ -6,12 +6,13 @@ bin/mo
|
|
6
6
|
bin/mono
|
7
7
|
lib/mono.rb
|
8
8
|
lib/mono/base.rb
|
9
|
+
lib/mono/commands/backup.rb
|
9
10
|
lib/mono/commands/env.rb
|
10
11
|
lib/mono/commands/fetch.rb
|
12
|
+
lib/mono/commands/run.rb
|
11
13
|
lib/mono/commands/status.rb
|
12
14
|
lib/mono/commands/sync.rb
|
13
|
-
lib/mono/
|
14
|
-
lib/mono/sportdb.rb
|
15
|
+
lib/mono/experimental.rb
|
15
16
|
lib/mono/tool.rb
|
16
17
|
lib/mono/version.rb
|
17
18
|
lib/monos.rb
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# monos - monorepo / mono source tree tools and (startup) scripts
|
2
2
|
|
3
3
|
|
4
|
-
* home :: [github.com/
|
5
|
-
* bugs :: [github.com/
|
4
|
+
* home :: [github.com/rubycoco/git](https://github.com/rubycoco/git)
|
5
|
+
* bugs :: [github.com/rubycoco/git/issues](https://github.com/rubycoco/git/issues)
|
6
6
|
* gem :: [rubygems.org/gems/monos](https://rubygems.org/gems/monos)
|
7
7
|
* rdoc :: [rubydoc.info/gems/monos](http://rubydoc.info/gems/monos)
|
8
8
|
* forum :: [opensport](http://groups.google.com/group/opensport)
|
@@ -52,7 +52,7 @@ openfootball:
|
|
52
52
|
|
53
53
|
### Commands
|
54
54
|
|
55
|
-
`status` • `fetch` • `sync` • `env`
|
55
|
+
`status` • `fetch` • `sync` • `run` • `env` • `backup`
|
56
56
|
|
57
57
|
### `status` Command
|
58
58
|
|
@@ -114,12 +114,47 @@ $ 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
|
|
120
141
|
Use the `env` command to check your `mono` environment setup.
|
121
142
|
|
122
143
|
|
144
|
+
|
145
|
+
|
146
|
+
### `backup` Command
|
147
|
+
|
148
|
+
Use the `backup` command to backup all repos using
|
149
|
+
the [`gitti-backup` machinery »](https://github.com/rubycoco/gitti/tree/master/gitti-backup)
|
150
|
+
|
151
|
+
In a nutshell backup will backup all repos by using
|
152
|
+
1. `git clone --mirror` or
|
153
|
+
2. `git remote update` (if the local backup already exists)
|
154
|
+
and store all bare repos (without workspace) in the `~/backup` directory.
|
155
|
+
|
156
|
+
|
157
|
+
|
123
158
|
That's all for now.
|
124
159
|
|
125
160
|
|
data/Rakefile
CHANGED
@@ -3,13 +3,12 @@ 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
|
-
|
12
|
-
self.urls = { home: 'https://github.com/sportdb/sport.db' }
|
11
|
+
self.urls = { home: 'https://github.com/rubycoco/git' }
|
13
12
|
|
14
13
|
self.author = 'Gerald Bauer'
|
15
14
|
self.email = 'opensport@googlegroups.com'
|
@@ -20,7 +19,10 @@ 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.6.1' ],
|
24
|
+
['gitti-backup', '>= 0.4.1' ],
|
25
|
+
]
|
24
26
|
|
25
27
|
self.spec_extras = {
|
26
28
|
required_ruby_version: '>= 2.2.2'
|
data/lib/mono.rb
CHANGED
@@ -1,24 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require '
|
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
|
+
require 'gitti/backup/base'
|
6
|
+
|
7
|
+
|
8
|
+
module Mono
|
9
|
+
## note: make Git, GitProject, GitRepoSet, etc. available without Gitti::
|
10
|
+
include Gitti
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
## some more stdlibs
|
15
|
+
# require 'optparse'
|
16
|
+
|
8
17
|
|
9
18
|
|
10
19
|
###
|
11
20
|
# our own code
|
12
|
-
require 'mono/version'
|
21
|
+
require 'mono/version' # let version always go first
|
13
22
|
require 'mono/base'
|
14
|
-
require 'mono/
|
23
|
+
require 'mono/experimental'
|
15
24
|
|
16
25
|
require 'mono/commands/status'
|
17
26
|
require 'mono/commands/fetch'
|
18
27
|
require 'mono/commands/sync'
|
19
28
|
require 'mono/commands/env'
|
29
|
+
require 'mono/commands/backup'
|
30
|
+
require 'mono/commands/run'
|
20
31
|
require 'mono/tool'
|
21
32
|
|
22
33
|
|
23
|
-
|
24
|
-
puts Mono::Module.banner # say hello
|
34
|
+
puts MonoCore.banner # say hello
|
data/lib/mono/base.rb
CHANGED
@@ -1,40 +1,137 @@
|
|
1
|
-
|
2
|
-
module Mono
|
3
|
-
|
4
|
-
def self.root ## root of single (monorepo) source tree
|
5
|
-
@@root ||= begin
|
6
|
-
## todo/fix:
|
7
|
-
## check if windows - otherwise use /sites
|
8
|
-
## check if root directory exists?
|
9
|
-
if ENV['MOPATH']
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
|
1
|
+
|
2
|
+
module Mono
|
3
|
+
|
4
|
+
def self.root ## root of single (monorepo) source tree
|
5
|
+
@@root ||= begin
|
6
|
+
## todo/fix:
|
7
|
+
## check if windows - otherwise use /sites
|
8
|
+
## check if root directory exists?
|
9
|
+
if ENV['MOPATH']
|
10
|
+
## use expand path to make (assure) absolute path - why? why not?
|
11
|
+
::File.expand_path( ENV['MOPATH'] )
|
12
|
+
elsif ::Dir.exist?( 'C:/Sites' )
|
13
|
+
'C:/Sites'
|
14
|
+
else
|
15
|
+
'/sites'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.root=( path )
|
21
|
+
## use expand path to make (assure) absolute path - why? why not?
|
22
|
+
@@root = ::File.expand_path( path )
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
def self.monofile
|
29
|
+
path = if ::File.exist?( './monorepo.yml' )
|
30
|
+
'./monorepo.yml'
|
31
|
+
elsif ::File.exist?( './monotree.yml' )
|
32
|
+
'./monotree.yml'
|
33
|
+
elsif ::File.exist?( './repos.yml' )
|
34
|
+
'./repos.yml'
|
35
|
+
else
|
36
|
+
puts "!! WARN: no mono configuration file (that is, {monorepo,monotree,repos}.yml) found in >#{Dir.getwd}<"
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
if path
|
41
|
+
GitRepoSet.read( path )
|
42
|
+
else
|
43
|
+
GitRepoSet.new( {} ) ## return empty set -todo/check: return nil - why? why not?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end ## module Mono
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
#####################
|
52
|
+
# add file and repo helper
|
53
|
+
|
54
|
+
##
|
55
|
+
## todo/fix: ALWAYS assert name format
|
56
|
+
## (rename to mononame and monopath) - why? why not?
|
57
|
+
|
58
|
+
class MonoGitHub
|
59
|
+
def self.clone( name )
|
60
|
+
path = MonoFile.expand_path( name )
|
61
|
+
|
62
|
+
org_path = File.dirname( path )
|
63
|
+
FileUtils.mkdir_p( org_path ) unless Dir.exist?( org_path ) ## make sure path exists
|
64
|
+
|
65
|
+
### note: use a github clone url (using ssh) like:
|
66
|
+
## git@github.com:rubycoco/gitti.git
|
67
|
+
ssh_clone_url = "git@github.com:#{name}.git"
|
68
|
+
|
69
|
+
Dir.chdir( org_path ) do
|
70
|
+
Gitti::Git.clone( ssh_clone_url )
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
MonoGithub = MonoGitHub ## add convenience (typo?) alias
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
class MonoGitProject
|
79
|
+
def self.open( name, &block )
|
80
|
+
path = MonoFile.expand_path( name )
|
81
|
+
Gitti::GitProject.open( path, &block )
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
module Mono
|
87
|
+
## add some short cuts
|
88
|
+
def self.open( name, &block ) MonoGitProject.open( name, &block ); end
|
89
|
+
def self.clone( name ) MonoGitHub.clone( name ); end
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
class MonoFile
|
95
|
+
## e.g. openfootball/austria etc.
|
96
|
+
## expand to to "real" absolute path
|
97
|
+
##
|
98
|
+
## todo/check: assert name must be {orgname,username}/reponame
|
99
|
+
def self.expand_path( path )
|
100
|
+
"#{Mono.root}/#{path}"
|
101
|
+
end
|
102
|
+
def self.exist?( path )
|
103
|
+
::File.exist?( expand_path( path ))
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
## add some aliases - why? why not?
|
108
|
+
class << self
|
109
|
+
alias_method :real_path, :expand_path
|
110
|
+
alias_method :exists?, :exist? ## add deprecated exists? too - why? why not?
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
## path always relative to Mono.root
|
116
|
+
## todo/fix: use File.expand_path( path, Mono.root ) - why? why not?
|
117
|
+
## or always enfore "absolut" path e.g. do NOT allow ../ or ./ or such
|
118
|
+
def self.open( path, mode='r:utf-8', &block )
|
119
|
+
full_path = "#{Mono.root}/#{path}"
|
120
|
+
## make sure path exists if we open for writing/appending - why? why not?
|
121
|
+
if mode[0] == 'w' || mode[0] == 'a'
|
122
|
+
::FileUtils.mkdir_p( ::File.dirname( full_path ) ) ## make sure path exists
|
123
|
+
end
|
124
|
+
|
125
|
+
::File.open( full_path, mode ) do |file|
|
126
|
+
block.call( file )
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.read_utf8( path )
|
131
|
+
open( path, 'r:utf-8') { |file| file.read }
|
132
|
+
end
|
133
|
+
end ## class MonoFile
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Mono
|
2
|
+
|
3
|
+
## pass along hash of repos (e.g. monorepo.yml or repos.yml )
|
4
|
+
def self.backup
|
5
|
+
repos = Mono.monofile
|
6
|
+
|
7
|
+
backup = GitBackup.new
|
8
|
+
|
9
|
+
## step 2: pass in all repos to backup by using
|
10
|
+
## 1) git clone --mirror or
|
11
|
+
## 2) git remote update (if local backup already exists)
|
12
|
+
backup.backup( repos )
|
13
|
+
end # method backup
|
14
|
+
|
15
|
+
end # module Mono
|
data/lib/mono/commands/env.rb
CHANGED
@@ -1,13 +1,26 @@
|
|
1
|
-
module Mono
|
2
|
-
|
3
|
-
def self.env ## check environment setup
|
4
|
-
puts "Mono.root (MOPATH): >#{Mono.root}<"
|
5
|
-
puts "
|
6
|
-
puts
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
module Mono
|
2
|
+
|
3
|
+
def self.env ## check environment setup
|
4
|
+
puts "Mono.root (MOPATH): >#{Mono.root}<"
|
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
|
+
|
13
|
+
puts "git version:"
|
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
|
+
|
21
|
+
puts
|
22
|
+
puts "monorepo.yml:"
|
23
|
+
pp Mono.monofile
|
24
|
+
end
|
25
|
+
|
26
|
+
end # module Mono
|
data/lib/mono/commands/fetch.rb
CHANGED
@@ -1,49 +1,43 @@
|
|
1
|
-
module Mono
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
total_repos =
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
puts
|
45
|
-
print "#{count_repos} repo(s) @ #{count_orgs} org(s)"
|
46
|
-
print "\n"
|
47
|
-
end # method fetch
|
48
|
-
|
49
|
-
end # module Mono
|
1
|
+
module Mono
|
2
|
+
## pass along hash of repos (e.g. monorepo.yml or repos.yml )
|
3
|
+
def self.fetch
|
4
|
+
repos = Mono.monofile
|
5
|
+
|
6
|
+
count_orgs = 0
|
7
|
+
count_repos = 0
|
8
|
+
|
9
|
+
total_repos = repos.size
|
10
|
+
|
11
|
+
|
12
|
+
repos.each do |org,names|
|
13
|
+
|
14
|
+
org_path = "#{Mono.root}/#{org}"
|
15
|
+
|
16
|
+
names.each do |name|
|
17
|
+
puts "[#{count_repos+1}/#{total_repos}] #{org}@#{name}..."
|
18
|
+
|
19
|
+
repo = GitHubRepo.new( org, name ) ## owner, name e.g. rubylibs/webservice
|
20
|
+
|
21
|
+
::Dir.chdir( org_path ) do
|
22
|
+
if ::Dir.exist?( repo.name )
|
23
|
+
GitProject.open( repo.name ) do |proj|
|
24
|
+
proj.fetch
|
25
|
+
end
|
26
|
+
else
|
27
|
+
puts "!! repo not found / missing"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
count_repos += 1
|
32
|
+
end
|
33
|
+
count_orgs += 1
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
## print stats & changes summary
|
38
|
+
puts
|
39
|
+
print "#{count_repos} repo(s) @ #{count_orgs} org(s)"
|
40
|
+
print "\n"
|
41
|
+
end # method fetch
|
42
|
+
|
43
|
+
end # module Mono
|