|
|
|
# Setup static paths
|
|
|
|
version_path="${version_data_path}"
|
|
|
|
patches_path="${patches_data_path}"
|
|
|
|
|
|
|
|
# Parse arguments
|
|
|
|
echo_output=false
|
|
|
|
minify=false
|
|
|
|
verbose=false
|
|
|
|
product_key=game
|
|
|
|
|
|
|
|
function print_help() {
|
|
|
|
echo "Sets the patch path for a given branch."
|
|
|
|
echo "Options:"
|
|
|
|
echo " --help, -h | Displays this help message"
|
|
|
|
echo " --echo, -e, --dry-run | Prints the output to the console, instead of overwriting the file"
|
|
|
|
echo " --minify, -m | Minifies the JSON result"
|
|
|
|
echo " --verbose, -v | Enables verbose output, useful for debugging"
|
|
|
|
echo " --version-path <path> | Explicitly override version data directory path with specified"
|
|
|
|
echo " --patches-path <path> | Explicitly override patch data path with specified"
|
|
|
|
echo ""
|
|
|
|
echo "Example usage: ./set_game_branch --echo release PATCH5464C"
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
for arg in "$@"
|
|
|
|
do
|
|
|
|
case $arg in
|
|
|
|
--help|-h)
|
|
|
|
print_help
|
|
|
|
;;
|
|
|
|
--echo|--dry-run|-e)
|
|
|
|
echo_output=true
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--minify|-m)
|
|
|
|
minify=true
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--verbose|-v)
|
|
|
|
verbose=true
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--version-path)
|
|
|
|
version_path="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--patches-path)
|
|
|
|
patches_path="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--product-key)
|
|
|
|
product_key="$2"
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
# Sanity check parameter count
|
|
|
|
if [ "$#" -ne 2 ]
|
|
|
|
then
|
|
|
|
echo "ERROR: insufficient parameters"
|
|
|
|
print_help
|
|
|
|
fi
|
|
|
|
|
|
|
|
version_file="${version_path%/}/${1%.json}.json"
|
|
|
|
patch_path="${2%/}"
|
|
|
|
|
|
|
|
if $verbose
|
|
|
|
then
|
|
|
|
echo "Values:"
|
|
|
|
echo " echo_output: $echo_output"
|
|
|
|
echo " minify: $minify"
|
|
|
|
echo " patches_path: $patches_path"
|
|
|
|
echo " version_path: $version_path"
|
|
|
|
echo " patch_path: $patch_path"
|
|
|
|
echo " version_file: $version_file"
|
|
|
|
echo " product_key: $product_key"
|
|
|
|
echo ""
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Sets a Renegade X launcher version branch to point to a Renegade X game patch data package
|
|
|
|
#
|
|
|
|
# @param version_file Launcher version file to target/modify
|
|
|
|
# @param patch_path Relative path from patches_path to target game patch data
|
|
|
|
# @param patches_path Path to the root patches directory on this filesystem
|
|
|
|
function set_branch() {
|
|
|
|
version_file="$1"
|
|
|
|
patch_path="$2"
|
|
|
|
patches_path="$3"
|
|
|
|
product_key="$4"
|
|
|
|
metadata_file="${patches_path}/${patch_path}/metadata.json"
|
|
|
|
|
|
|
|
# Verify version branch exists
|
|
|
|
if ! [ -f "$version_file" ]
|
|
|
|
then
|
|
|
|
echo "ERROR: version file does not exist: $version_file"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Verify patch data exists
|
|
|
|
if ! [ -f "$metadata_file" ]
|
|
|
|
then
|
|
|
|
echo "ERROR: metadata file does not exist: $metadata_file"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Get metadata hash
|
|
|
|
patch_metadata=$(cat "${metadata_file}")
|
|
|
|
metadata_hash=$(sha256sum ${metadata_file} | awk '{ print toupper($1) }')
|
|
|
|
|
|
|
|
# Validate instructions_hash
|
|
|
|
instructions_real_hash=$(sha256sum "${patches_path}/${patch_path}/instructions.json"| awk '{ print toupper($1) }')
|
|
|
|
instructions_expected_hash=$(echo "$patch_metadata" | jq -r ".instructions_hash")
|
|
|
|
if [ "$instructions_expected_hash" != "$instructions_real_hash" ]
|
|
|
|
then
|
|
|
|
echo "ERROR: Metadata hash does not match real instructions.json hash. Corrupt upload?"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# TODO: Verify contents of patch by parsing through instructions.json to check file hashes
|
|
|
|
|
|
|
|
# Read in initial version data
|
|
|
|
version_data=$(cat "${version_file}")
|
|
|
|
|
|
|
|
# Set the patch_path
|
|
|
|
version_data=$(echo "${version_data}" | jq ".${product_key}.patch_path = \"${patch_path}\"")
|
|
|
|
|
|
|
|
# Set the metadata hash; this is unused for now
|
|
|
|
version_data=$(echo "${version_data}" | jq ".${product_key}.metadata_hash = \"${metadata_hash}\"")
|
|
|
|
|
|
|
|
# Merge in metadata into product
|
|
|
|
product_version_data=$(echo "${version_data}" | jq ".${product_key} * ${patch_metadata}")
|
|
|
|
version_data=$(echo "${version_data}" | jq ".${product_key} = ${product_version_data}")
|
|
|
|
|
|
|
|
# Minify final JSON if specified
|
|
|
|
if $minify
|
|
|
|
then
|
|
|
|
version_data=$(echo "${version_data}" | jq -c .)
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Write version_data to destination
|
|
|
|
if $echo_output
|
|
|
|
then
|
|
|
|
echo "${version_data}"
|
|
|
|
else
|
|
|
|
echo "${version_data}" > ${version_file}
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
set_branch "${version_file}" "${patch_path}" "${patches_path}" "${product_key}"
|