Teach read-tree 2-way merge to ignore intermediate symlinks

Earlier in 16a4c61, we taught "read-tree -m -u" not to be
confused when switching from a branch that has a path frotz/filfre
to another branch that has a symlink frotz that points at xyzzy/
directory.  The fix was incomplete in that it was still confused
when coming back (i.e. switching from a branch with frotz -> xyzzy/
to another branch with frotz/filfre).

This fix is rather expensive in that for a path that is created
we would need to see if any of the leading component of that
path exists as a symbolic link in the filesystem (in which case,
we know that path itself does not exist, and the fact we already
decided to check it out tells us that in the index we already
know that symbolic link is going away as there is no D/F
conflict).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 files changed
tree: 2ca7b64232eb410bd24d679a422263154392bb43
  1. arm/
  2. compat/
  3. contrib/
  4. Documentation/
  5. git-gui/
  6. gitweb/
  7. mozilla-sha1/
  8. perl/
  9. ppc/
  10. t/
  11. templates/
  12. xdiff/
  13. .gitignore
  14. .mailmap
  15. alloc.c
  16. archive-tar.c
  17. archive-zip.c
  18. archive.h
  19. attr.c
  20. attr.h
  21. base85.c
  22. blob.c
  23. blob.h
  24. builtin-add.c
  25. builtin-annotate.c
  26. builtin-apply.c
  27. builtin-archive.c
  28. builtin-blame.c
  29. builtin-branch.c
  30. builtin-bundle.c
  31. builtin-cat-file.c
  32. builtin-check-attr.c
  33. builtin-check-ref-format.c
  34. builtin-checkout-index.c
  35. builtin-commit-tree.c
  36. builtin-config.c
  37. builtin-count-objects.c
  38. builtin-describe.c
  39. builtin-diff-files.c
  40. builtin-diff-index.c
  41. builtin-diff-tree.c
  42. builtin-diff.c
  43. builtin-fetch--tool.c
  44. builtin-fmt-merge-msg.c
  45. builtin-for-each-ref.c
  46. builtin-fsck.c
  47. builtin-gc.c
  48. builtin-grep.c
  49. builtin-init-db.c
  50. builtin-log.c
  51. builtin-ls-files.c
  52. builtin-ls-tree.c
  53. builtin-mailinfo.c
  54. builtin-mailsplit.c
  55. builtin-merge-base.c
  56. builtin-merge-file.c
  57. builtin-mv.c
  58. builtin-name-rev.c
  59. builtin-pack-objects.c
  60. builtin-pack-refs.c
  61. builtin-prune-packed.c
  62. builtin-prune.c
  63. builtin-push.c
  64. builtin-read-tree.c
  65. builtin-reflog.c
  66. builtin-rerere.c
  67. builtin-rev-list.c
  68. builtin-rev-parse.c
  69. builtin-revert.c
  70. builtin-rm.c
  71. builtin-runstatus.c
  72. builtin-shortlog.c
  73. builtin-show-branch.c
  74. builtin-show-ref.c
  75. builtin-stripspace.c
  76. builtin-symbolic-ref.c
  77. builtin-tar-tree.c
  78. builtin-unpack-objects.c
  79. builtin-update-index.c
  80. builtin-update-ref.c
  81. builtin-upload-archive.c
  82. builtin-verify-pack.c
  83. builtin-write-tree.c
  84. builtin.h
  85. cache-tree.c
  86. cache-tree.h
  87. cache.h
  88. check-builtins.sh
  89. check-racy.c
  90. color.c
  91. color.h
  92. combine-diff.c
  93. commit.c
  94. commit.h
  95. config.c
  96. config.mak.in
  97. configure.ac
  98. connect.c
  99. convert-objects.c
  100. convert.c
  101. copy.c
  102. COPYING
  103. csum-file.c
  104. csum-file.h
  105. ctype.c
  106. daemon.c
  107. date.c
  108. decorate.c
  109. decorate.h
  110. delta.h
  111. diff-delta.c
  112. diff-lib.c
  113. diff.c
  114. diff.h
  115. diffcore-break.c
  116. diffcore-delta.c
  117. diffcore-order.c
  118. diffcore-pickaxe.c
  119. diffcore-rename.c
  120. diffcore.h
  121. dir.c
  122. dir.h
  123. dump-cache-tree.c
  124. entry.c
  125. environment.c
  126. exec_cmd.c
  127. exec_cmd.h
  128. fast-import.c
  129. fetch-pack.c
  130. fetch.c
  131. fetch.h
  132. generate-cmdlist.sh
  133. git-add--interactive.perl
  134. git-am.sh
  135. git-applymbox.sh
  136. git-applypatch.sh
  137. git-archimport.perl
  138. git-bisect.sh
  139. git-checkout.sh
  140. git-clean.sh
  141. git-clone.sh
  142. git-commit.sh
  143. git-compat-util.h
  144. git-cvsexportcommit.perl
  145. git-cvsimport.perl
  146. git-cvsserver.perl
  147. git-fetch.sh
  148. git-instaweb.sh
  149. git-lost-found.sh
  150. git-ls-remote.sh
  151. git-merge-octopus.sh
  152. git-merge-one-file.sh
  153. git-merge-ours.sh
  154. git-merge-resolve.sh
  155. git-merge-stupid.sh
  156. git-merge.sh
  157. git-mergetool.sh
  158. git-p4import.py
  159. git-parse-remote.sh
  160. git-pull.sh
  161. git-quiltimport.sh
  162. git-rebase.sh
  163. git-relink.perl
  164. git-remote.perl
  165. git-repack.sh
  166. git-request-pull.sh
  167. git-reset.sh
  168. git-send-email.perl
  169. git-sh-setup.sh
  170. git-svn.perl
  171. git-svnimport.perl
  172. git-tag.sh
  173. git-verify-tag.sh
  174. GIT-VERSION-GEN
  175. git.c
  176. git.spec.in
  177. gitk
  178. grep.c
  179. grep.h
  180. hash-object.c
  181. help.c
  182. http-fetch.c
  183. http-push.c
  184. http.c
  185. http.h
  186. ident.c
  187. imap-send.c
  188. index-pack.c
  189. INSTALL
  190. interpolate.c
  191. interpolate.h
  192. list-objects.c
  193. list-objects.h
  194. local-fetch.c
  195. lockfile.c
  196. log-tree.c
  197. log-tree.h
  198. mailmap.c
  199. mailmap.h
  200. Makefile
  201. match-trees.c
  202. merge-file.c
  203. merge-index.c
  204. merge-recursive.c
  205. merge-tree.c
  206. mktag.c
  207. mktree.c
  208. object-refs.c
  209. object.c
  210. object.h
  211. pack-check.c
  212. pack-redundant.c
  213. pack-write.c
  214. pack.h
  215. pager.c
  216. patch-delta.c
  217. patch-id.c
  218. patch-ids.c
  219. patch-ids.h
  220. path-list.c
  221. path-list.h
  222. path.c
  223. peek-remote.c
  224. pkt-line.c
  225. pkt-line.h
  226. progress.c
  227. progress.h
  228. quote.c
  229. quote.h
  230. reachable.c
  231. reachable.h
  232. read-cache.c
  233. README
  234. receive-pack.c
  235. reflog-walk.c
  236. reflog-walk.h
  237. refs.c
  238. refs.h
  239. revision.c
  240. revision.h
  241. rsh.c
  242. rsh.h
  243. run-command.c
  244. run-command.h
  245. send-pack.c
  246. server-info.c
  247. setup.c
  248. sha1_file.c
  249. sha1_name.c
  250. shallow.c
  251. shell.c
  252. show-index.c
  253. sideband.c
  254. sideband.h
  255. ssh-fetch.c
  256. ssh-pull.c
  257. ssh-push.c
  258. ssh-upload.c
  259. strbuf.c
  260. strbuf.h
  261. symlinks.c
  262. tag.c
  263. tag.h
  264. tar.h
  265. test-chmtime.c
  266. test-date.c
  267. test-delta.c
  268. test-genrandom.c
  269. test-match-trees.c
  270. test-sha1.c
  271. test-sha1.sh
  272. trace.c
  273. tree-diff.c
  274. tree-walk.c
  275. tree-walk.h
  276. tree.c
  277. tree.h
  278. unpack-file.c
  279. unpack-trees.c
  280. unpack-trees.h
  281. update-server-info.c
  282. upload-pack.c
  283. usage.c
  284. utf8.c
  285. utf8.h
  286. var.c
  287. write_or_die.c
  288. wt-status.c
  289. wt-status.h
  290. xdiff-interface.c
  291. xdiff-interface.h