lib/roku_builder/loader.rb in roku_builder-3.3.4 vs lib/roku_builder/loader.rb in roku_builder-3.4.0
- old
+ new
@@ -1,30 +1,35 @@
module RokuBuilder
# Load/Unload/Build roku applications
class Loader < Util
+
+ # Set the root directory
+ def init(root_dir: nil)
+ @root_dir = root_dir
+ end
+
# Sideload an app onto a roku device
# @param root_dir [String] Path to the root directory of the roku app
- # @param branch [String] Branch of the git repository to sideload. Pass nil to use working directory. Default: nil
+ # @param stage [Hash] stage to use for sideloading.
# @param update_manifest [Boolean] Flag to update the manifest file before sideloading. Default: false
# @param folders [Array<String>] Array of folders to be sideloaded. Pass nil to send all folders. Default: nil
# @param files [Array<String>] Array of files to be sideloaded. Pass nil to send all files. Default: nil
# @return [String] Build version on success, nil otherwise
- def sideload(root_dir:, branch: nil, update_manifest: false, folders: nil, files: nil)
- @root_dir = root_dir
+ def sideload(stage:, update_manifest: false, folders: nil, files: nil)
result = nil
- begin
- git_switch_to(branch: branch)
+ stager = Stager.new(**stage)
+ if stager.stage
# Update manifest
build_version = ""
if update_manifest
- build_version = ManifestManager.update_build(root_dir: root_dir)
+ build_version = ManifestManager.update_build(root_dir: @root_dir)
else
- build_version = ManifestManager.build_version(root_dir: root_dir)
+ build_version = ManifestManager.build_version(root_dir: @root_dir)
end
- outfile = build(root_dir: root_dir, branch: branch, build_version: build_version, folders: folders, files: files)
+ outfile = build(stage: stage, build_version: build_version, folders: folders, files: files)
path = "/plugin_install"
# Connect to roku and upload file
conn = multipart_connection
payload = {
mysubmit: "Replace",
@@ -32,39 +37,33 @@
}
response = conn.post path, payload
# Cleanup
File.delete(outfile)
result = build_version if response.status==200 and response.body=~/Install Success/
- git_switch_from(branch: branch)
- rescue Git::GitExecuteError
- git_rescue
- ensure
- @current_dir ||= Dir.pwd
- Dir.chdir(@current_dir) unless @current_dir == Dir.pwd
end
+ stager.unstage
result
end
# Build an app to sideload later
# @param root_dir [String] Path to the root directory of the roku app
- # @param branch [String] Branch of the git repository to sideload. Pass nil to use working directory. Default: nil
+ # @param stage [Hash] stage to use for sideloading.
# @param build_version [String] Version to assigne to the build. If nil will pull the build version form the manifest. Default: nil
# @param outfile [String] Path for the output file. If nil will create a file in /tmp. Default: nil
# @param folders [Array<String>] Array of folders to be sideloaded. Pass nil to send all folders. Default: nil
# @param files [Array<String>] Array of files to be sideloaded. Pass nil to send all files. Default: nil
# @return [String] Path of the build
- def build(root_dir:, branch: nil, build_version: nil, outfile: nil, folders: nil, files: nil)
- @root_dir = root_dir
- begin
- git_switch_to(branch: branch)
- build_version = ManifestManager.build_version(root_dir: root_dir, logger: @logger) unless build_version
+ def build(stage:, build_version: nil, outfile: nil, folders: nil, files: nil)
+ stager = Stager.new(**stage)
+ if stager.stage
+ build_version = ManifestManager.build_version(root_dir: @root_dir, logger: @logger) unless build_version
unless folders
- folders = Dir.entries(root_dir).select {|entry| File.directory? File.join(root_dir, entry) and !(entry =='.' || entry == '..') }
+ folders = Dir.entries(@root_dir).select {|entry| File.directory? File.join(@root_dir, entry) and !(entry =='.' || entry == '..') }
end
unless files
- files = Dir.entries(root_dir).select {|entry| File.file? File.join(root_dir, entry)}
+ files = Dir.entries(@root_dir).select {|entry| File.file? File.join(@root_dir, entry)}
end
outfile = "/tmp/build_#{build_version}.zip" unless outfile
File.delete(outfile) if File.exist?(outfile)
io = Zip::File.open(outfile, Zip::File::CREATE)
# Add folders to zip
@@ -76,17 +75,12 @@
writeEntries(@root_dir, entries, folder, io)
end
# Add file to zip
writeEntries(@root_dir, files, "", io)
io.close()
- git_switch_from(branch: branch)
- rescue Git::GitExecuteError
- git_rescue
- ensure
- @current_dir ||= Dir.pwd
- Dir.chdir(@current_dir) unless @current_dir == Dir.pwd
end
+ stager.unstage
outfile
end
# Remove the currently sideloaded app
def unload()
@@ -122,40 +116,8 @@
writeEntries(root_dir, subdir, zipFilePath, io)
else
io.get_output_stream(zipFilePath) { |f| f.puts(File.open(diskFilePath, "rb").read()) }
end
}
- end
-
- # Switch to the correct branch
- def git_switch_to(branch:)
- if branch
- @current_dir = Dir.pwd
- @git ||= Git.open(@root_dir)
- if branch != @git.current_branch
- Dir.chdir(@root_dir)
- @current_branch = @git.current_branch
- @stash = @git.branch.stashes.save("roku-builder-temp-stash")
- @git.checkout(branch)
- end
- end
- end
-
- # Switch back to the previous branch
- def git_switch_from(branch:)
- if branch
- @git ||= Git.open(@root_dir)
- if @git and @current_branch
- @git.checkout(@current_branch)
- @git.branch.stashes.apply if @stash
- end
- end
- end
-
- # Called if resuce from git exception
- def git_rescue
- @logger.error "Branch or ref does not exist"
- @logger.error e.message
- @logger.error e.backtrace
end
end
end