mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-24 23:21:17 +02:00
enter_chroot: add support for git object pool indirection
This adds repo --references awareness (which maps down to git shared object pools; see git clone -s); specifically, it sets up the appropriate indirection bindings back to the actual shared source for use from within the chroot. Note that the approach is a bit complex, but it's required complexity- via this approach the references are accessible both from within, and without the chroot. BUG=chromium-os:19939 TEST=cbuildbot x86-generic-full --clobber --notests --nouprev TEST=cbuildbot x86-generic-full --notests --nouprev CQ-DEPEND=I986f17503dc154234ecadd90f6975d7164117cdb Change-Id: I8498863010cefe0bf5b8f20350fa45a5f2a093d3 Reviewed-on: https://gerrit.chromium.org/gerrit/13467 Tested-by: Brian Harring <ferringb@chromium.org> Reviewed-by: David James <davidjames@chromium.org> Commit-Ready: Brian Harring <ferringb@chromium.org>
This commit is contained in:
parent
104d20d8ea
commit
dd7d7939e0
@ -250,6 +250,44 @@ function setup_env {
|
||||
fi
|
||||
queue_mount "${FLAGS_trunk}" "--bind" "${CHROOT_TRUNK_DIR}"
|
||||
|
||||
|
||||
debug "Setting up referenced repositories if required."
|
||||
REFERENCE_DIR=$(git config --file \
|
||||
"${FLAGS_trunk}/.repo/manifests.git/config" \
|
||||
repo.reference)
|
||||
if [ -n "${REFERENCE_DIR}" ]; then
|
||||
|
||||
IFS=$'\n';
|
||||
required=( $( "${FLAGS_trunk}/chromite/lib/rewrite_git_alternates.py" \
|
||||
"${FLAGS_trunk}" "${REFERENCE_DIR}" "${CHROOT_TRUNK_DIR}" ) )
|
||||
unset IFS
|
||||
|
||||
queue_mount "${FLAGS_trunk}/.repo/chroot/alternates" --bind \
|
||||
"${CHROOT_TRUNK_DIR}/.repo/alternates"
|
||||
|
||||
# Note that as we're bringing up each referened repo, we also
|
||||
# mount bind an empty directory over its alternates. This is
|
||||
# required to suppress git from tracing through it- we already
|
||||
# specify the required alternates for CHROOT_TRUNK_DIR, no point
|
||||
# in having git try recursing through each on their own.
|
||||
#
|
||||
# Finally note that if you're unfamiliar w/ chroot/vfs semantics,
|
||||
# the bind is visible only w/in the chroot.
|
||||
mkdir -p ${FLAGS_trunk}/.repo/chroot/empty
|
||||
position=1
|
||||
for x in "${required[@]}"; do
|
||||
base="${CHROOT_TRUNK_DIR}/.repo/chroot/external${position}"
|
||||
queue_mount "${x}" "--bind" "${base}"
|
||||
if [ -e "${x}/.repo/alternates" ]; then
|
||||
queue_mount "${FLAGS_trunk}/.repo/chroot/empty" "--bind" \
|
||||
"${base}/.repo/alternates"
|
||||
fi
|
||||
position=$(( ${position} + 1 ))
|
||||
done
|
||||
unset required position base
|
||||
fi
|
||||
unset REFERENCE_DIR
|
||||
|
||||
if [ $FLAGS_ssh_agent -eq $FLAGS_TRUE ]; then
|
||||
if [ -n "${SSH_AUTH_SOCK}" -a -d "${HOME}/.ssh" ]; then
|
||||
TARGET_DIR="${FLAGS_chroot}/home/${USER}/.ssh"
|
||||
|
Loading…
x
Reference in New Issue
Block a user