]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mv: use flags mode for update_mode
authorShaoxuan Yuan <shaoxuan.yuan02@gmail.com>
Thu, 30 Jun 2022 02:37:36 +0000 (10:37 +0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Jul 2022 21:50:16 +0000 (14:50 -0700)
As suggested by Derrick [1], move the in-line definition of
"enum update_mode" to the top of the file and make it use "flags"
mode (each state is a different bit in the word).

Change the flag assignments from '=' (single assignment) to '|='
(additive). Also change flag evaluation from '==' to '&', etc.

[1] https://lore.kernel.org/git/22aadea2-9330-aa9e-7b6a-834585189144@github.com/

Helped-by: Victoria Dye <vdye@github.com>
Helped-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Shaoxuan Yuan <shaoxuan.yuan02@gmail.com>
Acked-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/mv.c

index 7d9627938a6ebce401ef8cf073cc942aa098a26b..b805a0d0f6e87c8e5ae5308db9d516909f6e242f 100644 (file)
@@ -20,6 +20,13 @@ static const char * const builtin_mv_usage[] = {
        NULL
 };
 
+enum update_mode {
+       BOTH = 0,
+       WORKING_DIRECTORY = (1 << 1),
+       INDEX = (1 << 2),
+       SPARSE = (1 << 3),
+};
+
 #define DUP_BASENAME 1
 #define KEEP_TRAILING_SLASH 2
 
@@ -130,7 +137,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
        const char **source, **destination, **dest_path, **submodule_gitfile;
-       enum update_mode { BOTH = 0, WORKING_DIRECTORY, INDEX, SPARSE } *modes;
+       enum update_mode *modes;
        struct stat st;
        struct string_list src_for_dst = STRING_LIST_INIT_NODUP;
        struct lock_file lock_file = LOCK_INIT;
@@ -192,7 +199,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                        pos = cache_name_pos(src, length);
                        if (pos < 0) {
                                /* only error if existence is expected. */
-                               if (modes[i] != SPARSE)
+                               if (!(modes[i] & SPARSE))
                                        bad = _("bad source");
                                goto act_on_entry;
                        }
@@ -208,14 +215,14 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                        }
                        /* Check if dst exists in index */
                        if (cache_name_pos(dst, strlen(dst)) < 0) {
-                               modes[i] = SPARSE;
+                               modes[i] |= SPARSE;
                                goto act_on_entry;
                        }
                        if (!force) {
                                bad = _("destination exists");
                                goto act_on_entry;
                        }
-                       modes[i] = SPARSE;
+                       modes[i] |= SPARSE;
                        goto act_on_entry;
                }
                if (!strncmp(src, dst, length) &&
@@ -243,7 +250,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                        }
 
                        /* last - first >= 1 */
-                       modes[i] = WORKING_DIRECTORY;
+                       modes[i] |= WORKING_DIRECTORY;
                        n = argc + last - first;
                        REALLOC_ARRAY(source, n);
                        REALLOC_ARRAY(destination, n);
@@ -259,7 +266,8 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                                source[argc + j] = path;
                                destination[argc + j] =
                                        prefix_path(dst, dst_len, path + length + 1);
-                               modes[argc + j] = ce_skip_worktree(ce) ? SPARSE : INDEX;
+                               memset(modes + argc + j, 0, sizeof(enum update_mode));
+                               modes[argc + j] |= ce_skip_worktree(ce) ? SPARSE : INDEX;
                                submodule_gitfile[argc + j] = NULL;
                        }
                        argc += last - first;
@@ -361,7 +369,8 @@ remove_entry:
                        printf(_("Renaming %s to %s\n"), src, dst);
                if (show_only)
                        continue;
-               if (mode != INDEX && mode != SPARSE && rename(src, dst) < 0) {
+               if (!(mode & (INDEX | SPARSE)) &&
+                   rename(src, dst) < 0) {
                        if (ignore_errors)
                                continue;
                        die_errno(_("renaming '%s' failed"), src);
@@ -375,7 +384,7 @@ remove_entry:
                                                              1);
                }
 
-               if (mode == WORKING_DIRECTORY)
+               if (mode & (WORKING_DIRECTORY))
                        continue;
 
                pos = cache_name_pos(src, strlen(src));