81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
| /*
 | |
|  * 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);
 |