aboutsummaryrefslogtreecommitdiffstats
path: root/git-devproj.sh
diff options
context:
space:
mode:
authorMatěj Cepl <mcepl@cepl.eu>2024-10-09 17:00:24 +0200
committerMatěj Cepl <mcepl@cepl.eu>2024-10-14 11:11:20 +0200
commit9798a36af47c5ee21c85bff9b6a01dc631b9ddcd (patch)
treee1f97c9372a37aac5f9f775a32bf31be502103d7 /git-devproj.sh
parent822d3654ba447500c4a16269ef698f4a881f977a (diff)
downloadgosc-9798a36af47c5ee21c85bff9b6a01dc631b9ddcd.tar.gz
feat[git-devproj]: allow copy additional package to existing project
Diffstat (limited to 'git-devproj.sh')
-rwxr-xr-xgit-devproj.sh140
1 files changed, 50 insertions, 90 deletions
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/(<project name=")([^"]+)">/\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/(<project name=")([^"]+)">/\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 '<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
+# Set config
+git config "lfs.$(git remote get-url origin)/info/lfs.locksverify" true