#!/bin/bash -e arch=$1 # generate map of all packages to their treehash tree="$(mktemp)" if [[ $arch = master ]]; then git ls-tree -d "$GIT_COMMIT" */trunk > "$tree" else git ls-tree -d "$GIT_COMMIT" */repos/*-"$arch" */repos/*-any > "$tree" fi # generate map of all packages to their repo repos="$(mktemp)" find */repos/* -type d -printf '%h/%h\n' | sed -r 's@^([^/]*)/repos/(.*)-[^-]*$@\1 \2@'|sort -u > "$repos" # clean the working directory rm -rf * # add the packages back in as remotes cat "$tree" | while read mode type treehash path; do package="${path%%/*}" repo="$(sed -n "s/^${package} //p" "$repos")" commithash="$(sed -n "s/^${treehash} //p" "${TMPDIR}/packages-${package}.commits")" if [[ -n "$commithash" ]]; then mkdir -p "$repo" git submodule add ./ "${repo}/${package}" ( cd "${repo}/${package}" git checkout "${commithash}" ) else printf '%s\n' "$package" >> "${TMPDIR}/missing-packages/${arch}.tmp" fi done # clean up rm -f "$repos" "$tree"