aboutsummaryrefslogtreecommitdiffstats
path: root/git-obranch
blob: 5c305538ae275483985b4160607818ee2c1eb4b3 (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
#!/bin/sh
# Requires: coreutils, curl, jq, git
set -ue

API_KEY="$(cat "$(dirname "$(readlink -f "$0")")"/gitea-api-token.txt)"

gitea_cmd () {
    ADD_PARAMS=${2:-}
    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
}

[ "$#" -lt 2 ] && exit 1

if [ "$1" = "openSUSE:Factory" ] ; then
    OUT=$(osc develproject "$1" "$2")
    DEVPRJ="$(dirname "$OUT")"
    PKG="$(basename "$OUT")"
else
    DEVPRJ="$1"
    PKG="$2"
fi

# osc co should not finish with exit 1
osc co -u -c "$DEVPRJ" "$PKG" || /bin/true
cd "$PKG"

# Fork
# Whoami?
LOGIN="$(gitea_cmd "user" | jq -r '.login')"

# 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
    MY_FORK="$(echo $FRK_OUT | jq -r ".[].full_name | select(startswith("$LOGIN/"))")"
else
    MY_FORK=""
fi

# If not, make a fork
if [ -z "$MY_FORK" ] ; then
    FRK_OUT="$(gitea_cmd "repos/pool/$PKG/forks" "-X POST")"
    MY_FORK="$(echo "$FRK_OUT" | jq -r '.full_name')"
fi

# Add ignore
echo '.osc/' >> .git/info/exclude
echo '_scmsync.obsinfo' >> .git/info/exclude

# 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"