94 lines
2.7 KiB
Bash
Executable File
94 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Requires: coreutils, curl, jq, git
|
|
set -uex
|
|
|
|
API_KEY="$(cat "$(dirname "$(readlink -f "$0")")"/gitea-api-token.txt)"
|
|
|
|
gitea_cmd () {
|
|
ADD_PARAMS=${2:-}
|
|
# shellcheck disable=SC2048,SC2086
|
|
curl -s -H 'Accept: application/json' -H 'Content-Type: application/json' \
|
|
-H "Authorization: token $API_KEY" ${ADD_PARAMS[*]} \
|
|
"https://src.opensuse.org/api/v1/$1" 2>/dev/null
|
|
}
|
|
|
|
[ "$#" -lt 2 ] && exit 1
|
|
|
|
if [ "$1" = "openSUSE:Factory" ] ; then
|
|
OUT=$(osc develproject "$1" "$2")
|
|
DEVPRJ="$(dirname "$OUT")"
|
|
PKG="$(basename "$OUT")"
|
|
else
|
|
DEVPRJ="$1"
|
|
PKG="$2"
|
|
fi
|
|
|
|
osc co "$DEVPRJ" "$PKG"
|
|
cd "$DEVPRJ/$PKG"
|
|
|
|
# Init git?
|
|
if ! git rev-parse --git-dir >/dev/null 2>&1 ; then
|
|
git init -q -b obs_state
|
|
git add -A . && git rm --cached -r .osc/ && git commit -m 'OBS last state'
|
|
git remote add origin "https://src.opensuse.org/pool/$PKG.git"
|
|
fi
|
|
|
|
# # Fork
|
|
# Whoami?
|
|
LOGIN="$(gitea_cmd "user" | jq -r '.login')"
|
|
# Do we have our own configuration for MYORG?
|
|
if ! MYORG="$(git config obs.org)" ; then
|
|
MYORG="${LOGIN}"
|
|
fi
|
|
|
|
# Check whether the fork already exists
|
|
FRK_OUT="$(gitea_cmd "repos/pool/$PKG/forks")"
|
|
FORKS="$(echo "$FRK_OUT" | jq -r '.[].full_name | select(startswith("rpm/") | not)')"
|
|
|
|
if [ -n "$FORKS" ] ; then
|
|
# shellcheck disable=SC2086
|
|
MY_FORK="$(echo "$FRK_OUT" | jq -r ".[].full_name | select(startswith(\""$MYORG/"\"))")"
|
|
else
|
|
MY_FORK=""
|
|
fi
|
|
|
|
# If not, make a fork
|
|
if [ -z "$MY_FORK" ] ; then
|
|
if [ "$MYORG" = "$LOGIN" ] ; then
|
|
FRK_OUT="$(gitea_cmd "repos/pool/$PKG/forks" "-X POST")"
|
|
else
|
|
# shellcheck disable=SC2086
|
|
FRK_OUT="$(echo '{ "organization": "'$MYORG'" }' \
|
|
| gitea_cmd "repos/pool/$PKG/forks" "-d @-")"
|
|
fi
|
|
MY_FORK="$(echo "$FRK_OUT" | jq -r '.full_name')"
|
|
fi
|
|
|
|
# Set URLs for the forked repository
|
|
git remote add myproj "https://src.opensuse.org/$MY_FORK.git"
|
|
git remote set-url --push myproj "gitea@src.opensuse.org:$MY_FORK.git"
|
|
git remote update
|
|
|
|
# # Final cleanup
|
|
# Add ignore
|
|
echo '.osc/' >> .git/info/exclude
|
|
echo '_scmsync.obsinfo' >> .git/info/exclude
|
|
# Set config
|
|
git config "lfs.$(git remote get-url myproj)/info/lfs.locksverify" true
|
|
# Switch to factory branch, obs_state is just a record of the old state
|
|
git checkout --force -B factory myproj/factory
|
|
|
|
# # SCM Sync settings
|
|
OSC_META=$(mktemp /tmp/osc_meta_data.XXXXXX.xml)
|
|
trap 'rm -f $OSC_META' EXIT
|
|
|
|
osc meta pkg "$DEVPRJ" "$PKG" >"$OSC_META" 2>/dev/null
|
|
|
|
# If this is considered a bad idea
|
|
# (https://stackoverflow.com/a/1732454/164233) we can use
|
|
# xmlstarlet instead.
|
|
if ! grep '<scmsync>' "$OSC_META" >/dev/null 2>&1 ; then
|
|
sed -e "/<\/package>/i\ \ <scmsync>https://src.opensuse.org/pool/$PKG#factory<\/scmsync>" \
|
|
"$OSC_META" | osc meta pkg "$DEVPRJ" "$PKG" -F -
|
|
fi
|