summaryrefslogtreecommitdiff
path: root/pbs-absrepo-convert
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2012-11-01 02:20:42 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2012-11-01 02:20:42 -0400
commitc1c7f3a2516b1101cae844e2506ef8aace5cca29 (patch)
treeec85341767969d108ff44a609aa5a63cbae29a47 /pbs-absrepo-convert
initial commit
Diffstat (limited to 'pbs-absrepo-convert')
-rwxr-xr-xpbs-absrepo-convert58
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 "$@"