lib/rim/command_helper.rb in esr-rim-1.4.0 vs lib/rim/command_helper.rb in esr-rim-1.4.2
- old
+ new
@@ -1,143 +1,143 @@
-require 'rim/file_helper'
-require 'rim/processor'
-require 'rim/module_info'
-require 'rim/rim_info'
-require 'rim/manifest/json_reader'
-require 'rim/status_builder'
-require 'pathname'
-
-module RIM
-
-class CommandHelper < Processor
-
- include Manifest
-
- def initialize(workspace_root, logger, module_infos = nil)
- super(workspace_root, logger)
- @paths = []
- @logger = logger
- if module_infos
- module_infos.each do |m|
- add_module_info(m)
- end
- end
- end
-
- # check whether workspace is not touched
- def check_ready
- raise RimException.new("The workspace git contains uncommitted changes.") if !local_changes?(@ws_root)
- end
-
- def check_arguments
- raise RimException.new("Unexpected command line arguments.") if !ARGV.empty?
- end
-
- def create_module_info(remote_url, local_path, target_revision, ignores, subdir)
- ModuleInfo.new(
- remote_url,
- get_relative_path(local_path),
- target_revision,
- ignores,
- remote_url ? get_remote_branch_format(remote_url) : nil,
- subdir)
- end
-
- def modules_from_manifest(path)
- manifest = read_manifest(path)
- manifest.modules.each do |mod|
- add_unique_module_info(create_module_info(mod.remote_path, mod.local_path, mod.target_revision, mod.ignores, mod.subdir))
- end
- true
- end
-
- def modules_from_paths(paths, opts = {})
- if paths.empty?
- module_from_path(nil, opts)
- elsif paths.length == 1 || !opts.has_key?(:remote_url)
- while !paths.empty?
- module_from_path(paths.shift, opts)
- end
- else
- raise RimException.new("Multiple modules cannot be used with URL option.")
- end
- end
-
- def module_from_path(path, opts = {})
- module_path = find_file_dir_in_workspace(path || ".", RimInfo::InfoFileName)
- if module_path
- rim_info = RimInfo.from_dir(module_path)
- module_info = create_module_info(
- opts.has_key?(:remote_url) ? opts[:remote_url] : rim_info.remote_url,
- module_path,
- opts.has_key?(:target_revision) ? opts[:target_revision] : rim_info.target_revision,
- opts.has_key?(:ignores) ? opts[:ignores] : rim_info.ignores,
- opts.has_key?(:subdir) ? opts[:subdir] : rim_info.subdir)
- if module_info.valid?
- add_unique_module_info(module_info)
- module_path
- else
- raise RimException.new("Invalid .riminfo file found in directory '#{module_path}'.")
- end
- else
- raise RimException.new(path ? "No module info found in '#{path}'." : "No module info found.")
- end
- end
-
- def module_paths(paths, exclude_paths = nil)
- module_paths = []
- (paths.empty? ? ['.'] : paths).each do |p|
- module_paths.concat(all_module_paths_from_path(p))
- end
- paths.clear
- if exclude_paths
- exclude_paths.each do |e|
- all_module_paths_from_path(e).each do |p|
- module_paths.delete(p)
- end
- end
- end
- module_paths.sort
- end
-
- def all_module_paths_from_path(path)
- Dir.glob(File.join(path, "**/.riminfo")).map { |f| Pathname.new(File.expand_path(File.dirname(f))).relative_path_from(Pathname.pwd).to_s }
- end
-
- def add_unique_module_info(module_info)
- if !@paths.include?(module_info.local_path)
- @paths.push(module_info.local_path)
- add_module_info(module_info)
- else
- raise RimException.new("Module '#{module_info.local_path}' specified more than once.")
- end
- end
-
- def get_remote_branch_format(remote_url)
- get_absolute_remote_url(remote_url).start_with?(GerritServer) ? "refs/for/%s" : nil
- #"refs/for/%s"
- end
-
- def find_file_dir_in_workspace(start_dir, file)
- path = File.expand_path(start_dir)
- while path != @ws_root
- if File.exist?(File.join(path, file))
- return path
- else
- parent = File.dirname(path)
- if parent != path
- path = parent
- else
- break
- end
- end
- end
- nil
- end
-
-protected
- def add_module_info(module_info)
- end
-
-end
-
-end
+require 'rim/file_helper'
+require 'rim/processor'
+require 'rim/module_info'
+require 'rim/rim_info'
+require 'rim/manifest/json_reader'
+require 'rim/status_builder'
+require 'pathname'
+
+module RIM
+
+class CommandHelper < Processor
+
+ include Manifest
+
+ def initialize(workspace_root, logger, module_infos = nil)
+ super(workspace_root, logger)
+ @paths = []
+ @logger = logger
+ if module_infos
+ module_infos.each do |m|
+ add_module_info(m)
+ end
+ end
+ end
+
+ # check whether workspace is not touched
+ def check_ready
+ raise RimException.new("The workspace git contains uncommitted changes.") if !local_changes?(@ws_root)
+ end
+
+ def check_arguments
+ raise RimException.new("Unexpected command line arguments.") if !ARGV.empty?
+ end
+
+ def create_module_info(remote_url, local_path, target_revision, ignores, subdir)
+ ModuleInfo.new(
+ remote_url,
+ get_relative_path(local_path),
+ target_revision,
+ ignores,
+ remote_url ? get_remote_branch_format(remote_url) : nil,
+ subdir)
+ end
+
+ def modules_from_manifest(path)
+ manifest = read_manifest(path)
+ manifest.modules.each do |mod|
+ add_unique_module_info(create_module_info(mod.remote_path, mod.local_path, mod.target_revision, mod.ignores, mod.subdir))
+ end
+ true
+ end
+
+ def modules_from_paths(paths, opts = {})
+ if paths.empty?
+ module_from_path(nil, opts)
+ elsif paths.length == 1 || !opts.has_key?(:remote_url)
+ while !paths.empty?
+ module_from_path(paths.shift, opts)
+ end
+ else
+ raise RimException.new("Multiple modules cannot be used with URL option.")
+ end
+ end
+
+ def module_from_path(path, opts = {})
+ module_path = find_file_dir_in_workspace(path || ".", RimInfo::InfoFileName)
+ if module_path
+ rim_info = RimInfo.from_dir(module_path)
+ module_info = create_module_info(
+ opts.has_key?(:remote_url) ? opts[:remote_url] : rim_info.remote_url,
+ module_path,
+ opts.has_key?(:target_revision) ? opts[:target_revision] : rim_info.target_revision,
+ opts.has_key?(:ignores) ? opts[:ignores] : rim_info.ignores,
+ opts.has_key?(:subdir) ? opts[:subdir] : rim_info.subdir)
+ if module_info.valid?
+ add_unique_module_info(module_info)
+ module_path
+ else
+ raise RimException.new("Invalid .riminfo file found in directory '#{module_path}'.")
+ end
+ else
+ raise RimException.new(path ? "No module info found in '#{path}'." : "No module info found.")
+ end
+ end
+
+ def module_paths(paths, exclude_paths = nil)
+ module_paths = []
+ (paths.empty? ? ['.'] : paths).each do |p|
+ module_paths.concat(all_module_paths_from_path(p))
+ end
+ paths.clear
+ if exclude_paths
+ exclude_paths.each do |e|
+ all_module_paths_from_path(e).each do |p|
+ module_paths.delete(p)
+ end
+ end
+ end
+ module_paths.sort
+ end
+
+ def all_module_paths_from_path(path)
+ Dir.glob(File.join(path, "**/.riminfo")).map { |f| Pathname.new(File.expand_path(File.dirname(f))).relative_path_from(Pathname.pwd).to_s }
+ end
+
+ def add_unique_module_info(module_info)
+ if !@paths.include?(module_info.local_path)
+ @paths.push(module_info.local_path)
+ add_module_info(module_info)
+ else
+ raise RimException.new("Module '#{module_info.local_path}' specified more than once.")
+ end
+ end
+
+ def get_remote_branch_format(remote_url)
+ get_absolute_remote_url(remote_url).start_with?(GerritServer) ? "refs/for/%s" : nil
+ #"refs/for/%s"
+ end
+
+ def find_file_dir_in_workspace(start_dir, file)
+ path = File.expand_path(start_dir)
+ while path != @ws_root
+ if File.exist?(File.join(path, file))
+ return path
+ else
+ parent = File.dirname(path)
+ if parent != path
+ path = parent
+ else
+ break
+ end
+ end
+ end
+ nil
+ end
+
+protected
+ def add_module_info(module_info)
+ end
+
+end
+
+end