#!/bin/bash -e arch=$1 echo # newline echo Preparing... # 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)" printf '%s\n' */repos/*-"$arch" | sed -r 's@^([^/]*)/repos/(.*)-[^-]*$@\1 \2@' | sort -u > "$repos" # clean the working directory rm -rf * # add the packages back in as remotes count="$(wc -l < "$tree")" cat -n "$tree" | while read n mode type treehash path; do printf '\r%s (%i/%i)' "$(gettext 'Adding package')" "$n" "$count" package="${path%%/*}" repo="$(sed -n "s/^${package} //p" "$repos")" commitfile="../packages-${package}.commits" if [[ -f "$commitfile" ]]; then commithash="$(sed -n "s/^${treehash} //p" "$commitfile")" 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 echo # newline # clean up rm -f "$repos" "$tree"