| /* | |
| * path-walk.h : Methods and structures for walking the object graph in batches | |
| * by the paths that can reach those objects. | |
| */ | |
| #include "object.h" /* Required for 'enum object_type'. */ | |
| struct rev_info; | |
| struct oid_array; | |
| struct pattern_list; | |
| /** | |
| * The type of a function pointer for the method that is called on a list of | |
| * objects reachable at a given path. | |
| */ | |
| typedef int (*path_fn)(const char *path, | |
| struct oid_array *oids, | |
| enum object_type type, | |
| void *data); | |
| struct path_walk_info { | |
| /** | |
| * revs provides the definitions for the commit walk, including | |
| * which commits are UNINTERESTING or not. This structure is | |
| * expected to be owned by the caller. | |
| */ | |
| struct rev_info *revs; | |
| /** | |
| * The caller wishes to execute custom logic on objects reachable at a | |
| * given path. Every reachable object will be visited exactly once, and | |
| * the first path to see an object wins. This may not be a stable choice. | |
| */ | |
| path_fn path_fn; | |
| void *path_fn_data; | |
| /** | |
| * Initialize which object types the path_fn should be called on. This | |
| * could also limit the walk to skip blobs if not set. | |
| */ | |
| int commits; | |
| int trees; | |
| int blobs; | |
| int tags; | |
| /** | |
| * When 'prune_all_uninteresting' is set and a path has all objects | |
| * marked as UNINTERESTING, then the path-walk will not visit those | |
| * objects. It will not call path_fn on those objects and will not | |
| * walk the children of such trees. | |
| */ | |
| int prune_all_uninteresting; | |
| /** | |
| * When 'edge_aggressive' is set, then the revision walk will use | |
| * the '--object-edge-aggressive' option to mark even more objects | |
| * as uninteresting. | |
| */ | |
| int edge_aggressive; | |
| /** | |
| * Specify a sparse-checkout definition to match our paths to. Do not | |
| * walk outside of this sparse definition. If the patterns are in | |
| * cone mode, then the search may prune directories that are outside | |
| * of the cone. If not in cone mode, then all tree paths will be | |
| * explored but the path_fn will only be called when the path matches | |
| * the sparse-checkout patterns. | |
| */ | |
| struct pattern_list *pl; | |
| }; | |
| #define PATH_WALK_INFO_INIT { \ | |
| .blobs = 1, \ | |
| .trees = 1, \ | |
| .commits = 1, \ | |
| .tags = 1, \ | |
| } | |
| void path_walk_info_init(struct path_walk_info *info); | |
| void path_walk_info_clear(struct path_walk_info *info); | |
| /** | |
| * Given the configuration of 'info', walk the commits based on 'info->revs' and | |
| * call 'info->path_fn' on each discovered path. | |
| * | |
| * Returns nonzero on an error. | |
| */ | |
| int walk_objects_by_path(struct path_walk_info *info); |