Originally I had a file external which pointed to the same repository but under a different server name. (i.e., under a CNAME rather than under the name I used during checkout.) I then checkout'd (rather: svn up --set-depth'd) with 1.5, which complained about the external being a file external. So I 'svn upgrade'd and ran 'up --set-depth' again. It died with an assertion.
Reproduction recipe attached: [[[ 0:% cat ../repro2.sh #!/bin/sh svn15=/usr/bin/svn svn17=$HOME/src/svn/trunk.d/subversion/svn/svn rm -rf r r2 wc svnadmin create r ln -s r r2 $svn15 mkdir -q file://`pwd`/r/A file://`pwd`/r/B -m "r1" $svn15 co -q file://`pwd`/r wc touch wc/B/iota $svn15 add -q wc/B/iota $svn15 ci -q wc -m "add B/iota" $svn15 ps -q svn:externals "iota file://`pwd`/r2/B/iota" wc/A $svn15 ci -q wc -m "add external on A" rm -rf wc $svn15 co -q --depth=empty file://`pwd`/r wc set -x echo "=== This errors:" $svn15 update --set-depth=infinity wc echo "=== This doesn't error:" $svn17 upgrade wc echo "=== This segfaults:" $svn17 update --set-depth=infinity wc ]]] [[[ 0:% ../repro2.sh + echo === This errors: === This errors: + /usr/bin/svn update --set-depth=infinity wc A wc/A A wc/B A wc/B/iota Fetching external item into 'wc/A/iota' svn: URL 'file:///tmp/daniel/svn/r2/B/iota' refers to a file, not a directory + echo === This doesn't error: === This doesn't error: + /home/daniel/src/svn/trunk.d/subversion/svn/svn upgrade wc Upgraded 'wc'. Upgraded 'wc/A'. Upgraded 'wc/B'. + echo === This segfaults: === This segfaults: + /home/daniel/src/svn/trunk.d/subversion/svn/svn update --set-depth=infinity wc Fetching external item into 'wc/A/iota' subversion/libsvn_subr/sqlite.c:1017: (apr_err=235000) svn: In file 'subversion/libsvn_wc/adm_ops.c' line 2343: assertion failed (external_repos_relpath != NULL) Aborted ]]]