]> git.ipfire.org Git - thirdparty/git.git/commitdiff
setup: stop using `the_repository` in `prefix_path()`
authorPatrick Steinhardt <ps@pks.im>
Tue, 19 May 2026 09:52:08 +0000 (11:52 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 19 May 2026 10:36:24 +0000 (19:36 +0900)
Stop using `the_repository` in `prefix_path()` and instead accept the
repository as a parameter. The injection of `the_repository` is thus
bumped one level higher, where callers now pass it in explicitly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 files changed:
builtin/blame.c
builtin/check-attr.c
builtin/checkout-index.c
builtin/mv.c
builtin/sparse-checkout.c
builtin/update-index.c
line-log.c
object-name.c
pathspec.c
setup.c
setup.h
t/helper/test-path-utils.c

index f3a11eff44ffc7b2e6972811564590677849bc0c..ffbd3ce5c5a2e39a6140baf7db2129baf38cc4d9 100644 (file)
@@ -708,7 +708,7 @@ static unsigned parse_score(const char *arg)
 
 static char *add_prefix(const char *prefix, const char *path)
 {
-       return prefix_path(prefix, prefix ? strlen(prefix) : 0, path);
+       return prefix_path(the_repository, prefix, prefix ? strlen(prefix) : 0, path);
 }
 
 static int git_blame_config(const char *var, const char *value,
index 51ed48ce4370c3d3c22a936fe4d02e058f9b58f8..04b86e42ae66ca544ef45a486986f4081d5132f1 100644 (file)
@@ -67,7 +67,7 @@ static void check_attr(const char *prefix, struct attr_check *check,
 
 {
        char *full_path =
-               prefix_path(prefix, prefix ? strlen(prefix) : 0, file);
+               prefix_path(the_repository, prefix, prefix ? strlen(prefix) : 0, file);
 
        if (collect_all) {
                git_all_attrs(the_repository->index, full_path, check);
index 188128aebd9bc04d21cc309660012c99b97f6e1c..311b94ff3174a6713cd12f89d7eb8a68adf8b589 100644 (file)
@@ -303,7 +303,7 @@ int cmd_checkout_index(int argc,
                        die("git checkout-index: don't mix '--all' and explicit filenames");
                if (read_from_stdin)
                        die("git checkout-index: don't mix '--stdin' and explicit filenames");
-               p = prefix_path(prefix, prefix_length, arg);
+               p = prefix_path(repo, prefix, prefix_length, arg);
                err |= checkout_file(repo->index, p, prefix);
                free(p);
        }
@@ -325,7 +325,7 @@ int cmd_checkout_index(int argc,
                                        die("line is badly quoted");
                                strbuf_swap(&buf, &unquoted);
                        }
-                       p = prefix_path(prefix, prefix_length, buf.buf);
+                       p = prefix_path(repo, prefix, prefix_length, buf.buf);
                        err |= checkout_file(repo->index, p, prefix);
                        free(p);
                }
index 2215d34e31f29af260b0d9743778604dda6e0620..948b3306390337055da2d987104c4dcd7421a31a 100644 (file)
@@ -71,7 +71,7 @@ static void internal_prefix_pathspec(struct strvec *out,
 
                trimmed = xmemdupz(pathspec[i], to_copy);
                maybe_basename = (flags & DUP_BASENAME) ? basename(trimmed) : trimmed;
-               prefixed_path = prefix_path(prefix, prefixlen, maybe_basename);
+               prefixed_path = prefix_path(the_repository, prefix, prefixlen, maybe_basename);
                strvec_push(out, prefixed_path);
 
                free(prefixed_path);
@@ -394,7 +394,8 @@ dir_check:
                        for (j = 0; j < last - first; j++) {
                                const struct cache_entry *ce = the_repository->index->cache[first + j];
                                const char *path = ce->name;
-                               char *prefixed_path = prefix_path(dst_with_slash, dst_with_slash_len, path + length + 1);
+                               char *prefixed_path = prefix_path(the_repository, dst_with_slash,
+                                                                 dst_with_slash_len, path + length + 1);
 
                                strvec_push(&sources, path);
                                strvec_push(&destinations, prefixed_path);
index f4aa405da9376098079715d55371ee2f70a3c50a..2af50fb2f9cb22563a1ea57db254a9ebf80d407b 100644 (file)
@@ -735,7 +735,8 @@ static void sanitize_paths(struct repository *repo,
                int prefix_len = strlen(prefix);
 
                for (i = 0; i < args->nr; i++) {
-                       char *prefixed_path = prefix_path(prefix, prefix_len, args->v[i]);
+                       char *prefixed_path = prefix_path(the_repository, prefix,
+                                                         prefix_len, args->v[i]);
                        strvec_replace(args, i, prefixed_path);
                        free(prefixed_path);
                }
index 8a5907767bf297eefcb0c6de5441cabd567536fd..7434112b8e69b0df64ba156f381bd4f16ab22915 100644 (file)
@@ -655,7 +655,7 @@ static int do_unresolve(int ac, const char **av,
 
        for (i = 1; i < ac; i++) {
                const char *arg = av[i];
-               char *p = prefix_path(prefix, prefix_length, arg);
+               char *p = prefix_path(the_repository, prefix, prefix_length, arg);
                err |= unresolve_one(p);
                free(p);
        }
@@ -1158,7 +1158,7 @@ int cmd_update_index(int argc,
                        }
 
                        setup_work_tree();
-                       p = prefix_path(prefix, prefix_length, path);
+                       p = prefix_path(the_repository, prefix, prefix_length, path);
                        update_one(p);
                        if (set_executable_bit)
                                chmod_path(set_executable_bit, p);
@@ -1208,7 +1208,7 @@ int cmd_update_index(int argc,
                                        die("line is badly quoted");
                                strbuf_swap(&buf, &unquoted);
                        }
-                       p = prefix_path(prefix, prefix_length, buf.buf);
+                       p = prefix_path(the_repository, prefix, prefix_length, buf.buf);
                        update_one(p);
                        if (set_executable_bit)
                                chmod_path(set_executable_bit, p);
index 858a899cd2a61db85532196ffcdf3b71336051eb..346c60c554b278799e883745aa4cdb58af730288 100644 (file)
@@ -589,7 +589,7 @@ parse_lines(struct repository *r, struct commit *commit,
                range_part = xstrndup(item->string, name_part - item->string);
                name_part++;
 
-               full_name = prefix_path(prefix, prefix ? strlen(prefix) : 0,
+               full_name = prefix_path(r, prefix, prefix ? strlen(prefix) : 0,
                                        name_part);
 
                spec = alloc_filespec(full_name);
index 37a9ce8e872572b073f08d5e1085d0b96f0cd41a..9ac86f19c77bbdf9873872b00cf72cdc13220022 100644 (file)
@@ -1707,7 +1707,7 @@ static char *resolve_relative_path(struct repository *r, const char *rel)
                die(_("relative path syntax can't be used outside working tree"));
 
        /* die() inside prefix_path() if resolved path is outside worktree */
-       return prefix_path(startup_info->prefix,
+       return prefix_path(the_repository, startup_info->prefix,
                           startup_info->prefix ? strlen(startup_info->prefix) : 0,
                           rel);
 }
index 5993c4afa0eb37f000414f23f4d9d25addd01d85..f78b22709ccb673873d636b1b08f412c18a5f435 100644 (file)
@@ -486,7 +486,7 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags,
                match = xstrdup(copyfrom);
                prefixlen = 0;
        } else {
-               match = prefix_path_gently(prefix, prefixlen,
+               match = prefix_path_gently(the_repository, prefix, prefixlen,
                                           &prefixlen, copyfrom);
                if (!match) {
                        const char *hint_path;
diff --git a/setup.c b/setup.c
index 041e08b98ddf89ebe60b97a2aa4181f0fcc50f6c..adad6ceec0cfa740640e45d3e55d8bb893a36aa1 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -117,7 +117,8 @@ static int abspath_part_inside_repo(struct repository *repo, char *path)
  *  ../../sub1/sub2/foo -> sub1/sub2/foo (but no remaining prefix)
  *  `pwd`/../bar -> sub1/bar       (no remaining prefix)
  */
-char *prefix_path_gently(const char *prefix, int len,
+char *prefix_path_gently(struct repository *repo,
+                        const char *prefix, int len,
                         int *remaining_prefix, const char *path)
 {
        const char *orig = path;
@@ -130,7 +131,7 @@ char *prefix_path_gently(const char *prefix, int len,
                        free(sanitized);
                        return NULL;
                }
-               if (abspath_part_inside_repo(the_repository, sanitized)) {
+               if (abspath_part_inside_repo(repo, sanitized)) {
                        free(sanitized);
                        return NULL;
                }
@@ -146,13 +147,13 @@ char *prefix_path_gently(const char *prefix, int len,
        return sanitized;
 }
 
-char *prefix_path(const char *prefix, int len, const char *path)
+char *prefix_path(struct repository *repo, const char *prefix, int len, const char *path)
 {
-       char *r = prefix_path_gently(prefix, len, NULL, path);
+       char *r = prefix_path_gently(repo, prefix, len, NULL, path);
        if (!r) {
-               const char *hint_path = repo_get_work_tree(the_repository);
+               const char *hint_path = repo_get_work_tree(repo);
                if (!hint_path)
-                       hint_path = repo_get_git_dir(the_repository);
+                       hint_path = repo_get_git_dir(repo);
                die(_("'%s' is outside repository at '%s'"), path,
                    absolute_path(hint_path));
        }
@@ -162,7 +163,7 @@ char *prefix_path(const char *prefix, int len, const char *path)
 int path_inside_repo(const char *prefix, const char *path)
 {
        int len = prefix ? strlen(prefix) : 0;
-       char *r = prefix_path_gently(prefix, len, NULL, path);
+       char *r = prefix_path_gently(the_repository, prefix, len, NULL, path);
        if (r) {
                free(r);
                return 1;
diff --git a/setup.h b/setup.h
index 71d3f918837873f58a02945e86c6b3eb490c31fc..24034572b150c7e2c164024c0a3385dbcd4a2201 100644 (file)
--- a/setup.h
+++ b/setup.h
@@ -138,8 +138,8 @@ const char *enter_repo(const char *path, unsigned flags);
 
 const char *setup_git_directory_gently(int *);
 const char *setup_git_directory(void);
-char *prefix_path(const char *prefix, int len, const char *path);
-char *prefix_path_gently(const char *prefix, int len, int *remaining, const char *path);
+char *prefix_path(struct repository *repo, const char *prefix, int len, const char *path);
+char *prefix_path_gently(struct repository *repo, const char *prefix, int len, int *remaining, const char *path);
 
 int check_filename(const char *prefix, const char *name);
 void verify_filename(const char *prefix,
index 874542ec3462a5c4396da05c764d8b409f737ac9..163fdeefb0f7d9ca760f440922fc2daffb3a8e09 100644 (file)
@@ -379,7 +379,7 @@ int cmd__path_utils(int argc, const char **argv)
                int nongit_ok;
                setup_git_directory_gently(&nongit_ok);
                while (argc > 3) {
-                       char *pfx = prefix_path(prefix, prefix_len, argv[3]);
+                       char *pfx = prefix_path(the_repository, prefix, prefix_len, argv[3]);
 
                        puts(pfx);
                        free(pfx);