aboutsummaryrefslogblamecommitdiffstats
path: root/git-devproj.sh
blob: 2565e24bb97092b1e23119eb4e0b89787fb1f629 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
         
                                    
       
 





                                                               
 


                  

 

                     



                                                
                                         


                                       
                              

                            
               


            








                                             
 


                                                           
 





                                                                                            
 

                                        
  
 

                                                                                                                     
 









                                                
 

                                                                       
#!/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