#!/bin/bash # # svnexternals.sh - helper app for managing svn:externals properties # Copyright (C) 2010 Clifford Wolf # # 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; either version 2 of the License, or # (at your option) any later version. tmpfile=$( mktemp $PWD/.svnexternals.XXXXXXXXXX; ) trap 'rm -f "$tmpfile"' 0 freeze() { svn pg svn:externals . | grep . | while read line; do dir="" read a b c < <( echo "$line"; ) [ -d "$a" ] && dir="$a" [ -d "$b" ] && dir="$b" [ -d "$c" ] && dir="$c" if [ "$dir" ]; then rev=$( svnversion -c $dir | sed 's,.*:,,; s,[^0-9].*,,;'; ) url=$( svn info $dir | grep '^URL: ' | cut -f2- -d' '; ) echo "$dir -r$rev $url" else echo "$line" fi done > $tmpfile if [ -s $tmpfile ]; then svn ps svn:externals "$PWD" -F $tmpfile else svn pd --quiet svn:externals . fi } unfreeze() { svn pg svn:externals . | grep . | while read line; do dir="" read a b c < <( echo "$line"; ) [ -d "$a" ] && dir="$a" [ -d "$b" ] && dir="$b" [ -d "$c" ] && dir="$c" if [ "$dir" ]; then url=$( svn info $dir | grep '^URL: ' | cut -f2- -d' '; ) echo "$dir $url" else echo "$line" fi done > $tmpfile if [ -s $tmpfile ]; then svn ps svn:externals "$PWD" -F $tmpfile else svn pd --quiet svn:externals . fi } recursive=false if [ "$1" = "-r" ]; then recursive=true shift fi case "$1" in freeze|unfreeze|update) cmd="$1"; shift if $recursive; then [ $# = 0 ] && set -- . set -- "$@" $( svn ls -R "$@" | grep '/$'; ) fi if [ $cmd = update ]; then if [ $# = 0 ]; then unfreeze; svn up; freeze else for d; do ( cd "$d"; unfreeze; ); done svn up "$@" for d; do ( cd "$d"; freeze; ); done fi else if [ $# = 0 ]; then $cmd else for d; do ( cd "$d"; $cmd; ); done fi fi ;; *) echo "Usage: $0 [-r] { freeze | unfreeze | update }" >&2 exit 1 ;; esac exit 0