Class: BB::SourceManager

Inherits:
Object
  • Object
show all
Defined in:
lib/cocoapods-bb-PodAssistant/config/source_manager.rb

Instance Method Summary collapse

Constructor Details

#initialize(cache = nil, businessSpecName = nil) ⇒ SourceManager

Returns a new instance of SourceManager.



7
8
9
10
11
12
13
14
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 7

def initialize(cache = nil, businessSpecName = nil)
    if cache.nil? 
        @cache = BB::Cache.new()
    else
        @cache = cache
    end
    @businessSpecName = businessSpecName
end

Instance Method Details

#business_stable_yamlObject

业务源路径(远端)



27
28
29
30
31
32
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 27

def business_stable_yaml
    if @businessSpecName
        return File.join(cachePath, "#{@businessSpecName}.yml") #名称由各自业务线约定
    end
    return nil
end

#cachePathObject

仓库缓存目录



17
18
19
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 17

def cachePath
    return @cache.cachePath
end

#compare_specs(local_specs, common_specs) ⇒ Object

compare specs 参数1:本地,参数2:远端



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 142

def compare_specs(local_specs, common_specs)
    added_projects = []
    updated_projects = []
    rollbacked_projects = []
    deleted_projects = []
    new_specs = local_specs

    listdata = common_specs[YAML_CONFIG_LIST_KEY]
    removedata = common_specs[YAML_CONFIG_REMOVE_KEY]
    dependenciesdata = common_specs[YAML_CONFIG_DEPENDENCIES_KEY]

    # puts "local_specs:#{local_specs}".send(:green)
    # puts "common_specs:#{common_specs}".send(:green)
    # step.1 匹配组件版本信息
    listdata.each do |name, version|
        name = name.to_s
        local_version = local_specs[name]
        if local_version.nil?
            # 本地不存在这个数据
        elsif local_version != version
            # 版本不一致
            if versionGreat(version, local_version)
                updated_projects << "#{name}】 (#{local_version}) -> (#{version.to_s.send(:yellow)})"
            else
                rollbacked_projects << "#{name}】 (#{version.to_s.send(:red)}) <- (#{local_version})"
            end
            new_specs[name] = version
        end
    end
    # step.2 匹配组件新增
    dependenciesdata.each do |name, array|
        name = name.to_s
        version = listdata[name]
        unless version
            puts "公共库缺少[#{name}]版本依赖 cls:#{listdata.class} listdata:#{listdata}".send(:red)
            exit
        end
        local_exist_ver = new_specs[name]
        if local_exist_ver.nil?
            new_specs[name] = version
            added_projects << "#{name}】 (#{version.to_s.send(:green)})"
        end
        if array.is_a?(Array)
            array.each do |name|
                name = name.to_s
                local_exist_ver = new_specs[name]
                if local_exist_ver.nil?
                    new_specs[name] = version
                    added_projects << "#{name}】 (#{version.to_s.send(:green)})"
                end
            end
        end
    end
    # step.3 匹配组件移除
    removedata.each do |name|
        name = name.to_s
        # local_exist_ver = new_specs[name]
        version = listdata[name]
        if version
            deleted_projects << "#{name}】 (#{"delete".send(:red)}) <- (#{version})"
        end
        new_specs.delete(name)
    end
    showMergeLog(added_projects, updated_projects, rollbacked_projects, deleted_projects)
    # puts "new_specs:#{new_specs}".send(:red)
    return new_specs
end

#fetch_local_stable_datasObject

产品线本地lock数据



54
55
56
57
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 54

def fetch_local_stable_datas
    @localSpec = BB::StableSpecs.new()
    return @localSpec.readData(local_stable_yaml)
end

#fetch_origin_stable_datasObject

远端公共lock数据



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 60

def fetch_origin_stable_datas
    # 策略:公共数据包含通用数据 + 业务线数据
    pubSpec = BB::StableSpecs.new()
    common_data = pubSpec.readData(public_stable_yaml)
    # 业务线数据
    business_config_file = business_stable_yaml
    if business_config_file
        if File.exist?(business_config_file)
            busimessSpec = BB::StableSpecs.new()
            busimess_data = busimessSpec.readData(business_config_file)
        else
            puts "业务线公共配置文件#{business_config_file}不存在,请确认!!!". send(:yellow)
            exit
        end
    end
    if busimess_data
        # 数据合并操作(策略:业务线公共盖通用数据,理论不存在该情况)
        newData = common_data
        listdata = newData[YAML_CONFIG_LIST_KEY]
        removedata = newData[YAML_CONFIG_REMOVE_KEY]
        dependenciesdata = newData[YAML_CONFIG_DEPENDENCIES_KEY]
        busimess_data.each do | key, val|
            if key == YAML_CONFIG_LIST_KEY
                if val.is_a?(Hash)
                    val.each do |list_name,list_ver|
                        listdata[list_name] = list_ver
                    end
                end
            elsif key == YAML_CONFIG_REMOVE_KEY
                if val.is_a?(Array)
                    val.each do |remove_name|
                        removedata.push(remove_name)
                    end
                end
            elsif key == YAML_CONFIG_DEPENDENCIES_KEY
                if val.is_a?(Hash)
                    val.each do |dependencies_name,dependencies_val|
                        dependenciesdata[dependencies_name] = dependencies_val
                    end
                end
            end
        end
        return newData
    end
    return common_data
end

#local_stable_yamlObject

本地源路径



35
36
37
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 35

def local_stable_yaml
    return File.join(Pathname.pwd, "stable_specs_lock.yml") #名称固定
end

#merge_stable_dataObject

合并stable数据



113
114
115
116
117
118
119
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 113

def merge_stable_data()
    #4、show origin_stable_lock diff with local_stable_lock
    new_stable_spec = compare_specs(fetch_local_stable_datas, fetch_origin_stable_datas)

    #5、rewirte local_stable_lock with origin_stable_lock
    update_localstable_datas(new_stable_spec)    
end

#public_stable_yamlObject

公共源路径(远端)



22
23
24
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 22

def public_stable_yaml
    return File.join(cachePath, "stable_specs.yml") #名称固定
end

#showMergeLog(added, updated, rollbacked, deleted) ⇒ Object



210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 210

def showMergeLog(added, updated, rollbacked, deleted)
    #31m: 红色 32m:绿色 33m:黄色 34m:蓝色
    #puts "\e[34m#{string}\e[0m"
    if added.any?
        puts "\n新增了以下项目:".send(:green)
        puts added.join("\n")
    end

    if updated.any?
        puts "\n更新了以下项目:". send(:yellow)
        puts updated.join("\n")
    end

    if rollbacked.any?
        puts "\n回滚了以下项目:".send(:red)
        puts rollbacked.join("\n")
    end

    if deleted.any?
        puts "\n移除了以下项目:".send(:red)
        puts deleted.join("\n")
    end

    unless added.any? || updated.any? || added.any? || deleted.any?
        puts "\n已经是最新版本".send(:green)
    end
end

#update_business_stable_lock(businessSpecName, pod_targets) ⇒ Object

podfile 更新配置文件使用(业务线)



44
45
46
47
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 44

def update_business_stable_lock(businessSpecName, pod_targets)
    @businessSpecName = businessSpecName
    update_stable_lock(business_stable_yaml, pod_targets)
end

#update_common_stable_lock(pod_targets) ⇒ Object

podfile 更新配置文件使用(通用)



40
41
42
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 40

def update_common_stable_lock(pod_targets)
    update_stable_lock(public_stable_yaml, pod_targets)
end

#update_localstable_datas(stable_lock) ⇒ Object

更新本地lock数据



108
109
110
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 108

def update_localstable_datas(stable_lock)
    @localSpec.writeData(local_stable_yaml, stable_lock)  
end

#versionGreat(tag1, tag2) ⇒ Object

compare tags (>)



133
134
135
136
137
138
139
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 133

def versionGreat(tag1, tag2)
    result = versionGreatOrEqual(tag1,tag2)
    if result == true && tag1 == tag2
        return false
    end
    return result
end

#versionGreatOrEqual(tag1, tag2) ⇒ Object

Help ######################################## compare tags (>=)



123
124
125
126
127
128
129
130
# File 'lib/cocoapods-bb-PodAssistant/config/source_manager.rb', line 123

def versionGreatOrEqual(tag1, tag2)
    if tag1.to_i >= tag2.to_i
        return true
    else
        return false
    end
    return true
end