From 90d1f7a34af3678ed43d4f9c19551bd86f83fe32 Mon Sep 17 00:00:00 2001 From: Iain Patterson Date: Mon, 1 Jun 2009 13:23:25 +0100 Subject: [PATCH] Fix hang when checking for .svn directory. If the parent directory is not executable __svn_dir() will not be able to change to it and will hang. Prevent this by returning failure if the working directory isn't executable. --- .profile.d/svn-completion.bashrc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.profile.d/svn-completion.bashrc b/.profile.d/svn-completion.bashrc index 3ccc627..3f32703 100644 --- a/.profile.d/svn-completion.bashrc +++ b/.profile.d/svn-completion.bashrc @@ -1,12 +1,20 @@ +# Get UUID for the working copy. function __svn_uuid() { svn info 2>/dev/null | sed -n 's/^Repository UUID: //p' return $? } +# Get SVN toplevel. function __svn_dir() { local last="$1"; shift local uuid=$(__svn_uuid) + # Bomb out if we ended up in an unexecutable directory. + if [ ! -x "$PWD" ]; then + return 1 + fi + + # Return the last directory if we just changed and found a different repo. if [ -n "$last" -a ! "$uuid" = "$last" ]; then echo "$OLDPWD" return 0 @@ -14,6 +22,8 @@ function __svn_dir() { last="$uuid" cd .. + + # Root? if [ "$PWD" = "$OLDPWD" ]; then return 1 fi @@ -22,6 +32,7 @@ function __svn_dir() { return $? } +# Find the URL for the working copy and detect if we are on trunk. function __svn_url() { local url=$(svn info "$1" 2>/dev/null | sed -n 's/^URL: //p') [ $? -gt 0 ] && return 1 -- 2.7.4