diff options
| -rw-r--r-- | builtin/mv.c | 9 | ||||
| -rwxr-xr-x | t/t7001-mv.sh | 13 | 
2 files changed, 21 insertions, 1 deletions
| diff --git a/builtin/mv.c b/builtin/mv.c index 21c46d1636..45e57f307b 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -179,6 +179,9 @@ int cmd_mv(int argc, const char **argv, const char *prefix)  						modes = xrealloc(modes,  								(argc + last - first)  								* sizeof(enum update_mode)); +						submodule_gitfile = xrealloc(submodule_gitfile, +								(argc + last - first) +								* sizeof(char *));  					}  					dst = add_slash(dst); @@ -192,6 +195,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)  							prefix_path(dst, dst_len,  								path + length + 1);  						modes[argc + j] = INDEX; +						submodule_gitfile[argc + j] = NULL;  					}  					argc += last - first;  				} @@ -227,6 +231,11 @@ int cmd_mv(int argc, const char **argv, const char *prefix)  					memmove(destination + i,  						destination + i + 1,  						(argc - i) * sizeof(char *)); +					memmove(modes + i, modes + i + 1, +						(argc - i) * sizeof(enum update_mode)); +					memmove(submodule_gitfile + i, +						submodule_gitfile + i + 1, +						(argc - i) * sizeof(char *));  					i--;  				}  			} else diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh index e3c8c2c1b8..215d43d6a6 100755 --- a/t/t7001-mv.sh +++ b/t/t7001-mv.sh @@ -294,7 +294,8 @@ test_expect_success 'setup submodule' '  	git submodule add ./. sub &&  	echo content >file &&  	git add file && -	git commit -m "added sub and file" +	git commit -m "added sub and file" && +	git branch submodule  '  test_expect_success 'git mv cannot move a submodule in a file' ' @@ -463,4 +464,14 @@ test_expect_success 'checking out a commit before submodule moved needs manual u  	! test -s actual  ' +test_expect_success 'mv -k does not accidentally destroy submodules' ' +	git checkout submodule && +	mkdir dummy dest && +	git mv -k dummy sub dest && +	git status --porcelain >actual && +	grep "^R  sub -> dest/sub" actual && +	git reset --hard && +	git checkout . +' +  test_done | 
