Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 builtin/mv.c | 47 +++++++++++++++++++++--------------------------
 1 file changed, 21 insertions(+), 26 deletions(-)

diff --git a/builtin/mv.c b/builtin/mv.c
index dcfcb11..988945c 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -171,42 +171,37 @@ int cmd_mv(int argc, const char **argv, const char 
*prefix)
                                && lstat(dst, &st) == 0)
                        bad = _("cannot move directory over file");
                else if (src_is_dir) {
-                       int first = cache_name_pos(src, length);
+                       int first = cache_name_pos(src, length), last;
                        if (first >= 0)
                                prepare_move_submodule(src, first,
                                                       submodule_gitfile + i);
-                       else {
-                               int last;
-
+                       else if (index_range_of_same_dir(src, length,
+                                                        &first, &last) < 1) {
                                modes[i] = WORKING_DIRECTORY;
-                               index_range_of_same_dir(src, length, &first, 
&last);
                                if (last - first < 1)
                                        bad = _("source directory is empty");
-                               else {
-                                       int j, dst_len, n;
+                       } else { /* last - first >= 1 */
+                               int j, dst_len, n;
 
-                                       n = argc + last - first;
-                                       source = xrealloc(source, n * 
sizeof(char *));
-                                       destination = xrealloc(destination, n * 
sizeof(char *));
-                                       modes = xrealloc(modes, n * sizeof(enum 
update_mode));
-                                       submodule_gitfile =
-                                               xrealloc(submodule_gitfile, n * 
sizeof(char *));
+                               modes[i] = WORKING_DIRECTORY;
+                               n = argc + last - first;
+                               source = xrealloc(source, n * sizeof(char *));
+                               destination = xrealloc(destination, n * 
sizeof(char *));
+                               modes = xrealloc(modes, n * sizeof(enum 
update_mode));
+                               submodule_gitfile = xrealloc(submodule_gitfile, 
n * sizeof(char *));
 
-                                       dst = add_slash(dst);
-                                       dst_len = strlen(dst);
+                               dst = add_slash(dst);
+                               dst_len = strlen(dst);
 
-                                       for (j = 0; j < last - first; j++) {
-                                               const char *path =
-                                                       active_cache[first + 
j]->name;
-                                               source[argc + j] = path;
-                                               destination[argc + j] =
-                                                       prefix_path(dst, 
dst_len,
-                                                               path + length + 
1);
-                                               modes[argc + j] = INDEX;
-                                               submodule_gitfile[argc + j] = 
NULL;
-                                       }
-                                       argc += last - first;
+                               for (j = 0; j < last - first; j++) {
+                                       const char *path = active_cache[first + 
j]->name;
+                                       source[argc + j] = path;
+                                       destination[argc + j] =
+                                               prefix_path(dst, dst_len, path 
+ length + 1);
+                                       modes[argc + j] = INDEX;
+                                       submodule_gitfile[argc + j] = NULL;
                                }
+                               argc += last - first;
                        }
                } else if (cache_name_pos(src, length) < 0)
                        bad = _("not under version control");
-- 
2.1.0.rc0.78.gc0d8480

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to