#!/bin/bash set -eo pipefail # running in guest guest_name="$(qubesdb-read /name)" guest_repo_dir="$(dirname $(realpath ""$0""))" echo $guest_repo_dir pushd ${guest_repo_dir} >/dev/null if git remote | grep -Fq 'dom0'; then echo "(${guest_name}) remote 'dom0' already exists" >&2 else echo "(${guest_name}) setting up remote 'dom0' to pull changes via bundle" >&2 git remote add dom0 ${guest_repo_dir}/.bundles/dom0.bundle fi branch=$(git branch --show-current) echo "(${guest_name}) creating bundle for branch '${branch}'" >&2 mkdir -p .bundles git bundle create .bundles/domu.bundle "${branch}" popd >/dev/null # piped to bash in dom0 cat <<-DOM0 set -eo pipefail echo "(dom0) bringing bundle from qubes '${guest_name}'" >&2 qvm-run -p ${guest_name} "cat ${guest_repo_dir}/.bundles/domu.bundle" /tmp/saltstuff.bundle echo "{dom0} cloning into \$1; checking out branch '${branch}'" >&2 git clone /tmp/saltstuff.bundle -b "${branch}" "\$1" pushd "\$1" echo "{dom0} setting up remote '${guest_name}' to push/pull changes via bundle" >&2 mkdir .bundles mv /tmp/saltstuff.bundle .bundles/domu.bundle git remote remove origin git remote add "${guest_name}" \${pwd}/.bundles/domu.bundle # ensure remote refs are present in each repo git fetch "${guest_name}" # ensure remote refs are present in the dom0 repo git bundle create .bundles/dom0.bundle main~1..main main qvm-run -p "${guest_name}" "cat > ${guest_repo_dir}/.bundles/dom0.bundle" <.bundles/dom0.bundle qvm-run -p "${guest_name}" "cd ${guest_repo_dir} && git fetch dom0" .bundle-env echo "GUEST_REPO=${guest_repo_dir}" >> .bundle-env echo "${dom0} has pulled!" >&2 popd DOM0