aboutsummaryrefslogblamecommitdiffstats
path: root/git-obranch
blob: 2a2d3675dfe324841d0297eadb675b23b08298c3 (plain) (tree)
1
2
3
4
5
6
7
8
9
           
                                    
        
 
                                                                       
 
              
                     
                                      
                                                                               
                                                                 


                                                            

                        








                                       

                       
 







                                                                              
         
                                            

                                       
                                              
                                                                                     

                         

                                                                                            

              



                           

                                                            

  





                                                                      


                                            

                                                                       
 





                                                      


                                                         
                                                        
                                                                                     

                                                        
#!/bin/bash
# Requires: coreutils, curl, jq, git
set -uex

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

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
}

[ "$#" -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 "$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="$(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
    # shellcheck disable=SC2086
    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

# 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

# # 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 "/<\/description>/a\ \ <scmsync>$(git remote get-url myproj)<\/scmsync>" \
        "$OSC_META" | osc meta pkg "$DEVPRJ" "$PKG" -F -
fi