summaryrefslogtreecommitdiff
path: root/pbs-absrepo-convert--filterarch
blob: 506baf3e9a285fa06646361602d2f89708851b5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/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)"
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
cat "$tree" | while read mode type treehash path; do
	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

# clean up
rm -f "$repos" "$tree"