dtk-common 0.5.15 → 0.5.16
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZmIxNGJmODM0YmY0NTRiMmFmZGQwM2I4OTg1Zjc0NTVjZTI2ZjI0ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZGM5OGZlMTNmNDU4MjQwOWZiYmFkMDc2ZDZkNWFhZDQ5ZTAxN2U3Mw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTZkNGUzNjk4NzBiMDg1YzVkYTMwMjE5MDAzMWUwMGRiNzQxMDg4MWUzYThj
|
10
|
+
ODAzZTM0OWJlYTQwZmQyMzVlMjEwNThhNzIzZWQxY2FmZmE1NGNmYmFiN2Mw
|
11
|
+
YWJkMWRjNjZlNTU2ZGJjY2U4YjYwMWQ2NDc3OTgwMTMwZmQ2NGE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWZjZmQwMWVmZDZjZjU2MjA3NzBiM2Y0M2ZjZWJjODFhYjUxNzEyOGQyZjY2
|
14
|
+
N2Y5MzA2OTk1ZWQ3ZjBhM2IxYzJjZjA3OGY5ZDljYzg1M2M3ZjdlNGMxNTYy
|
15
|
+
ODk4NGJiMGM0MTFlY2Y5OWM2MjIyMjBjYWNjMjQ5M2UxNTkwMTc=
|
data/lib/dsl/directory_parser.rb
CHANGED
@@ -23,7 +23,7 @@ module DtkCommon
|
|
23
23
|
#if file_type is given returns DtkCommon::DSL::FileParser::OutputArray
|
24
24
|
#otherwise returns hash at top level taht is indexed by file types found
|
25
25
|
def parse_directory(file_type=nil,opts={})
|
26
|
-
pruned_file_info =
|
26
|
+
pruned_file_info =
|
27
27
|
if file_type
|
28
28
|
matches = @file_info.select{|r|r[:file_type] == file_type}
|
29
29
|
if matches.empty?
|
@@ -45,10 +45,28 @@ module DtkCommon
|
|
45
45
|
file_type.nil? ? ret : ret[file_type]
|
46
46
|
end
|
47
47
|
|
48
|
+
def self.default_rel_path?(directory_type,file_type)
|
49
|
+
if match = file_info_single_match?(directory_type,file_type)
|
50
|
+
match[:default_rel_path]
|
51
|
+
end
|
52
|
+
end
|
48
53
|
private
|
49
|
-
def
|
54
|
+
def self.file_info_single_match?(directory_type,file_type)
|
55
|
+
matches = file_info(directory_type).select{|r|r[:file_type] == file_type}
|
56
|
+
if matches.empty? then nil
|
57
|
+
elsif matches.size == 1 then matches.first
|
58
|
+
else
|
59
|
+
raise Error.new("Unexpected to get multiple matches")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
def self.file_info(directory_type)
|
50
63
|
DirectoryTypeFiles[directory_type]
|
51
64
|
end
|
65
|
+
|
66
|
+
def file_info(directory_type)
|
67
|
+
self.class.file_info(directory_type)
|
68
|
+
end
|
69
|
+
|
52
70
|
def instantiate_rel_path_patterns(rel_file_info)
|
53
71
|
ret = Array.new
|
54
72
|
all_files_from_root = nil
|
@@ -56,24 +74,44 @@ module DtkCommon
|
|
56
74
|
if rel_path = r[:rel_path]
|
57
75
|
ret << r
|
58
76
|
else
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
77
|
+
all_files_from_root ||= all_files_from_root()
|
78
|
+
ret += find_rel_path_matches(r,all_files_from_root)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
ret
|
82
|
+
end
|
83
|
+
|
84
|
+
def find_rel_path_matches(r,all_files_from_root)
|
85
|
+
ret = Array.new
|
86
|
+
unless r[:rel_path_pattern]
|
87
|
+
return ret
|
88
|
+
end
|
89
|
+
|
90
|
+
rel_path_pattern = r[:rel_path_pattern]
|
91
|
+
rel_path_patterns = (rel_path_pattern.kind_of?(Array) ? rel_path_pattern : [rel_path_pattern])
|
92
|
+
rel_path_patterns.each do |pat|
|
93
|
+
all_files_from_root.each do |f|
|
94
|
+
if f =~ pat
|
95
|
+
file_key = $1
|
96
|
+
ret << {:rel_path => f, :file_type => r[:file_type], :key => file_key}
|
66
97
|
end
|
67
98
|
end
|
99
|
+
return ret unless ret.empty?
|
68
100
|
end
|
69
101
|
ret
|
70
102
|
end
|
71
|
-
#TODO: may put version info here too
|
72
103
|
DirectoryTypeFiles = {
|
73
|
-
:service_module =>
|
104
|
+
:service_module =>
|
74
105
|
[
|
75
|
-
{
|
76
|
-
|
106
|
+
{
|
107
|
+
:file_type => :component_module_refs,
|
108
|
+
:rel_path_pattern => [/(^module_refs.yaml$)/,/(^global_module_refs.json$)/],
|
109
|
+
:default_rel_path => 'module_refs.yaml',
|
110
|
+
},
|
111
|
+
{
|
112
|
+
:file_type => :assembly,
|
113
|
+
:rel_path_pattern => /^assemblies\/([^\/]+)\/assembly\.yaml$/
|
114
|
+
}
|
77
115
|
]
|
78
116
|
}
|
79
117
|
end
|
@@ -13,7 +13,13 @@ module DtkCommon; module DSL; class FileParser
|
|
13
13
|
parse_error = true
|
14
14
|
if v.kind_of?(InputHash) and v.only_has_keys?(:version,:remote_namespace,:namespace) and not v.empty?()
|
15
15
|
parse_error = false
|
16
|
-
|
16
|
+
# v[index] if index not found returns empty InputHash, not nil
|
17
|
+
new_el.merge_non_empty!(:version_info => v[:version])
|
18
|
+
namespace = v[:namespace]
|
19
|
+
namespace = v[:remote_namespace] if namespace.empty? # TODO: for legacy
|
20
|
+
# TODO: change this to new_el.merge_non_empty!(:namespace => namespace) while coordinating with users
|
21
|
+
# of api
|
22
|
+
new_el.merge_non_empty!(:remote_namespace => namespace)
|
17
23
|
elsif v.kind_of?(String)
|
18
24
|
parse_error = false
|
19
25
|
new_el.merge_non_empty!(:version_info => v)
|
data/lib/dtk-common/version.rb
CHANGED
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module DTK
|
4
|
+
module Common
|
5
|
+
|
6
|
+
class ModuleParser
|
7
|
+
|
8
|
+
MODULE_REFS_FILE = 'module_refs.yaml'
|
9
|
+
|
10
|
+
def initialize(module_name, module_namespace, repos_path, module_type=:service_module, is_server=false, dtk_username=nil)
|
11
|
+
@module_name = module_name
|
12
|
+
@module_namespace = module_namespace
|
13
|
+
@module_type = module_type
|
14
|
+
@repos_path = repos_path
|
15
|
+
@is_server = is_server
|
16
|
+
@dtk_username = dtk_username
|
17
|
+
@dependency_map = nil
|
18
|
+
@errors = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def calculate!()
|
22
|
+
@dependency_map = recursive_calculation(@module_name, @module_namespace, @module_type)
|
23
|
+
@dependency_map
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Errors will return latest calculated changes
|
28
|
+
#
|
29
|
+
def errors()
|
30
|
+
@dependency_map ||= recursive_calculation(@module_name, @module_namespace, @module_type)
|
31
|
+
@errors
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def recursive_calculation(cm_name, cm_namespace, cm_type, chain_link = [])
|
37
|
+
# if namespace not found user parent namespace (service namespace)
|
38
|
+
cm_namespace = @module_namespace
|
39
|
+
|
40
|
+
chain_identifier = "#{cm_namespace}::#{cm_name}(#{ModuleParser.resolve_module_type(cm_type)})"
|
41
|
+
|
42
|
+
# !CHECK ERROR DETECTED CIRCUALAR DEPENDENCY
|
43
|
+
if chain_link.include?(chain_identifier)
|
44
|
+
return element(cm_name, cm_namespace, cm_type, chain_link, "Circular dependency detected for '#{chain_identifier}'!")
|
45
|
+
end
|
46
|
+
|
47
|
+
# STARTING PROCESSING (ID ADDED)
|
48
|
+
chain_link << chain_identifier
|
49
|
+
|
50
|
+
# READ COMPONENT MODULE FILE
|
51
|
+
repo_path = ModuleParser.resolve_module_path(cm_type, cm_name, cm_namespace, @repos_path, @is_server, @dtk_username)
|
52
|
+
|
53
|
+
begin
|
54
|
+
module_refs = Gitolite::Git::FileAccess.new(repo_path).file_content(MODULE_REFS_FILE)
|
55
|
+
rescue Exception => e
|
56
|
+
return element(cm_name, cm_namespace, cm_type, chain_link, "Repo module '#{chain_identifier}' cannot be found")
|
57
|
+
end
|
58
|
+
|
59
|
+
# !CHECK ERROR MODEL DESCRIPTION IS MISSING
|
60
|
+
unless module_refs
|
61
|
+
return element(cm_name, cm_namespace, cm_type)
|
62
|
+
end
|
63
|
+
|
64
|
+
module_refs = YAML.load(module_refs)
|
65
|
+
|
66
|
+
module_refs_cm = module_refs['component_modules']||[]
|
67
|
+
module_refs_tm = module_refs['test_modules']||[]
|
68
|
+
|
69
|
+
cm_results = []
|
70
|
+
tm_results = []
|
71
|
+
|
72
|
+
module_refs_cm.each do |cm_name, cm_values|
|
73
|
+
cm_results << recursive_calculation(cm_name, cm_values['namespace'], :component_module, chain_link.dup)
|
74
|
+
end
|
75
|
+
|
76
|
+
module_refs_tm.each do |cm_name, cm_values|
|
77
|
+
tm_results << recursive_calculation(cm_name, cm_values['namespace'], :test_module, chain_link.dup)
|
78
|
+
end
|
79
|
+
|
80
|
+
element = element(cm_name, cm_namespace, cm_type)
|
81
|
+
element[:component_modules] = cm_results
|
82
|
+
element[:test_modules] = tm_results
|
83
|
+
|
84
|
+
element
|
85
|
+
end
|
86
|
+
|
87
|
+
def element(module_name, module_namespace, module_type, chain_info = [], error = nil)
|
88
|
+
if error
|
89
|
+
error_string = error
|
90
|
+
error_string += ", dependency location #{chain_info.join(' >> ')}" unless chain_info.empty?
|
91
|
+
@errors << error_string
|
92
|
+
end
|
93
|
+
|
94
|
+
{
|
95
|
+
:module_name => module_name,
|
96
|
+
:module_namespace => module_namespace,
|
97
|
+
:module_type => module_type,
|
98
|
+
:location => chain_info.empty? ? nil : chain_info.join(' >> '),
|
99
|
+
:error => error
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.resolve_module_path(module_type, module_name, module_namespace, repos_path, is_server=false, dtk_username=nil)
|
104
|
+
if is_server
|
105
|
+
repo_name = "#{dtk_username}-#{module_namespace}-#{module_name}.git"
|
106
|
+
repo_name = "#{resolve_module_type(module_type)}-#{repo_name}" unless module_type == :component_module
|
107
|
+
else
|
108
|
+
repo_name = "#{module_namespace}--#{resolve_module_type(module_type)}--#{module_name}.git"
|
109
|
+
end
|
110
|
+
|
111
|
+
File.join(repos_path, repo_name)
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.resolve_module_type(module_type)
|
115
|
+
case module_type
|
116
|
+
when :service_module
|
117
|
+
'sm'
|
118
|
+
when :component_module
|
119
|
+
'cm'
|
120
|
+
when :test_module
|
121
|
+
'tm'
|
122
|
+
else
|
123
|
+
raise "Not supported module type when resolving dependnecies #{module_type}"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dtk-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rich PELAVIN
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rugged
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- lib/grit_adapter/file_access/diff.rb
|
98
98
|
- lib/grit_adapter/file_access/status.rb
|
99
99
|
- lib/grit_adapter/object_access.rb
|
100
|
+
- lib/module_parser/module_parser.rb
|
100
101
|
- lib/module_version.rb
|
101
102
|
- lib/require_first.rb
|
102
103
|
- rich_tests/README.md
|
@@ -177,7 +178,6 @@ files:
|
|
177
178
|
- rich_tests/fixtures/rugged_test1/repo1.git/refs/heads/branch1
|
178
179
|
- rich_tests/fixtures/rugged_test1/repo1.git/refs/heads/master
|
179
180
|
- rich_tests/rugged_test1.rb
|
180
|
-
- test.rb
|
181
181
|
homepage: https://github.com/rich-reactor8/dtk-common
|
182
182
|
licenses:
|
183
183
|
- GPL-3.0
|
data/test.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require File.expand_path('lib/gitolite/init.rb', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
|
4
|
-
manager = Gitolite::Manager.new('/home/git/gitolite-admin')
|
5
|
-
|
6
|
-
# DEBUG SNIPPET >>>> REMOVE <<<<
|
7
|
-
require 'pp'
|
8
|
-
pp "Start >>>"
|
9
|
-
|
10
|
-
pp manager.open_repo('r8--cm--bootstrap')
|
11
|
-
|
12
|
-
|
13
|
-
pp "DOne!"
|