flatcar-scripts/update_ebuilds
James Le Cuirot 21699f8433
Move and rename package repositories (part 2)
Catalyst 4 has totally changed the way repositories are handled. It only
works when the name of the directory containing the repository matches
the configured name of that repository. We already renamed coreos to
coreos-overlay accordingly, but we actually want entirely different
names and more convenient locations too.

The repositories are now known as gentoo-subset and flatcar-overlay, and
they live under scripts/repos. Using the same name as upstream Gentoo
would have been problematic, and just "flatcar" would have looked
awkward in documentation.

I have removed code referencing /mnt/host/source/config rather than fix
it up, as this is no location is no longer used anywhere.

Signed-off-by: James Le Cuirot <jlecuirot@microsoft.com>
2024-07-23 09:06:03 +01:00

93 lines
2.8 KiB
Bash
Executable File

#!/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 gentoo_subset "${SCRIPT_ROOT}/repos/gentoo-subset" \
"Path to the gentoo-subset 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 gentoo-subset."
# 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_gentoo_subset"
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 gentoo-subset > 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