diff options
Diffstat (limited to 'pbs-absrepo-convert--filterpackage')
-rwxr-xr-x | pbs-absrepo-convert--filterpackage | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/pbs-absrepo-convert--filterpackage b/pbs-absrepo-convert--filterpackage new file mode 100755 index 0000000..24ba8b0 --- /dev/null +++ b/pbs-absrepo-convert--filterpackage @@ -0,0 +1,34 @@ +#!/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")" + + mkdir -p "$repo" + git submodule add ./ "${repo}/${package}" + ( + cd "${repo}/${package}" + git checkout "${commithash}" + ) +done + +# clean up +rm -f "$repos" "$tree" |