git-svn: better attempt to handle broken symlink updates
commitbaf5fa8a7fdefc696fb1d79c95ae15a4cc779c1e
authorEric Wong <normalperson@yhbt.net>
Mon, 12 Jan 2009 00:51:11 +0000 (11 16:51 -0800)
committerEric Wong <normalperson@yhbt.net>
Sun, 18 Jan 2009 23:38:28 +0000 (18 15:38 -0800)
treeca0b0c411bc9859e95649d15019f8588396935a5
parentdbc6c74d0858d77e61e092a48d467e725211f8e9
git-svn: better attempt to handle broken symlink updates

This is a followup to 7fc35e0e94782bbbefb920875813519038659930,
(workaround a for broken symlinks in SVN).

Since broken SVN clients can commit svn:special files without
the magic "link " prefix, this can affect delta application
when we update the broken svn:special file.  So now we fall
back and retry the delta application on symlinks if having
a "link " prefix fails.

Our behavior differs from svn(1) (v1.5.1) slightly:

  When a svn:special file is created w/o a "link " prefix, svn
  will create a regular file (mode 100644 to git) with the
  contents of the blob as-is.

  Our behavior is to continue creating the symlink (mode 120000
  to git) with the contents of the blob as-is.  While this
  differs from current svn(1) behavior, this is easier and more
  efficient to implement (and the correctness of the svn(1) is
  debatable, since it's a workaround for a bug in the first
  place).

More information on this SVN bug is described here:
  http://subversion.tigris.org/issues/show_bug.cgi?id=2692

Signed-off-by: Eric Wong <normalperson@yhbt.net>
git-svn.perl
t/t9132-git-svn-broken-symlink.sh [new file with mode: 0755]