diff options
Diffstat (limited to 'pbs-absrepo-convert')
-rwxr-xr-x | pbs-absrepo-convert | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/pbs-absrepo-convert b/pbs-absrepo-convert new file mode 100755 index 0000000..2482d44 --- /dev/null +++ b/pbs-absrepo-convert @@ -0,0 +1,58 @@ +#!/bin/bash -e + +. /usr/bin/libremessages + +cachedir="$(pbs-plumb-config get core.cachedir)" +sourcedir="$(pbs-plumb-config get core.sourcedir)" +tmpdir="`mktemp -d --tmpdir pbs-absrepo-convert.XXXXXXXXXX`" +export TMPDIR=$tmpdir + +cleanup() { + rm -rf "$tmpdir" +} + +trap cleanup EXIT + +main() { + [[ $# != 1 ]] && { usage; return 1; } + local source=$1 + + # init ################################################################# + cd "${cachedir}/${source}.git" + git branch > "${tmpdir}/branches" + git clone "${cachedir}/${source}.git" "${tmpdir}/repo" + + cd "${tmpdir}/repo" + git checkout -b orig + git branch -D master + find */repos/* -type d -printf '%f\n' | sed -e 's/.*/-//' -e '/^any$/d' | sort -u > "${tmpdir}/architectures" + + # convert packages ##################################################### + msg "$(gettext "Converting packages...")" + package_count="$(wc -l "${tmpdir}/branches")" + package_count="${package_count%% *}" + cat "${tmpdir}/branches" | sed -n 's@^\s*packages/@@p' | cat -n | while read n package; do + msg2 "$(gettext "(%d/%d) %s")" "$n" "$package_count" "$package" + git checkout "packages/${package}" + git filter-branch -f --prune-empty --subdirectory-filter trunk "packages/${package}" + git log --pretty=format:'%T %H' > "${tmpdir}/packages-${package}.commits" + done + + # convert architectures ################################################ + for arch in master $(cat "${tmpdir}/architectures"); do + msg "$(gettext "Creating architecture %s...")" "$arch" + git checkout orig + git checkout -b "$arch" + git filter-branch --tree-filter "pbs-absrepo-convert--treefilter $arch" "$arch" + done + + # save results ######################################################### + msg "$(gettext "Copying into source directory...")" + [[ -d "$sourcedir" ]] || mkdir -p "$sourcedir" + git clone --mirror "${tmpdir}/repo" "${sourcedir}/${source}.new.git" + [[ -d "${sourcedir}/${source}.git" ]] && mv "${sourcedir}/${source}"{,.old}.git + mv "${sourcedir}/${source}"{.new,}.git + [[ -d "${sourcedir}/${source}.old.git" ]] && rm -rf "${sourcedir}/${source}".old.git +} + +main "$@" |