From 9798a36af47c5ee21c85bff9b6a01dc631b9ddcd Mon Sep 17 00:00:00 2001 From: Matěj Cepl Date: Wed, 9 Oct 2024 17:00:24 +0200 Subject: feat[git-devproj]: allow copy additional package to existing project --- git-devproj.sh | 140 +++++++++++++++++++++------------------------------------ 1 file changed, 50 insertions(+), 90 deletions(-) (limited to 'git-devproj.sh') diff --git a/git-devproj.sh b/git-devproj.sh index be30abe..2565e24 100755 --- a/git-devproj.sh +++ b/git-devproj.sh @@ -1,114 +1,74 @@ -#!/bin/bash +#!/bin/sh # Requires: coreutils, curl, jq, git -set -uex +set -ue -# API_KEY="$(cat "$(dirname "$(readlink -f "$0")")"/gitea-api-token.txt)" +usage () { +cat << EOF +usage: $(basename $0) [source-project] package [target-project] +EOF +exit 1 +} -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 +die () { + echo "$@" 1>&2 + exit 2 } +[ $# -lt 2 ] && usage + OBS_LOGIN="$(osc who |cut -d: -f 1)" # Do we have our own configuration for MYORG? MYORG="$(git config --get --default '' obs.org)" -if [ -z "${MYORG}" ] ; then - MYORG="${OBS_LOGIN}" -fi - -[ "$#" -lt 2 ] && exit 1 +[ -z "${MYORG}" ] && MYORG="${OBS_LOGIN}" if [ "$1" = "openSUSE:Factory" ] ; then OUT=$(osc develproject "$1" "$2") - DEVPRJ="$(dirname "$OUT")" + SRCPRJ="$(dirname "$OUT")" PKG="$(basename "$OUT")" else - DEVPRJ="$1" + SRCPRJ="$1" PKG="$2" fi -SCM_URL="https://src.opensuse.org/${MYORG}/${PKG}#factory" - -HOME_BRANCH="home:$OBS_LOGIN:branches:$DEVPRJ" +if [ $# -gt 2 ] ; then + if [ "$3" = "." ] ; then + TRGPRJ="$(basename "$(pwd -P)")" + else + TRGPRJ="$3" + fi +else + TRGPRJ="home:$OBS_LOGIN:branches:$SRCPRJ" +fi -osc meta prj "$DEVPRJ" | sed -E -e 's/(/\1'"$HOME_BRANCH"'">/' | osc meta prj -F - "$HOME_BRANCH" +# If we want to use full URL including the branch-fragment, +# we have to encode \# as %23. +SCM_URL="https://src.opensuse.org/${MYORG}/${PKG}" -osc meta prjconf "$DEVPRJ" | osc meta prjconf -F - "$HOME_BRANCH" +if [ "x$(basename "$(pwd -P)")" != "x$TRGPRJ" ] ; then + if [ ! -d "$TRGPRJ" ] ; then + osc meta prj "$SRCPRJ" | sed -E -e 's/(/\1'"$TRGPRJ"'">/' \ + | osc meta prj -F - "$TRGPRJ" + osc meta prjconf "$SRCPRJ" | osc meta prjconf -F - "$TRGPRJ" + fi -if [ ! -d "$HOME_BRANCH" ] ; then - osc co "$HOME_BRANCH" + [ -d "$TRGPRJ" ] || osc co "$TRGPRJ" + cd "$TRGPRJ" fi -cd "$HOME_BRANCH" +# Put package into new project +osc api -X POST "/source/${SRCPRJ}/${PKG}?cmd=fork&scmsync=${SCM_URL}&target_project=${TRGPRJ}&target_package=${PKG}" -osc api -X POST "/source/${DEVPRJ}/${PKG}?cmd=fork&scmsync=${SCM_URL}&target_project=${HOME_BRANCH}&target_package=${PKG}" +osc up +cd "$PKG" + +# Final cleanup +if [ -f _scmsync.obsinfo ] ; then + echo '_scmsync.obsinfo' >> .git/info/exclude + rm -f _scmsync.obsinfo + git add -A . + git commit -a -m 'Remove _scmsync.obsinfo' +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="$(tea logins ls -o simple|head -n 1|cut -d ' ' -f 4)" -# -# # 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 '' "$OSC_META" >/dev/null 2>&1 ; then -# sed -e "/<\/package>/i\ \ https://src.opensuse.org/pool/$PKG#factory<\/scmsync>" \ -# "$OSC_META" | osc meta pkg "$DEVPRJ" "$PKG" -F - -# fi +# Set config +git config "lfs.$(git remote get-url origin)/info/lfs.locksverify" true -- cgit