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





                                                               
 


                  

 

                     

                                    



                                                   

                                                
                                         


                                       
                              

                            
               


            

                            
                         





                                             
 


                                                           
 








                                                                      

                                                                    
 

                                        
  
 

                                                                                                                     
 









                                                
 

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