#! /bin/sh # git-svn-deepclone # Copyright (c) 2008 Tejas Dinkar # This file is a part of the KDE project (http://www.kde.org) # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public License # along with this library; see the file COPYING.LIB. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. SVNREPO="$1" FOLDER="$2" DEEPCLONE_LOG=".git/svn/git-svn/deepclone.log" EXCLUDE=".git/info/exclude" NULL="/dev/null" function main() { echo "Fetching Repo $SVNREPO" # Uncomment the if and fi if you want to ignore a folder (internet connection lost) #if [ "$FOLDER" != "kdesupport" ]; then clone_base #fi fetch_external } if [ "$SVNREPO" = "" ]; then echo "Usage $0 SVNREPO "; exit fi if [ "$FOLDER" = "" ]; then FOLDER=`echo $SVNREPO | sed 's,.*/,,'` fi function get_latest_revision() { svn log -l 1 $SVNREPO | grep "^r" | xargs echo | cut -d " " -f 1 | sed 's/r//' } function clone_base() { revision=`get_latest_revision` if [ "$revision" = "" ]; then echo "Unable to Get Revision" exit fi echo "Getting Revision $revision of $SVNREPO" git svn clone "$SVNREPO" "$FOLDER" -r $revision } function fetch_external() { pushd "$FOLDER" > $NULL cat .git/svn/git-svn/unhandled.log | sed 's/%20/ /' | sed 's/%0A//' | grep svn:external | sed 's/svn:externals//' | tr -s " " | sed 's/ +dir_prop: //' > $DEEPCLONE_LOG echo -e "#Lines Below This Added By $0\n" >> $EXCLUDE exec 3<$DEEPCLONE_LOG while read -u 3 path folder repo; do if [ "$repo" = "" ]; then continue fi pushd "$path" > $NULL $0 "$repo" "$folder" popd > $NULL echo "/$path/$folder" | sed 's,/./,/,g' >> $EXCLUDE done popd > $NULL } main