diff options
Diffstat (limited to 'pbs-convert-absgit--filterarch')
-rwxr-xr-x | pbs-convert-absgit--filterarch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/pbs-convert-absgit--filterarch b/pbs-convert-absgit--filterarch new file mode 100755 index 0000000..73fa96a --- /dev/null +++ b/pbs-convert-absgit--filterarch @@ -0,0 +1,45 @@ +#!/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" |