Offline diffing & patching

The springboardvr-cli push commands runs a few operations in parallel, but its basic primitives are available as separate commands that do not require network connectivity.

springboardvr-cli diff will compute the differences between two given folders or archives. It will generate both a patch file (patch.pwr) and a signature file (patch.pwr.sig)

You can use /dev/null in place of the old archive to produce a patch against an empty container. This works everywhere and does not require the special file /dev/null to actually exist or make sense in your operating system.

springboardvr-cli verify will read hashes from a signature file and compare them with the contents of a folder. It will exit with a non-zero code if they don't match.

This can be used to verify that an installation of a title wasn't corrupted.

springboardvr-cli apply will use a patch file to transform an old version into a new version. It can either rebuild the new version in a different directory or patch the old version in place, with the --inplace option.

A signature can be given to the apply command via the --signature file.sig option, to verify that the patching was successful. When no signature is given, springboardvr-cli assumes that the folder being patched is a non-corrupted instance of the older version.

In the following paragraph, 'added' files are files present in the newer version but not the older version, 'removed' files are files present in the older version, but not the newer, and 'touched' files are files present in both, but with a different content.

When working in-place (input directory == output directory + --inplace):

  • springboardvr-cli creates a temporary directory
  • rebuilds the newer version of 'touched' files in it
  • compares rebuilt files against signature, if any
    • if there's a hash mismatch, springboardvr-cli knows the patch will not apply cleanly and exits with a non-zero code. There is no override for this.
  • deleted 'removed' files from the output directory
  • moves all files from the temporary directory into the output directory, overwriting their previous version

This means, when working in-place, springboardvr-cli:

  • will not produce corrupted files
  • doesn't check the signature of untouched files
    • this allows for title updates without breaking mods

springboardvr-cli sign will generate a signature file, in the same format as the springboardvr-cli diff command, and suitable to be used by the springboardvr-cli verify command.

This could be used in a scenario where patching is irrelevant, but integrity checking is important.

springboardvr-cli file will display whether a file is a patch file, a signature file, or another type of file, along with some general informations about the file.

springboardvr-cli ls will display the list of files contained in a patch file or the list of files that can be checked via a signature file.

Using springboardvr-cli programmatically

springboardvr-cli's output tries really hard to be readable by humans, but on occasion, will lend itself to being parsed by other tools.

To enable JSON output mode, use the -j (or --json) flag. In JSON mode, each line springboardvr-cli outputs is a valid JSON object of the following form:

  • {type: "log", "message": "Doing something", level: "info"}
  • {type: "progress", "percentage": "80"}

results matching ""

    No results matching ""