git-mv: fixes for path handling

Moving a directory ending in a slash was not working as the
destination was not calculated correctly.
E.g. in the git repo,

 git-mv t/ Documentation

gave the error

 Error: destination 'Documentation' already exists

To get rid of this problem, strip trailing slashes from all arguments.
The comment in cg-mv made me curious about this issue; Pasky, thanks!
As result, the workaround in cg-mv is not needed any more.

Also, another bug was shown by cg-mv. When moving files outside of
a subdirectory, it typically calls git-mv with something like

 git-mv Documentation/git.txt Documentation/../git-mv.txt

which triggers the following error from git-update-index:

 Ignoring path Documentation/../git-mv.txt

The result is a moved file, removed from git revisioning, but not
added again. To fix this, the paths have to be normalized not have ".."
in the middle. This was already done in git-mv, but only for
a better visual appearance :(

Signed-off-by: Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
1 file changed
tree: 252aaf76a11eb038821874a30d4292a518ffdb8b
  1. arm/
  2. compat/
  3. Documentation/
  4. mozilla-sha1/
  5. ppc/
  6. t/
  7. templates/
  8. .gitignore
  9. apply.c
  10. blob.c
  11. blob.h
  12. cache.h
  13. cat-file.c
  14. check-ref-format.c
  15. checkout-index.c
  16. clone-pack.c
  17. combine-diff.c
  18. commit-tree.c
  19. commit.c
  20. commit.h
  21. config.c
  22. connect.c
  23. convert-objects.c
  24. copy.c
  25. COPYING
  26. count-delta.c
  27. count-delta.h
  28. csum-file.c
  29. csum-file.h
  30. ctype.c
  31. daemon.c
  32. date.c
  33. delta.h
  34. describe.c
  35. diff-delta.c
  36. diff-files.c
  37. diff-index.c
  38. diff-stages.c
  39. diff-tree.c
  40. diff.c
  41. diff.h
  42. diffcore-break.c
  43. diffcore-order.c
  44. diffcore-pathspec.c
  45. diffcore-pickaxe.c
  46. diffcore-rename.c
  47. diffcore.h
  48. entry.c
  49. environment.c
  50. epoch.c
  51. epoch.h
  52. exec_cmd.c
  53. exec_cmd.h
  54. fetch-clone.c
  55. fetch-pack.c
  56. fetch.c
  57. fetch.h
  58. fsck-objects.c
  59. get-tar-commit-id.c
  60. git-add.sh
  61. git-am.sh
  62. git-applymbox.sh
  63. git-applypatch.sh
  64. git-archimport.perl
  65. git-bisect.sh
  66. git-branch.sh
  67. git-checkout.sh
  68. git-cherry.sh
  69. git-clone.sh
  70. git-commit.sh
  71. git-compat-util.h
  72. git-count-objects.sh
  73. git-cvsexportcommit.perl
  74. git-cvsimport.perl
  75. git-diff.sh
  76. git-fetch.sh
  77. git-fmt-merge-msg.perl
  78. git-format-patch.sh
  79. git-grep.sh
  80. git-log.sh
  81. git-lost-found.sh
  82. git-ls-remote.sh
  83. git-merge-octopus.sh
  84. git-merge-one-file.sh
  85. git-merge-ours.sh
  86. git-merge-recursive.py
  87. git-merge-resolve.sh
  88. git-merge-stupid.sh
  89. git-merge.sh
  90. git-mv.perl
  91. git-parse-remote.sh
  92. git-prune.sh
  93. git-pull.sh
  94. git-push.sh
  95. git-rebase.sh
  96. git-relink.perl
  97. git-repack.sh
  98. git-request-pull.sh
  99. git-rerere.perl
  100. git-reset.sh
  101. git-resolve.sh
  102. git-revert.sh
  103. git-send-email.perl
  104. git-sh-setup.sh
  105. git-shortlog.perl
  106. git-svnimport.perl
  107. git-tag.sh
  108. git-verify-tag.sh
  109. GIT-VERSION-GEN
  110. git-whatchanged.sh
  111. git.c
  112. git.spec.in
  113. gitk
  114. gitMergeCommon.py
  115. hash-object.c
  116. http-fetch.c
  117. http-push.c
  118. http.c
  119. http.h
  120. ident.c
  121. index-pack.c
  122. index.c
  123. init-db.c
  124. INSTALL
  125. local-fetch.c
  126. ls-files.c
  127. ls-tree.c
  128. mailinfo.c
  129. mailsplit.c
  130. Makefile
  131. merge-base.c
  132. merge-index.c
  133. mktag.c
  134. name-rev.c
  135. object.c
  136. object.h
  137. pack-check.c
  138. pack-objects.c
  139. pack-redundant.c
  140. pack.h
  141. patch-delta.c
  142. patch-id.c
  143. path.c
  144. peek-remote.c
  145. pkt-line.c
  146. pkt-line.h
  147. prune-packed.c
  148. quote.c
  149. quote.h
  150. read-cache.c
  151. read-tree.c
  152. README
  153. receive-pack.c
  154. refs.c
  155. refs.h
  156. repo-config.c
  157. rev-list.c
  158. rev-parse.c
  159. rsh.c
  160. rsh.h
  161. run-command.c
  162. run-command.h
  163. send-pack.c
  164. server-info.c
  165. setup.c
  166. sha1_file.c
  167. sha1_name.c
  168. shell.c
  169. show-branch.c
  170. show-index.c
  171. ssh-fetch.c
  172. ssh-pull.c
  173. ssh-push.c
  174. ssh-upload.c
  175. strbuf.c
  176. strbuf.h
  177. stripspace.c
  178. symbolic-ref.c
  179. tag.c
  180. tag.h
  181. tar-tree.c
  182. test-date.c
  183. test-delta.c
  184. tree-diff.c
  185. tree.c
  186. tree.h
  187. unpack-file.c
  188. unpack-objects.c
  189. update-index.c
  190. update-ref.c
  191. update-server-info.c
  192. upload-pack.c
  193. usage.c
  194. var.c
  195. verify-pack.c
  196. write-tree.c