monos 0.2.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|