summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-08-11 18:04:28 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-08-11 18:04:28 (GMT)
commit0af53e188a3a8915f65c3b3edaeed3e07d8d3802 (patch)
treebcce70ab66b456b001140964f5c89e5b5888a35c /builtin
parentb81b758d5001c4ebab1a5b8202bb1b0f4cdf3391 (diff)
parent8894d5358095a08c2f700a87ce9fdefb0b6eb61b (diff)
downloadgit-0af53e188a3a8915f65c3b3edaeed3e07d8d3802.zip
git-0af53e188a3a8915f65c3b3edaeed3e07d8d3802.tar.gz
git-0af53e188a3a8915f65c3b3edaeed3e07d8d3802.tar.bz2
Merge branch 'cb/partial-commit-relative-pathspec'
* cb/partial-commit-relative-pathspec: commit: allow partial commits with relative paths
Diffstat (limited to 'builtin')
-rw-r--r--builtin/commit.c6
-rw-r--r--builtin/ls-files.c38
2 files changed, 6 insertions, 38 deletions
diff --git a/builtin/commit.c b/builtin/commit.c
index e1af9b1..cb73857 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -256,8 +256,10 @@ static int list_paths(struct string_list *list, const char *with_tree,
;
m = xcalloc(1, i);
- if (with_tree)
- overlay_tree_on_cache(with_tree, prefix);
+ if (with_tree) {
+ const char *max_prefix = pathspec_prefix(prefix, pattern);
+ overlay_tree_on_cache(with_tree, max_prefix);
+ }
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 1570123..0e98bff 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -276,41 +276,6 @@ static void prune_cache(const char *prefix)
active_nr = last;
}
-static const char *pathspec_prefix(const char *prefix)
-{
- const char **p, *n, *prev;
- unsigned long max;
-
- if (!pathspec) {
- max_prefix_len = prefix ? strlen(prefix) : 0;
- return prefix;
- }
-
- prev = NULL;
- max = PATH_MAX;
- for (p = pathspec; (n = *p) != NULL; p++) {
- int i, len = 0;
- for (i = 0; i < max; i++) {
- char c = n[i];
- if (prev && prev[i] != c)
- break;
- if (!c || c == '*' || c == '?')
- break;
- if (c == '/')
- len = i+1;
- }
- prev = n;
- if (len < max) {
- max = len;
- if (!max)
- break;
- }
- }
-
- max_prefix_len = max;
- return max ? xmemdupz(prev, max) : NULL;
-}
-
static void strip_trailing_slash_from_submodules(void)
{
const char **p;
@@ -576,7 +541,8 @@ 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(prefix);
+ max_prefix = pathspec_prefix(prefix, pathspec);
+ max_prefix_len = max_prefix ? strlen(max_prefix) : 0;
/* Treat unmatching pathspec elements as errors */
if (pathspec && error_unmatch) {