Git Airgap Submodule Helper

git_airgap_submodule_helper.bsh

This file contains a function to bootstrap just in a relocated repository.

After (shallow) cloning the air-gapped repository, the submodules must be initialized and re-configured before they can be updated (recursively). This is handled by the git_airgap-submodule-update just target. However, this is not possible without the vsi_common submodule, which must first be initialized and updated itself.

This function, git_airgap_submodule_update, is appended to repo_map.env in the git_export-repo just target and then orphan committed to the air-gapped repository in the git_import-repo just target in just_git_airgap_repo.bsh. git_airgap_submodule_update follows the same steps as git_mirror update_submodules.

In order to call git_airgap_submodule_update, repo_map.env must be grabbed out of the orphan commit and then sourced. Obviously, no just functions can be called yet, so this must be done in the file specified by JUST_SETUP_SCRIPT (typically called setup.env). For example, the setup.env script, which typically looks like:

export JUST_SETUP_SCRIPT="$(basename "${BASH_SOURCE[0]}")"
source "$(dirname "${BASH_SOURCE[0]}")/external/vsi_common/env.bsh"

would become:

export JUST_SETUP_SCRIPT="$(basename "${BASH_SOURCE[0]}")"
if [ ! -f "$(dirname "${BASH_SOURCE[0]}")/external/vsi_common/env.bsh" ]; then
  echo "'just' could not be loaded. Trying to setup the repository as an"
  echo "air-gapped repository"
  # source the contents of repo_map.env (in a bash 3.2 compatible way)
  source /dev/stdin <<< \
      "$(git show origin/__just_git_mirror_info_file:repo_map.env 2>/dev/null || :)"
  if ! declare -Fx git_airgap_submodule_update; then
    echo "ERROR the vsi_common submodule could not be found!"
    return 1
  fi
  git_airgap_submodule_update external/vsi_common
fi
source "$(dirname "${BASH_SOURCE[0]}")/external/vsi_common/env.bsh"

After the setup.env file has been sourced, it is possible to run just git airgap-submodule-update to recursively initialize and clone the submodules from their air-gapped mirrors

git_airgap_submodule_update

After cloning the air-gapped repository, reconfigure and update a submodule

Arguments:

$1 - A path from the repos/repo_paths parameter of the submodule to update

Parameters:

repos - An associative array mapping the (relative) path from the root of the project repository to each submodule to the respective URL for each submodule (recursively) repo_paths - The (relative) path from the root of the project repository to each submodule (recursively) repo_urls - The respective URL for each submodule (recursively)

Note

Either repos xor (repo_paths and repo_urls) should be provided

Bugs

$1 (the submodule path) must be the same as the submodule name