https://github.com/git/git
Revision 40f846c35c504a1c2303be5dcca6db069a17b856 authored by Pete Wyckoff on 21 January 2014, 23:16:40 UTC, committed by Junio C Hamano on 22 January 2014, 16:05:04 UTC
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>
1 parent a8d8e38
History
Tip revision: 40f846c35c504a1c2303be5dcca6db069a17b856 authored by Pete Wyckoff on 21 January 2014, 23:16:40 UTC
git p4: work around p4 bug that causes empty symlinks
Tip revision: 40f846c
File Mode Size
Documentation
block-sha1
builtin
compat
contrib
git-gui
gitk-git
gitweb
mergetools
perl
po
ppc
t
templates
vcs-svn
xdiff
.gitattributes -rw-r--r-- 105 bytes
.gitignore -rw-r--r-- 3.5 KB
.mailmap -rw-r--r-- 13.5 KB
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 768 bytes
INSTALL -rw-r--r-- 8.5 KB
LGPL-2.1 -rw-r--r-- 26.2 KB
Makefile -rw-r--r-- 74.9 KB
README -rw-r--r-- 2.6 KB
RelNotes l--------- 30 bytes
abspath.c -rw-r--r-- 5.7 KB
aclocal.m4 -rw-r--r-- 1.4 KB
advice.c -rw-r--r-- 3.3 KB
advice.h -rw-r--r-- 966 bytes
alias.c -rw-r--r-- 1.7 KB
alloc.c -rw-r--r-- 1.6 KB
archive-tar.c -rw-r--r-- 11.0 KB
archive-zip.c -rw-r--r-- 12.1 KB
archive.c -rw-r--r-- 12.0 KB
archive.h -rw-r--r-- 1.3 KB
argv-array.c -rw-r--r-- 1.8 KB
argv-array.h -rw-r--r-- 696 bytes
attr.c -rw-r--r-- 19.2 KB
attr.h -rw-r--r-- 1.6 KB
base85.c -rw-r--r-- 2.8 KB
bisect.c -rw-r--r-- 23.5 KB
bisect.h -rw-r--r-- 644 bytes
blob.c -rw-r--r-- 565 bytes
blob.h -rw-r--r-- 664 bytes
branch.c -rw-r--r-- 8.4 KB
branch.h -rw-r--r-- 1.9 KB
builtin.h -rw-r--r-- 8.5 KB
bulk-checkin.c -rw-r--r-- 7.0 KB
bulk-checkin.h -rw-r--r-- 343 bytes
bundle.c -rw-r--r-- 11.0 KB
bundle.h -rw-r--r-- 707 bytes
cache-tree.c -rw-r--r-- 16.6 KB
cache-tree.h -rw-r--r-- 1.5 KB
cache.h -rw-r--r-- 47.7 KB
check-builtins.sh -rwxr-xr-x 588 bytes
check-racy.c -rw-r--r-- 538 bytes
check_bindir -rwxr-xr-x 369 bytes
color.c -rw-r--r-- 5.2 KB
color.h -rw-r--r-- 3.1 KB
column.c -rw-r--r-- 10.2 KB
column.h -rw-r--r-- 1.4 KB
combine-diff.c -rw-r--r-- 36.2 KB
command-list.txt -rw-r--r-- 8.2 KB
commit-slab.h -rw-r--r-- 2.9 KB
commit.c -rw-r--r-- 38.0 KB
commit.h -rw-r--r-- 9.3 KB
config.c -rw-r--r-- 43.2 KB
config.mak.in -rw-r--r-- 540 bytes
config.mak.uname -rw-r--r-- 15.3 KB
configure.ac -rw-r--r-- 32.1 KB
connect.c -rw-r--r-- 16.4 KB
connect.h -rw-r--r-- 506 bytes
connected.c -rw-r--r-- 2.6 KB
connected.h -rw-r--r-- 818 bytes
convert.c -rw-r--r-- 29.2 KB
convert.h -rw-r--r-- 2.2 KB
copy.c -rw-r--r-- 1.6 KB
credential-cache--daemon.c -rw-r--r-- 5.9 KB
credential-cache.c -rw-r--r-- 2.9 KB
credential-store.c -rw-r--r-- 4.0 KB
credential.c -rw-r--r-- 7.6 KB
credential.h -rw-r--r-- 822 bytes
csum-file.c -rw-r--r-- 4.0 KB
csum-file.h -rw-r--r-- 1.1 KB
ctype.c -rw-r--r-- 2.6 KB
daemon.c -rw-r--r-- 30.5 KB
date.c -rw-r--r-- 25.0 KB
decorate.c -rw-r--r-- 1.8 KB
decorate.h -rw-r--r-- 400 bytes
delta.h -rw-r--r-- 3.4 KB
diff-delta.c -rw-r--r-- 15.4 KB
diff-lib.c -rw-r--r-- 14.0 KB
diff-no-index.c -rw-r--r-- 6.8 KB
diff.c -rw-r--r-- 134.2 KB
diff.h -rw-r--r-- 11.3 KB
diffcore-break.c -rw-r--r-- 8.8 KB
diffcore-delta.c -rw-r--r-- 5.4 KB
diffcore-order.c -rw-r--r-- 2.2 KB
diffcore-pickaxe.c -rw-r--r-- 6.4 KB
diffcore-rename.c -rw-r--r-- 18.6 KB
diffcore.h -rw-r--r-- 4.4 KB
dir.c -rw-r--r-- 39.3 KB
dir.h -rw-r--r-- 6.3 KB
editor.c -rw-r--r-- 1.5 KB
entry.c -rw-r--r-- 7.3 KB
environment.c -rw-r--r-- 7.4 KB
exec_cmd.c -rw-r--r-- 3.2 KB
exec_cmd.h -rw-r--r-- 509 bytes
fast-import.c -rw-r--r-- 87.6 KB
fetch-pack.c -rw-r--r-- 23.2 KB
fetch-pack.h -rw-r--r-- 833 bytes
fmt-merge-msg.h -rw-r--r-- 187 bytes
fsck.c -rw-r--r-- 10.1 KB
fsck.h -rw-r--r-- 1.0 KB
generate-cmdlist.sh -rwxr-xr-x 433 bytes
gettext.c -rw-r--r-- 4.1 KB
gettext.h -rw-r--r-- 1.4 KB
git-add--interactive.perl -rwxr-xr-x 35.9 KB
git-am.sh -rwxr-xr-x 22.5 KB
git-archimport.perl -rwxr-xr-x 36.0 KB
git-bisect.sh -rwxr-xr-x 11.7 KB
git-compat-util.h -rw-r--r-- 18.0 KB
git-cvsexportcommit.perl -rwxr-xr-x 12.6 KB
git-cvsimport.perl -rwxr-xr-x 31.3 KB
git-cvsserver.perl -rwxr-xr-x 158.6 KB
git-difftool--helper.sh -rwxr-xr-x 1.9 KB
git-difftool.perl -rwxr-xr-x 13.3 KB
git-filter-branch.sh -rwxr-xr-x 11.4 KB
git-instaweb.sh -rwxr-xr-x 17.8 KB
git-lost-found.sh -rwxr-xr-x 554 bytes
git-merge-octopus.sh -rwxr-xr-x 2.2 KB
git-merge-one-file.sh -rwxr-xr-x 3.4 KB
git-merge-resolve.sh -rwxr-xr-x 944 bytes
git-mergetool--lib.sh -rw-r--r-- 7.4 KB
git-mergetool.sh -rwxr-xr-x 8.2 KB
git-p4.py -rwxr-xr-x 119.3 KB
git-parse-remote.sh -rw-r--r-- 2.1 KB
git-pull.sh -rwxr-xr-x 8.4 KB
git-quiltimport.sh -rwxr-xr-x 3.3 KB
git-rebase--am.sh -rw-r--r-- 1.4 KB
git-rebase--interactive.sh -rw-r--r-- 26.5 KB
git-rebase--merge.sh -rw-r--r-- 3.0 KB
git-rebase.sh -rwxr-xr-x 14.9 KB
git-relink.perl -rwxr-xr-x 4.0 KB
git-remote-testgit.sh -rwxr-xr-x 2.5 KB
git-request-pull.sh -rwxr-xr-x 3.7 KB
git-send-email.perl -rwxr-xr-x 42.9 KB
git-sh-i18n.sh -rw-r--r-- 2.0 KB
git-sh-setup.sh -rw-r--r-- 8.1 KB
git-stash.sh -rwxr-xr-x 13.1 KB
git-submodule.sh -rwxr-xr-x 31.1 KB
git-svn.perl -rwxr-xr-x 60.0 KB
git-web--browse.sh -rwxr-xr-x 4.3 KB
git.c -rw-r--r-- 17.9 KB
git.rc -rw-r--r-- 574 bytes
git.spec.in -rw-r--r-- 11.1 KB
gpg-interface.c -rw-r--r-- 3.7 KB
gpg-interface.h -rw-r--r-- 721 bytes
graph.c -rw-r--r-- 34.8 KB
graph.h -rw-r--r-- 3.9 KB
grep.c -rw-r--r-- 40.6 KB
grep.h -rw-r--r-- 4.7 KB
hash.c -rw-r--r-- 2.5 KB
hash.h -rw-r--r-- 1.4 KB
help.c -rw-r--r-- 11.1 KB
help.h -rw-r--r-- 1.1 KB
hex.c -rw-r--r-- 2.3 KB
http-backend.c -rw-r--r-- 13.9 KB
http-fetch.c -rw-r--r-- 2.3 KB
http-push.c -rw-r--r-- 50.4 KB
http-walker.c -rw-r--r-- 14.0 KB
http.c -rw-r--r-- 38.4 KB
http.h -rw-r--r-- 5.8 KB
ident.c -rw-r--r-- 10.4 KB
imap-send.c -rw-r--r-- 32.9 KB
kwset.c -rw-r--r-- 20.5 KB
kwset.h -rw-r--r-- 2.6 KB
levenshtein.c -rw-r--r-- 2.5 KB
levenshtein.h -rw-r--r-- 203 bytes
line-log.c -rw-r--r-- 31.2 KB
line-log.h -rw-r--r-- 1.8 KB
line-range.c -rw-r--r-- 6.5 KB
line-range.h -rw-r--r-- 1.3 KB
list-objects.c -rw-r--r-- 6.0 KB
list-objects.h -rw-r--r-- 407 bytes
ll-merge.c -rw-r--r-- 10.2 KB
ll-merge.h -rw-r--r-- 567 bytes
lockfile.c -rw-r--r-- 6.3 KB
log-tree.c -rw-r--r-- 22.1 KB
log-tree.h -rw-r--r-- 1015 bytes
mailmap.c -rw-r--r-- 9.1 KB
mailmap.h -rw-r--r-- 271 bytes
match-trees.c -rw-r--r-- 8.2 KB
merge-blobs.c -rw-r--r-- 2.6 KB
merge-blobs.h -rw-r--r-- 194 bytes
merge-recursive.c -rw-r--r-- 58.1 KB
merge-recursive.h -rw-r--r-- 1.6 KB
merge.c -rw-r--r-- 2.8 KB
mergesort.c -rw-r--r-- 1.5 KB
mergesort.h -rw-r--r-- 574 bytes
name-hash.c -rw-r--r-- 7.6 KB
notes-cache.c -rw-r--r-- 2.2 KB
notes-cache.h -rw-r--r-- 500 bytes
notes-merge.c -rw-r--r-- 22.6 KB
notes-merge.h -rw-r--r-- 2.9 KB
notes-utils.c -rw-r--r-- 4.4 KB
notes-utils.h -rw-r--r-- 1.1 KB
notes.c -rw-r--r-- 36.1 KB
notes.h -rw-r--r-- 11.2 KB
object.c -rw-r--r-- 8.6 KB
object.h -rw-r--r-- 3.7 KB
pack-check.c -rw-r--r-- 5.0 KB
pack-revindex.c -rw-r--r-- 7.0 KB
pack-revindex.h -rw-r--r-- 223 bytes
pack-write.c -rw-r--r-- 10.4 KB
pack.h -rw-r--r-- 3.2 KB
pager.c -rw-r--r-- 3.5 KB
parse-options-cb.c -rw-r--r-- 2.7 KB
parse-options.c -rw-r--r-- 16.9 KB
parse-options.h -rw-r--r-- 9.1 KB
patch-delta.c -rw-r--r-- 2.2 KB
patch-ids.c -rw-r--r-- 2.5 KB
patch-ids.h -rw-r--r-- 490 bytes
path.c -rw-r--r-- 18.1 KB
pathspec.c -rw-r--r-- 13.7 KB
pathspec.h -rw-r--r-- 3.2 KB
pkt-line.c -rw-r--r-- 4.5 KB
pkt-line.h -rw-r--r-- 3.0 KB
preload-index.c -rw-r--r-- 2.4 KB
pretty.c -rw-r--r-- 43.0 KB
prio-queue.c -rw-r--r-- 1.9 KB
prio-queue.h -rw-r--r-- 1.4 KB
progress.c -rw-r--r-- 6.1 KB
progress.h -rw-r--r-- 504 bytes
prompt.c -rw-r--r-- 1.4 KB
prompt.h -rw-r--r-- 207 bytes
quote.c -rw-r--r-- 10.2 KB
quote.h -rw-r--r-- 2.8 KB
reachable.c -rw-r--r-- 6.1 KB
reachable.h -rw-r--r-- 163 bytes
read-cache.c -rw-r--r-- 52.9 KB
reflog-walk.c -rw-r--r-- 8.3 KB
reflog-walk.h -rw-r--r-- 773 bytes
refs.c -rw-r--r-- 92.4 KB
refs.h -rw-r--r-- 8.6 KB
remote-curl.c -rw-r--r-- 23.6 KB
remote-testsvn.c -rw-r--r-- 8.5 KB
remote.c -rw-r--r-- 52.9 KB
remote.h -rw-r--r-- 6.8 KB
replace_object.c -rw-r--r-- 2.7 KB
rerere.c -rw-r--r-- 18.1 KB
rerere.h -rw-r--r-- 800 bytes
resolve-undo.c -rw-r--r-- 4.3 KB
resolve-undo.h -rw-r--r-- 612 bytes
revision.c -rw-r--r-- 86.8 KB
revision.h -rw-r--r-- 7.6 KB
run-command.c -rw-r--r-- 16.7 KB
run-command.h -rw-r--r-- 2.9 KB
send-pack.c -rw-r--r-- 7.8 KB
send-pack.h -rw-r--r-- 403 bytes
sequencer.c -rw-r--r-- 32.2 KB
sequencer.h -rw-r--r-- 1020 bytes
server-info.c -rw-r--r-- 5.1 KB
setup.c -rw-r--r-- 20.9 KB
sh-i18n--envsubst.c -rw-r--r-- 10.7 KB
sha1-array.c -rw-r--r-- 1.2 KB
sha1-array.h -rw-r--r-- 583 bytes
sha1-lookup.c -rw-r--r-- 9.3 KB
sha1-lookup.h -rw-r--r-- 403 bytes
sha1_file.c -rw-r--r-- 78.0 KB
sha1_name.c -rw-r--r-- 35.2 KB
shallow.c -rw-r--r-- 5.2 KB
shell.c -rw-r--r-- 5.2 KB
shortlog.h -rw-r--r-- 463 bytes
show-index.c -rw-r--r-- 2.2 KB
sideband.c -rw-r--r-- 3.4 KB
sideband.h -rw-r--r-- 262 bytes
sigchain.c -rw-r--r-- 969 bytes
sigchain.h -rw-r--r-- 215 bytes
strbuf.c -rw-r--r-- 11.6 KB
strbuf.h -rw-r--r-- 6.1 KB
streaming.c -rw-r--r-- 11.7 KB
streaming.h -rw-r--r-- 504 bytes
string-list.c -rw-r--r-- 7.4 KB
string-list.h -rw-r--r-- 4.9 KB
submodule.c -rw-r--r-- 32.7 KB
submodule.h -rw-r--r-- 1.9 KB
symlinks.c -rw-r--r-- 9.4 KB
tag.c -rw-r--r-- 3.9 KB
tag.h -rw-r--r-- 576 bytes
tar.h -rw-r--r-- 644 bytes
test-chmtime.c -rw-r--r-- 2.6 KB
test-ctype.c -rw-r--r-- 918 bytes
test-date.c -rw-r--r-- 1.4 KB
test-delta.c -rw-r--r-- 1.8 KB
test-dump-cache-tree.c -rw-r--r-- 1.5 KB
test-genrandom.c -rw-r--r-- 722 bytes
test-index-version.c -rw-r--r-- 258 bytes
test-line-buffer.c -rw-r--r-- 2.1 KB
test-match-trees.c -rw-r--r-- 590 bytes
test-mergesort.c -rw-r--r-- 924 bytes
test-mktemp.c -rw-r--r-- 269 bytes
test-parse-options.c -rw-r--r-- 3.5 KB
test-path-utils.c -rw-r--r-- 3.5 KB
test-prio-queue.c -rw-r--r-- 621 bytes
test-read-cache.c -rw-r--r-- 202 bytes
test-regex.c -rw-r--r-- 534 bytes
test-revision-walking.c -rw-r--r-- 1.4 KB
test-run-command.c -rw-r--r-- 840 bytes
test-scrap-cache-tree.c -rw-r--r-- 395 bytes
test-sha1.c -rw-r--r-- 941 bytes
test-sha1.sh -rwxr-xr-x 1.9 KB
test-sigchain.c -rw-r--r-- 344 bytes
test-string-list.c -rw-r--r-- 2.5 KB
test-subprocess.c -rw-r--r-- 401 bytes
test-svn-fe.c -rw-r--r-- 1.3 KB
test-urlmatch-normalization.c -rw-r--r-- 1.2 KB
test-wildmatch.c -rw-r--r-- 2.7 KB
thread-utils.c -rw-r--r-- 1.3 KB
thread-utils.h -rw-r--r-- 209 bytes
trace.c -rw-r--r-- 4.7 KB
transport-helper.c -rw-r--r-- 33.5 KB
transport.c -rw-r--r-- 34.7 KB
transport.h -rw-r--r-- 6.7 KB
tree-diff.c -rw-r--r-- 9.0 KB
tree-walk.c -rw-r--r-- 19.0 KB
tree-walk.h -rw-r--r-- 2.2 KB
tree.c -rw-r--r-- 6.3 KB
tree.h -rw-r--r-- 945 bytes
unimplemented.sh -rw-r--r-- 100 bytes
unix-socket.c -rw-r--r-- 2.4 KB
unix-socket.h -rw-r--r-- 158 bytes
unpack-trees.c -rw-r--r-- 48.2 KB
unpack-trees.h -rw-r--r-- 2.2 KB
upload-pack.c -rw-r--r-- 20.1 KB
url.c -rw-r--r-- 2.8 KB
url.h -rw-r--r-- 492 bytes
urlmatch.c -rw-r--r-- 16.6 KB
urlmatch.h -rw-r--r-- 2.0 KB
usage.c -rw-r--r-- 3.3 KB
userdiff.c -rw-r--r-- 9.2 KB
userdiff.h -rw-r--r-- 646 bytes
utf8.c -rw-r--r-- 16.4 KB
utf8.h -rw-r--r-- 1.4 KB
varint.c -rw-r--r-- 631 bytes
varint.h -rw-r--r-- 198 bytes
version.c -rw-r--r-- 651 bytes
version.h -rw-r--r-- 180 bytes
walker.c -rw-r--r-- 7.2 KB
walker.h -rw-r--r-- 1.1 KB
wildmatch.c -rw-r--r-- 7.8 KB
wildmatch.h -rw-r--r-- 346 bytes
wrap-for-bin.sh -rw-r--r-- 707 bytes
wrapper.c -rw-r--r-- 9.7 KB
write_or_die.c -rw-r--r-- 1.9 KB
ws.c -rw-r--r-- 9.6 KB
wt-status.c -rw-r--r-- 41.7 KB
wt-status.h -rw-r--r-- 2.5 KB
xdiff-interface.c -rw-r--r-- 7.0 KB
xdiff-interface.h -rw-r--r-- 944 bytes
zlib.c -rw-r--r-- 6.1 KB

README

back to top