aboutsummaryrefslogtreecommitdiff
blob: d1e385c11ca723f4e2045faa65cf2dfcae8ba6c6 (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash
# Example /etc/portage/repo.postsync.d script. Make it executable (chmod +x) for
# Portage to process it.
#
# With portage-2.2.16 and newer, all repo.postsync.d hooks will be called multiple
# times after syncing each repository.
#
# Older versions of Portage support syncing only one repository.
# In those versions, the postsync.d hooks will be called only once,
# and they will not be passed any parameters.

# On a repo.postsync.d hook call, positional parameters contain
# information about the just-synced repository.

# Your hook can control it's actions depending on any of the three
# parameters passed in to it.
#
# They are as follows:
#
# The repository name.
repository_name=${1}
# The URI to which the repository was synced.
sync_uri=${2}
# The path to the repository.
repository_path=${3}

# Portage assumes that a hook succeeded if it exits with 0 code. If no
# explicit exit is done, the exit code is the exit code of last spawned
# command. Since our script is a bit more complex, we want to control
# the exit code explicitly.
ret=0

if [ -n "${repository_name}" ]; then
	# Repository name was provided, so we're in a post-repository hook.
	echo "* In post-repository hook for ${repository_name}"
	echo "** synced from remote repository ${sync_uri}"
	echo "** synced into ${repository_path}"

	# Gentoo comes with pregenerated cache but the other repositories
	# usually don't. Generate them to improve performance.
	if [ "${repository_name}" != "gentoo" ]; then
		if ! egencache --update --repo="${repository_name}" --jobs=4
		then
			echo "!!! egencache failed!"
			ret=1
		fi
	fi

	# Regenerate the metadata/pkg_desc_index file if needed. It's not
	# needed for https://gitweb.gentoo.org/repo/sync/gentoo.git which
	# provides a freshly generated copy.
	if [[ ! -e ${repository_path}/metadata/pkg_desc_index || (
		-d ${repository_path}/metadata/md5-cache &&
		-n $(find "${repository_path}/metadata/md5-cache" -type f -newer "${repository_path}/metadata/pkg_desc_index" -print -quit) ) ]]; then
		if ! egencache --update-pkg-desc-index --repo="${repository_name}" ${PORTAGE_VERBOSE+--verbose}
		then
			echo "!!! egencache failed!"
			ret=1
		fi
	fi
fi

# Return explicit status.
exit "${ret}"