-
Notifications
You must be signed in to change notification settings - Fork 50
/
update_ebuilds
executable file
·93 lines (76 loc) · 2.78 KB
/
update_ebuilds
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/bash
# Copyright (c) 2013 The CoreOS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
SCRIPT_ROOT=$(dirname $(readlink -f "$0"))
. "${SCRIPT_ROOT}/common.sh" || exit 1
# Default RSYNC options emerge --sync uses
RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --timeout=180"
DEFINE_string portage "git" \
"Path to a local portage tree or 'rsync' or 'git' to fetch from remote."
DEFINE_string portage_stable "${SRC_ROOT}/third_party/portage-stable" \
"Path to the portage-stable git checkout."
DEFINE_string git "https://github.com/gentoo/gentoo.git" \
"git location for the gentoo portage repo (for use with --portage=git)"
DEFINE_string rsync "rsync://rsync.gentoo.org/gentoo-portage" \
"Rsync location for gentoo-portage to use with --portage=rsync"
DEFINE_boolean commit ${FLAGS_FALSE} \
"Commit all changes after updating portage-stable."
# Parse flags
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
switch_to_strict_mode
# Accept arguments from STDIN for batch processing
if [[ -z "$*" ]]; then
set -- $(</dev/stdin)
fi
if [[ -z "$*" ]]; then
die "No packages provided"
fi
cd "$FLAGS_portage_stable"
for pkg in "$@"; do
# Only allow packages, not categories or the whole tree
if [[ ! "$pkg" =~ ^[a-z0-9-][a-z0-9-]*\/[a-zA-Z0-9-][a-zA-Z0-9_-]*$ ]] &&
[[ ! "$pkg" =~ ^(eclass|licenses|profiles|scripts|metadata/glsa) ]]; then
die "Invalid name $pkg, must be category/package or special dir."
fi
if [[ "$FLAGS_portage" == git ]]; then
rm -rf "$pkg"
if [[ "$(git remote get-url update_ebuilds)" != "${FLAGS_git}" ]]; then
git remote rm update_ebuilds || true
git remote add update_ebuilds "${FLAGS_git}"
fi
git fetch update_ebuilds
git checkout refs/remotes/update_ebuilds/master -- "$pkg"
else
if [[ "$FLAGS_portage" == rsync ]]; then
FLAGS_portage="${FLAGS_rsync}"
fi
if [[ "$pkg" =~ "eclass/"* ]]; then
slash=
else
slash="/"
mkdir -p "$pkg"
fi
rsync $RSYNC_OPTS -v --exclude CVS "$FLAGS_portage/$pkg${slash}" "$pkg"
fi
# Make sure we don't change the repo name to 'gentoo'
if [[ "$pkg" =~ ^profiles ]]; then
echo portage-stable > profiles/repo_name
fi
git add -A "$pkg"
done
if [[ $FLAGS_commit -eq $FLAGS_TRUE ]]; then
if [[ $# -eq 1 ]]; then
git commit -e -m "bump($1): sync with upstream"
else
cat > .git/COMMIT_EDITMSG <<EOF
bump($1): sync with upstream
Packages updated:
$(for p in "$@"; do echo " $p"; done | sort)
EOF
git commit -e -F .git/COMMIT_EDITMSG
fi
else
git status
fi