git p4: work around p4 bug that causes empty symlinks
commit40f846c35c504a1c2303be5dcca6db069a17b856
authorPete Wyckoff <pw@padd.com>
Tue, 21 Jan 2014 23:16:40 +0000 (21 18:16 -0500)
committerJunio C Hamano <gitster@pobox.com>
Wed, 22 Jan 2014 16:05:04 +0000 (22 08:05 -0800)
tree7aae4e9a4e0a3065d0de1254d946246edc3fa234
parenta8d8e382a95b8412b105ca12fcdad2dff521827f
git p4: work around p4 bug that causes empty symlinks

Damien Gérard highlights an interesting problem.  Some p4
repositories end up with symlinks that have an empty target.  It
is not possible to create this with current p4, but they do
indeed exist.

The effect in git p4 is that "p4 print" on the symlink returns an
empty string, confusing the curret symlink-handling code.

Such broken repositories cause problems in p4 as well, even with
no git involved.  In p4, syncing to a change that includes a
bogus symlink causes errors:

    //depot/empty-symlink - updating /home/me/p4/empty-symlink
    rename: /home/me/p4/empty-symlink: No such file or directory

and leaves no symlink.

In git, replicate the p4 behavior by ignoring these bad symlinks.
If, in a later p4 revision, the symlink happens to point to
something non-null, the symlink will be replaced properly.

Add a big test for all this too.

This happens to be a regression introduced by 1292df1 (git-p4:
Fix occasional truncation of symlink contents., 2013-08-08) and
appeared first in 1.8.5.  But it shows up only in p4 repositories
of dubious character, so can wait for a proper release.

Tested-by: Damien Gérard <damien@iwi.me>
Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-p4.py
t/t9802-git-p4-filetype.sh