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

diff --git a/builtin/mv.c b/builtin/mv.c
index a45226e..f8d65e2 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -83,6 +83,29 @@ static void prepare_move_submodule(const char *src, int 
first,
        strbuf_release(&submodule_dotgit);
 }
 
+static int index_range_of_same_dir(const char *src, int length,
+                                  int *first_p, int *last_p)
+{
+       const char *src_w_slash = add_slash(src);
+       int first, last, len_w_slash = length + 1;
+
+       first = cache_name_pos(src_w_slash, len_w_slash);
+       if (first >= 0)
+               die (_("%.*s is in index"), len_w_slash, src_w_slash);
+
+       first = -1 - first;
+       for (last = first; last < active_nr; last++) {
+               const char *path = active_cache[last]->name;
+               if (strncmp(path, src_w_slash, len_w_slash))
+                       break;
+       }
+       if (src_w_slash != src)
+               free((char *)src_w_slash);
+       *first_p = first;
+       *last_p = last;
+       return last - first;
+}
+
 int cmd_mv(int argc, const char **argv, const char *prefix)
 {
        int i, gitmodules_modified = 0;
@@ -158,24 +181,10 @@ int cmd_mv(int argc, const char **argv, const char 
*prefix)
                                prepare_move_submodule(src, first,
                                                       submodule_gitfile + i);
                        else {
-                               const char *src_w_slash = add_slash(src);
-                               int last, len_w_slash = length + 1;
+                               int last;
 
                                modes[i] = WORKING_DIRECTORY;
-
-                               first = cache_name_pos(src_w_slash, 
len_w_slash);
-                               if (first >= 0)
-                                       die (_("%.*s is in index"), 
len_w_slash, src_w_slash);
-
-                               first = -1 - first;
-                               for (last = first; last < active_nr; last++) {
-                                       const char *path = 
active_cache[last]->name;
-                                       if (strncmp(path, src_w_slash, 
len_w_slash))
-                                               break;
-                               }
-                               if (src_w_slash != src)
-                                       free((char *)src_w_slash);
-
+                               index_range_of_same_dir(src, length, &first, 
&last);
                                if (last - first < 1)
                                        bad = _("source directory is empty");
                                else {
-- 
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