|
|
#!/bin/sh # --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: bin/sde-update-tree # Copyright (C) 2007 - 2008 The OpenSDE Project # # More information can be found in the files COPYING and README. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. A copy of the # GNU General Public License can be found in the file COPYING. # --- SDE-COPYRIGHT-NOTE-END ---
#Description: Updates the entire working tree
[ -n "$SDEROOT" ] || export SDEROOT=$( cd "${0%/*}/.."; pwd -P )
. $SDEROOT/lib/libsde.in
update_usage() { local progname=${0##*/} cat <<-EOT Usage: ${progname//-/ } EOT }
shortopts= longopts='help' options=$( getopt -o "$shortopts" -l "$longopts" -- "$@" ) if [ $? -ne 0 ]; then update_usage exit -1 fi
# load new arguments list eval set -- "$options"
GITSERVER="git://git.opensde.net"
while [ $# -gt 0 ]; do case "$1" in --help) update_usage exit 0 ;;
--) shift; break ;; *) echo_abort 1 "Unknown argument '$1', aborting." esac shift done
indent_output() { sed -e '/^$/d;' -e 's/^/ /' }
# jump to the working tree's root # cd "$SDEROOT"
tree="${SDEROOT##*/}"
update_git() { local branch=$( git symbolic-ref -q HEAD | sed -e 's|^refs/heads/||' ) local remote=$( git config branch.$branch.remote ) local remote_list=$( git remote ) local remote_branch= remote_branch_list=
if [ -z "$remote_list" ]; then echo "no remotes set" return 0 elif [ -n "$remote" -a -z "$( echo "$remote_list" | grep "^$remote\$" )" ]; then echo "$remote: what?! remote is gone!" return 1 elif [ -z "$remote" ]; then # uhm, get a good remote if [ "$( echo "$remote_list" | grep "^origin$" )" ]; then remote=origin else remote="$( echo "$remote_list" | head -n 1 )" fi
# and it's list of branches remote_branch_list=$( git branch -r | sed -n -e "s|^ $remote/||p" | grep -v '^HEAD$' )
if [ -z "$remote_branch_list" ]; then echo "no remote set, and couldn't guess". return 1 elif [ "$( echo "$remote_branch_list" | grep "^$branch$" )" ]; then remote_branch="$branch" elif [ "$( echo "$remote_branch_list" | grep "^master$" )" ]; then remote_branch=master else remote_branch="$( echo "$remote_branch_list" | head -n 1 )" fi echo "no remote set, assuming $remote/$remote_branch." git config branch.$branch.remote "$remote" git config branch.$branch.merge "refs/heads/$remote_branch" fi
git reset && git pull --rebase }
# hunt for the roots of the sub-working trees # for x in . package $( ls -1d package/* target/* 2> /dev/null ); do if [ ! -d "$x" ]; then case "$x" in package) echo "$tree/$x:" ( git clone --quiet \ "$GITSERVER/opensde/$x-nopast.git" "$x" 2>&1 && echo "$x: cloned successfully" ) | indent_output ;; *) echo "$tree/$x: missing" >&2 ;; esac elif [ -d "$x/.git" ]; then cd "$x"; echo "$tree/$x:" update_git 2>&1 | indent_output cd - > /dev/null elif [ -d "$x/.svn" ]; then cd "$x"; echo "$tree/$x:" svn up 2>&1 | indent_output cd - > /dev/null fi done
|