aboutsummaryrefslogtreecommitdiffstats
path: root/git-devproj.sh
blob: 2565e24bb97092b1e23119eb4e0b89787fb1f629 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/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/(<project name=")([^"]+)">/\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