| /* |
| * 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; |
| |
| /** |
| * 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); |