blob: 1d1cb044149e32db20d0e3704d21554210dba1ae (
plain) (
tree)
|
|
#!/bin/sh
# Requires: coreutils, osc, xmlstarlet, 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)"
# If we are in a project checkout, what's its name?
CUR_PRJ=""
[ -d '.osc/' ] && CUR_PRJ="$(cat .osc/_project)"
# 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="$CUR_PRJ"
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$CUR_PRJ" != "x$TRGPRJ" ] ; then
if ! osc ls "$TRGPRJ" >/dev/null 2>&1 ; then
osc meta prj "$SRCPRJ" \
| xmlstarlet ed \
-d "/project/person[@userid!='${OBS_LOGIN}']" \
-d "/project/group" \
-u "/project/@name" -v "$TRGPRJ" \
-u "/project/title" -v "Development branch of ${SRCPRJ}" \
| 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
|