-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add.c: move pathspec matchers into new pathspec.c for reuse
Extract the following functions from builtin/add.c to pathspec.c, in preparation for reuse by a new git check-ignore command: - fill_pathspec_matches() - find_used_pathspec() The functions being extracted are not changed in any way, except removal of the 'static' qualifier. Also add comments documenting these newly public functions, including clarifications that they operate on the index. Signed-off-by: Adam Spiers <git@adamspiers.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Adam Spiers
authored and
Junio C Hamano
committed
Jan 6, 2013
1 parent
f8a1113
commit 6f525e7
Showing
4 changed files
with
67 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
#include "cache.h" | ||
#include "dir.h" | ||
#include "pathspec.h" | ||
|
||
/* | ||
* Finds which of the given pathspecs match items in the index. | ||
* | ||
* For each pathspec, sets the corresponding entry in the seen[] array | ||
* (which should be specs items long, i.e. the same size as pathspec) | ||
* to the nature of the "closest" (i.e. most specific) match found for | ||
* that pathspec in the index, if it was a closer type of match than | ||
* the existing entry. As an optimization, matching is skipped | ||
* altogether if seen[] already only contains non-zero entries. | ||
* | ||
* If seen[] has not already been written to, it may make sense | ||
* to use find_used_pathspec() instead. | ||
*/ | ||
void fill_pathspec_matches(const char **pathspec, char *seen, int specs) | ||
{ | ||
int num_unmatched = 0, i; | ||
|
||
/* | ||
* Since we are walking the index as if we were walking the directory, | ||
* we have to mark the matched pathspec as seen; otherwise we will | ||
* mistakenly think that the user gave a pathspec that did not match | ||
* anything. | ||
*/ | ||
for (i = 0; i < specs; i++) | ||
if (!seen[i]) | ||
num_unmatched++; | ||
if (!num_unmatched) | ||
return; | ||
for (i = 0; i < active_nr; i++) { | ||
struct cache_entry *ce = active_cache[i]; | ||
match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, seen); | ||
} | ||
} | ||
|
||
/* | ||
* Finds which of the given pathspecs match items in the index. | ||
* | ||
* This is a one-shot wrapper around fill_pathspec_matches() which | ||
* allocates, populates, and returns a seen[] array indicating the | ||
* nature of the "closest" (i.e. most specific) matches which each of | ||
* the given pathspecs achieves against all items in the index. | ||
*/ | ||
char *find_used_pathspec(const char **pathspec) | ||
{ | ||
char *seen; | ||
int i; | ||
|
||
for (i = 0; pathspec[i]; i++) | ||
; /* just counting */ | ||
seen = xcalloc(i, 1); | ||
fill_pathspec_matches(pathspec, seen, i); | ||
return seen; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#ifndef PATHSPEC_H | ||
#define PATHSPEC_H | ||
|
||
extern char *find_used_pathspec(const char **pathspec); | ||
extern void fill_pathspec_matches(const char **pathspec, char *seen, int specs); | ||
|
||
#endif /* PATHSPEC_H */ |