#!/bin/sh # Requires: coreutils, curl, jq, git set -ue usage () { cat << EOF usage: $(basename $0) [source-project] package [target-project] EOF exit 1 } 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)" [ -z "${MYORG}" ] && MYORG="${OBS_LOGIN}" if [ "$1" = "openSUSE:Factory" ] ; then OUT=$(osc develproject "$1" "$2") SRCPRJ="$(dirname "$OUT")" PKG="$(basename "$OUT")" else SRCPRJ="$1" PKG="$2" fi if [ $# -gt 2 ] ; then if [ "$3" = "." ] ; then TRGPRJ="$(basename "$(pwd -P)")" else TRGPRJ="$3" fi else TRGPRJ="home:$OBS_LOGIN:branches:$SRCPRJ" fi # 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}" 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 [ -d "$TRGPRJ" ] || osc co "$TRGPRJ" cd "$TRGPRJ" fi # Put package into new project osc api -X POST "/source/${SRCPRJ}/${PKG}?cmd=fork&scmsync=${SCM_URL}&target_project=${TRGPRJ}&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 # Set config git config "lfs.$(git remote get-url origin)/info/lfs.locksverify" true