Merge branch 'tq/git-ssh-command'
[gitweb.git] / builtin / mv.c
index 42a04d2b8b20838da236d96cbffdb0d0b7b4333c..563d05ba1af21c9ae73edceba060161969434c76 100644 (file)
@@ -3,8 +3,8 @@
  *
  * Copyright (C) 2006 Johannes Schindelin
  */
-#include "cache.h"
 #include "builtin.h"
+#include "lockfile.h"
 #include "dir.h"
 #include "cache-tree.h"
 #include "string-list.h"
@@ -171,43 +171,36 @@ 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)
+                               bad = _("source directory is empty");
+                       else { /* last - first >= 1 */
+                               int j, dst_len, n;
 
                                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;
+                               n = argc + last - first;
+                               REALLOC_ARRAY(source, n);
+                               REALLOC_ARRAY(destination, n);
+                               REALLOC_ARRAY(modes, n);
+                               REALLOC_ARRAY(submodule_gitfile, 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 *));
+                               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");
@@ -236,7 +229,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                if (!bad)
                        continue;
                if (!ignore_errors)
-                       die (_("%s, source=%s, destination=%s"),
+                       die(_("%s, source=%s, destination=%s"),
                             bad, src, dst);
                if (--argc > 0) {
                        int n = argc - i;
@@ -260,7 +253,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                        printf(_("Renaming %s to %s\n"), src, dst);
                if (!show_only && mode != INDEX) {
                        if (rename(src, dst) < 0 && !ignore_errors)
-                               die_errno (_("renaming '%s' failed"), src);
+                               die_errno(_("renaming '%s' failed"), src);
                        if (submodule_gitfile[i]) {
                                if (submodule_gitfile[i] != SUBMODULE_WITH_GITDIR)
                                        connect_work_tree_and_git_dir(dst, submodule_gitfile[i]);
@@ -281,10 +274,9 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
        if (gitmodules_modified)
                stage_updated_gitmodules();
 
-       if (active_cache_changed) {
-               if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
-                       die(_("Unable to write new index file"));
-       }
+       if (active_cache_changed &&
+           write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
+               die(_("Unable to write new index file"));
 
        return 0;
 }