lib/rim/sync_module_helper.rb in esr-rim-1.2.2 vs lib/rim/sync_module_helper.rb in esr-rim-1.3.0

- old
+ new

@@ -1,10 +1,11 @@ require 'rim/module_helper' require 'rim/rim_info' require 'rim/file_helper' require 'rim/dirty_check' require 'tempfile' +require 'pathname' module RIM class SyncModuleHelper < ModuleHelper def initialize(dest_root, workspace_root, module_info, logger) super(workspace_root, module_info, logger) @@ -31,16 +32,22 @@ raise RimException.new("Unknown target revision '#{@module_info.target_revision}' for module '#{@module_info.local_path}'.") end local_path = File.join(@dest_root, @module_info.local_path) prepare_empty_folder(local_path, @module_info.ignores) temp_commit(d, "clear directory") if d.uncommited_changes? - s.execute("git archive --format tar #{@module_info.target_revision} | tar -x -C #{local_path}") + strip = "" + if @module_info.subdir + depth = Pathname(@module_info.subdir).each_filename.count() + strip = "--strip-components=#{depth}" + end + s.execute("git archive --format tar #{@module_info.target_revision} #{@module_info.subdir} | tar #{strip} -x -C #{local_path}") sha1 = s.execute("git rev-parse #{@module_info.target_revision}").strip @rim_info = RimInfo.new @rim_info.remote_url = @module_info.remote_url @rim_info.target_revision = @module_info.target_revision @rim_info.revision_sha1 = sha1 @rim_info.ignores = @module_info.ignores.join(",") + @rim_info.subdir = @module_info.subdir @rim_info.to_dir(local_path) DirtyCheck.mark_clean(local_path) end temp_commit(d, "commit changes") if needs_commit?(d) d.execute("git reset --soft #{start_sha1}")