Fix hang when checking for .svn directory.
authorIain Patterson <me@iain.cx>
Mon, 1 Jun 2009 12:23:25 +0000 (13:23 +0100)
committerIain Patterson <me@iain.cx>
Mon, 1 Jun 2009 12:25:39 +0000 (13:25 +0100)
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

index 3ccc627..3f32703 100644 (file)
@@ -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