diff options
Diffstat (limited to 'builtin/mv.c')
-rw-r--r-- | builtin/mv.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/builtin/mv.c b/builtin/mv.c index 3b19ca26b2..42a04d2b8b 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -78,6 +78,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; @@ -154,25 +177,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 (_("Huh? %.*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 { |