lib/origen/remote_manager.rb in origen-0.7.45 vs lib/origen/remote_manager.rb in origen-0.7.46

- old
+ new

@@ -16,19 +16,26 @@ # It does not add the libs to the load path, and require the environments # since remotes are not assumed to be Ruby. def require! unless required? while updates_required? + Origen.log.info '*******************************************************************************' Origen.log.info 'The following remotes need to be updated, this will now happen automatically:' dirty_remotes.each do |name, remote| if remote[:path] - Origen.log.info " #{name} - #{remote[:path]}" + Origen.log.info " #{name} - #{remote[:path]}".green else - Origen.log.info " #{name} - #{remote[:version]}" + Origen.log.info " #{name} - #{remote[:version]}".green end end + Origen.log.info '' + update! + + Origen.log.info '' + Origen.log.info 'Finished updating remotes.' + Origen.log.info '*******************************************************************************' end @required = true end end @@ -287,11 +294,11 @@ else remotes[name] = new end end - # Makes all dirty imports clean + # Makes all dirty remotes clean def update! ensure_remotes_directory dirty_remotes.each do |_name, remote| dir = workspace_of(remote) if remote[:path] || path_enabled?(remote) @@ -303,32 +310,51 @@ end if remote[:path] create_symlink(remote[:path], dir) else - unless File.exist?("#{dir}/.initial_populate_successful") - ws.build(dir, rc_url: remote[:vault], allow_rebuild: true) - ws.switch_version(dir, remote[:version]) + rc_url = remote[:rc_url] || remote[:vault] + tag = Origen::VersionString.new(remote[:version]) + version_file = dir.to_s + '/.current_version' + if File.exist?("#{dir}/.initial_populate_successful") + FileUtils.rm_f(version_file) if File.exist?(version_file) + rc = RevisionControl.new remote: rc_url, local: dir + rc.checkout version: prefix_tag(tag), force: true + `echo "#{tag}" >> "#{version_file}"` + else + rc = RevisionControl.new remote: rc_url, local: dir + rc.checkout version: prefix_tag(tag), force: true `touch "#{dir}/.initial_populate_successful"` + `echo "#{tag}" >> "#{version_file}"` end - ws.switch_version(dir, remote[:version]) end end end def workspace_of(remote) Pathname.new("#{ws.remotes_directory}/#{dir_of(remote)}") end def ensure_remotes_directory unless remotes.empty? - unless File.exist?(ws.remotes_directory) - FileUtils.mkdir_p(ws.remotes_directory) + unless File.exist?(Origen.app.remotes_dir) + FileUtils.mkdir_p Origen.app.remotes_dir end end end def ws Origen.app.workspace_manager + end + + # If the supplied tag looks like a semantic version number, then make sure it has the + # 'v' prefix + def prefix_tag(tag) + tag = Origen::VersionString.new(tag) + if tag.semantic? + tag.prefixed + else + tag + end end end end