#!/bin/sh -efu

. girar-sh-functions

repositories_file="/etc/girar/repositories"
acldir="/etc/girar/acl"

update()
{
	local packages type

	while read packages type; do
		# path_to/leader/etc/type
		leader="${packages%/etc/$type}"; leader="${leader##*/}"

		while read obj tail; do
			[ "$obj" != "${obj#\#}" ] || continue

			target="${obj%%/*}"
			branches="${obj#$target}"

			if [ -n "$branches" -a "$branches" != "/" ]; then
				branches="${branches#/}"
				fgrep -xqs "$branches" "$repositories_file" || continue
			else
				branches="$(cat "$repositories_file")"
			fi

			quote_target="$(quote_sed_regexp "$target")"

			for branch in $branches; do
				prev_out="$(grep "^$quote_target " "$acldir/list.$type.$branch")" ||
					continue

				[ -n "${prev_out%%$target $leader *}" ] ||
					sed -i -e "s|^$quote_target .*|$target $leader $tail|" "$acldir/list.$type.$branch"
			done
		done < "$packages"
	done
}

find "/people" -type f -path '*/etc/packages' -o -path '*/etc/groups' -printf '%p %f\n' |
	update
