class DTK::Client::LoadSource
Attributes
info_processor[R]
target_repo_dir[R]
Public Class Methods
delete_diffs(target_repo_dir, version = nil)
click to toggle source
# File lib/client/load_source.rb, line 74 def self.delete_diffs(target_repo_dir, version = nil) current_branch = git_repo_operation.current_branch(:path => target_repo_dir).data(:branch) repo = git_repo_operation.create_empty_git_repo?(:repo_dir => target_repo_dir, :branch => current_branch).data(:repo) if delete_files = repo.diff_name_status(current_branch, "remotes/dtkn-component-info/#{dtkn_version_ref(version)}", { :diff_filter => 'D' }) unless delete_files.empty? to_delete = delete_files.keys.select { |key| !key.include?('dtk.model.yaml') && !key.include?('module_refs.yaml') } to_delete.each { |file| Operation::ClientModuleDir.rm_f("#{target_repo_dir}/#{file}") } end end end
fetch_and_cache_info(transform_helper, remote_repo_url, parent, force, use_theirs = false)
click to toggle source
# File lib/client/load_source.rb, line 86 def self.fetch_and_cache_info(transform_helper, remote_repo_url, parent, force, use_theirs = false) new(transform_helper, info_type, remote_repo_url, parent, force, use_theirs).fetch_and_cache_info end
fetch_from_remote(remote_module_info, parent, opts = {})
click to toggle source
# File lib/client/load_source.rb, line 90 def self.fetch_from_remote(remote_module_info, parent, opts = {}) target_repo_dir = parent.target_repo_dir # if remotes added do not add them again branches = Operation::ClientModuleDir::GitRepo.all_branches(:path => target_repo_dir).data(:branches) remote_branches = branches.select { |branch| branch.full.include?('dtkn') || branch.full.include?('dtkn-component-info') } return unless remote_branches.empty? transform_helper = ServiceAndComponentInfo::TransformFrom.new(target_repo_dir, parent.module_ref, parent.version) if service_info = remote_module_info.data(:service_info) srv_info = ServiceInfo.new(transform_helper, ServiceInfo.info_type, service_info['remote_repo_url'], parent, opts[:force]) srv_info.fetch_info end if component_info = remote_module_info.data(:component_info) cmp_info = ComponentInfo.new(transform_helper, ComponentInfo.info_type, component_info['remote_repo_url'], parent, opts[:force]) cmp_info.fetch_info end nil end
fetch_transform_and_merge(remote_module_info, parent, opts = {})
click to toggle source
opts can have keys
:stage_and_commit_steps - used to stage and commit every step for pull-dtkn
# File lib/client/load_source.rb, line 36 def self.fetch_transform_and_merge(remote_module_info, parent, opts = {}) target_repo_dir = parent.target_repo_dir transform_helper = ServiceAndComponentInfo::TransformFrom.new(target_repo_dir, parent.module_ref, parent.version) info_types_processed = [] force = opts[:force] use_theirs = opts[:use_theirs] if service_info = remote_module_info.data(:service_info) ServiceInfo.fetch_and_cache_info(transform_helper, service_info['remote_repo_url'], parent, force, use_theirs) info_types_processed << ServiceInfo.info_type stage_and_commit(target_repo_dir, commit_msg(info_types_processed)) if opts[:stage_and_commit_steps] end if component_info = remote_module_info.data(:component_info) begin updated = ComponentInfo.fetch_and_cache_info(transform_helper, component_info['remote_repo_url'], parent, force, use_theirs) info_types_processed << ComponentInfo.info_type if parent.is_a?(Operation::Module::PullDtkn) && updated stage_and_commit(target_repo_dir, commit_msg([ComponentInfo.info_type])) delete_diffs(target_repo_dir, remote_module_info.data(:version)) end rescue Error::MissingDslFile => e # this is special case where in some stage git can recognize that dtk.model.yaml is renamed to dtk.module.yaml # which then will not be introduced on merge and we get error described in the ticket https://reactor8.atlassian.net/browse/DTK-2925 raise e unless use_theirs stage_and_commit(target_repo_dir, commit_msg(info_types_processed)) end end unless info_types_processed.empty? transform_helper.output_path_text_pairs.each_pair do |path, text_content| Operation::ClientModuleDir.create_file_with_content("#{target_repo_dir}/#{path}", text_content) end stage_and_commit(target_repo_dir, commit_msg(info_types_processed)) end end
new(transform_helper, info_type, remote_repo_url, parent, force, use_theirs = nil)
click to toggle source
# File lib/client/load_source.rb, line 23 def initialize(transform_helper, info_type, remote_repo_url, parent, force, use_theirs = nil) @info_processor = transform_helper.info_processor(info_type) @info_type = info_type @remote_repo_url = remote_repo_url @target_repo_dir = parent.target_repo_dir @version = parent.version @force = force @use_theirs = use_theirs end
Private Class Methods
commit_msg(info_types_processed)
click to toggle source
# File lib/client/load_source.rb, line 191 def self.commit_msg(info_types_processed) msg = "Added " count = 0 types = info_types_processed #info if types.include?(ServiceInfo.info_type) msg << 'service ' count +=1 end if types.include?(ComponentInfo.info_type) msg << 'and ' if count > 0 msg << 'component' count +=1 end msg << 'info' msg end
dtkn_version_ref(version = nil)
click to toggle source
# File lib/client/load_source.rb, line 118 def self.dtkn_version_ref(version = nil) if version.nil? 'master' elsif version == 'master' 'master' else "v#{version}" end end
git_repo_operation()
click to toggle source
# File lib/client/load_source.rb, line 208 def self.git_repo_operation Operation::ClientModuleDir::GitRepo end
stage_and_commit(target_repo_dir, commit_msg = nil)
click to toggle source
# File lib/client/load_source.rb, line 182 def self.stage_and_commit(target_repo_dir, commit_msg = nil) git_repo_args = { :repo_dir => target_repo_dir, :commit_msg => commit_msg, :local_branch_type => :dtkn } git_repo_operation.stage_and_commit(git_repo_args) end
write_output_path_text_pairs(transform_helper, target_repo_dir, info_types_processed)
click to toggle source
# File lib/client/load_source.rb, line 128 def self.write_output_path_text_pairs(transform_helper, target_repo_dir, info_types_processed) end
Private Instance Methods
common_git_repo_args()
click to toggle source
# File lib/client/load_source.rb, line 131 def common_git_repo_args { :info_type => @info_type, :repo_dir => @target_repo_dir } end
fetch_remote()
click to toggle source
# File lib/client/load_source.rb, line 142 def fetch_remote git_repo_args = common_git_repo_args.merge(:add_remote => @remote_repo_url) git_repo_operation.fetch_dtkn_remote(git_repo_args) end
git_repo_operation()
click to toggle source
# File lib/client/load_source.rb, line 212 def git_repo_operation self.class.git_repo_operation end
git_repo_remote_branch()
click to toggle source
# File lib/client/load_source.rb, line 138 def git_repo_remote_branch (@version && !@version.eql?('master')) ? "v#{@version}" : 'master' end
local_ahead?()
click to toggle source
# File lib/client/load_source.rb, line 177 def local_ahead? git_repo_args = common_git_repo_args.merge(:remote_branch => git_repo_remote_branch, :no_commit => true) git_repo_operation.local_ahead?(git_repo_args) end
merge_from_remote()
click to toggle source
# File lib/client/load_source.rb, line 147 def merge_from_remote merged = true git_repo_args = common_git_repo_args.merge(:remote_branch => git_repo_remote_branch, :no_commit => true, :use_theirs => @use_theirs) if local_ahead?.data('local_ahead') if @force git_repo_operation.reset_hard(git_repo_args) else merged = false end else reset_if_merge_conflict(git_repo_operation, git_repo_args) end merged end
reset_if_merge_conflict(git_repo_operation, git_repo_args)
click to toggle source
# File lib/client/load_source.rb, line 164 def reset_if_merge_conflict(git_repo_operation, git_repo_args) begin git_repo_operation.merge_from_dtkn_remote(git_repo_args) rescue => e unless @force current_branch = Operation::ClientModuleDir::GitRepo.current_branch(:path => @target_repo_dir).data(:branch) git_repo_operation.reset_hard(git_repo_args.merge(:branch => current_branch)) raise Error::Usage, "Unable to do fast-forward merge! You can use '--force' option but all local changes will be lost!" end git_repo_operation.reset_hard(git_repo_args) end end