mirror of
https://github.com/flatcar/scripts.git
synced 2026-05-05 04:06:33 +02:00
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>
93 lines
2.8 KiB
Bash
Executable File
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
|