summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/commit.c2
-rw-r--r--builtin/ls-files.c2
-rw-r--r--cache.h1
-rw-r--r--dir.c13
-rw-r--r--dir.h2
-rw-r--r--setup.c7
6 files changed, 15 insertions, 12 deletions
diff --git a/builtin/commit.c b/builtin/commit.c
index 50bacd68e2..1e8e0acb53 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -257,7 +257,7 @@ static int list_paths(struct string_list *list, const char *with_tree,
m = xcalloc(1, i);
if (with_tree) {
- char *max_prefix = pathspec_prefix(pattern);
+ char *max_prefix = common_prefix(pattern);
overlay_tree_on_cache(with_tree, max_prefix ? max_prefix : prefix);
free(max_prefix);
}
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 19e53cc881..0956bb51b9 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -541,7 +541,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
strip_trailing_slash_from_submodules();
/* Find common prefix for all pathspec's */
- max_prefix = pathspec_prefix(pathspec);
+ max_prefix = common_prefix(pathspec);
max_prefix_len = max_prefix ? strlen(max_prefix) : 0;
/* Treat unmatching pathspec elements as errors */
diff --git a/cache.h b/cache.h
index a3462bafce..e11cf6ab1c 100644
--- a/cache.h
+++ b/cache.h
@@ -426,7 +426,6 @@ extern void set_git_work_tree(const char *tree);
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
extern const char **get_pathspec(const char *prefix, const char **pathspec);
-extern char *pathspec_prefix(const char **pathspec);
extern void setup_work_tree(void);
extern const char *setup_git_directory_gently(int *);
extern const char *setup_git_directory(void);
diff --git a/dir.c b/dir.c
index 7bc75c9448..6c0d782579 100644
--- a/dir.c
+++ b/dir.c
@@ -34,7 +34,7 @@ int fnmatch_icase(const char *pattern, const char *string, int flags)
return fnmatch(pattern, string, flags | (ignore_case ? FNM_CASEFOLD : 0));
}
-size_t common_prefix_len(const char **pathspec)
+static size_t common_prefix_len(const char **pathspec)
{
const char *n, *first;
size_t max = 0;
@@ -61,6 +61,17 @@ size_t common_prefix_len(const char **pathspec)
return max;
}
+/*
+ * Returns a copy of the longest leading path common among all
+ * pathspecs.
+ */
+char *common_prefix(const char **pathspec)
+{
+ unsigned long len = common_prefix_len(pathspec);
+
+ return len ? xmemdupz(*pathspec, len) : NULL;
+}
+
int fill_directory(struct dir_struct *dir, const char **pathspec)
{
const char *path;
diff --git a/dir.h b/dir.h
index 467d197984..dd6947e1d4 100644
--- a/dir.h
+++ b/dir.h
@@ -64,7 +64,7 @@ struct dir_struct {
#define MATCHED_RECURSIVELY 1
#define MATCHED_FNMATCH 2
#define MATCHED_EXACTLY 3
-extern size_t common_prefix_len(const char **pathspec);
+extern char *common_prefix(const char **pathspec);
extern int match_pathspec(const char **pathspec, const char *name, int namelen, int prefix, char *seen);
extern int match_pathspec_depth(const struct pathspec *pathspec,
const char *name, int namelen,
diff --git a/setup.c b/setup.c
index 70b887fe68..ce87900ce3 100644
--- a/setup.c
+++ b/setup.c
@@ -264,13 +264,6 @@ const char **get_pathspec(const char *prefix, const char **pathspec)
return pathspec;
}
-char *pathspec_prefix(const char **pathspec)
-{
- size_t len = common_prefix_len(pathspec);
-
- return len ? xmemdupz(*pathspec, len) : NULL;
-}
-
/*
* Test if it looks like we're at a git directory.
* We want to see: