1919#include "array.h"
2020
2121struct git_filter_source {
22- git_repository * repo ;
23- const char * path ;
24- git_oid oid ; /* zero if unknown (which is likely) */
25- uint16_t filemode ; /* zero if unknown */
26- git_filter_mode_t mode ;
27- uint32_t flags ;
22+ git_repository * repo ;
23+ const char * path ;
24+ git_oid oid ; /* zero if unknown (which is likely) */
25+ uint16_t filemode ; /* zero if unknown */
26+ git_filter_mode_t mode ;
27+ git_filter_options options ;
2828};
2929
3030typedef struct {
@@ -396,7 +396,7 @@ git_filter_mode_t git_filter_source_mode(const git_filter_source *src)
396396
397397uint32_t git_filter_source_flags (const git_filter_source * src )
398398{
399- return src -> flags ;
399+ return src -> options . flags ;
400400}
401401
402402static int filter_list_new (
@@ -416,7 +416,8 @@ static int filter_list_new(
416416 fl -> source .repo = src -> repo ;
417417 fl -> source .path = fl -> path ;
418418 fl -> source .mode = src -> mode ;
419- fl -> source .flags = src -> flags ;
419+
420+ memcpy (& fl -> source .options , & src -> options , sizeof (git_filter_options ));
420421
421422 * out = fl ;
422423 return 0 ;
@@ -436,10 +437,10 @@ static int filter_list_check_attributes(
436437
437438 GIT_ERROR_CHECK_ALLOC (strs );
438439
439- if ((src -> flags & GIT_FILTER_NO_SYSTEM_ATTRIBUTES ) != 0 )
440+ if ((src -> options . flags & GIT_FILTER_NO_SYSTEM_ATTRIBUTES ) != 0 )
440441 attr_opts .flags |= GIT_ATTR_CHECK_NO_SYSTEM ;
441442
442- if ((src -> flags & GIT_FILTER_ATTRIBUTES_FROM_HEAD ) != 0 )
443+ if ((src -> options . flags & GIT_FILTER_ATTRIBUTES_FROM_HEAD ) != 0 )
443444 attr_opts .flags |= GIT_ATTR_CHECK_INCLUDE_HEAD ;
444445
445446 error = git_attr_get_many_with_session (
@@ -488,7 +489,7 @@ int git_filter_list_new(
488489 src .repo = repo ;
489490 src .path = NULL ;
490491 src .mode = mode ;
491- src .flags = flags ;
492+ src .options . flags = flags ;
492493 return filter_list_new (out , & src );
493494}
494495
@@ -515,7 +516,8 @@ int git_filter_list__load(
515516 src .repo = repo ;
516517 src .path = path ;
517518 src .mode = mode ;
518- src .flags = filter_session -> flags ;
519+
520+ memcpy (& src .options , & filter_session -> options , sizeof (git_filter_options ));
519521
520522 if (blob )
521523 git_oid_cpy (& src .oid , git_blob_id (blob ));
@@ -581,6 +583,23 @@ int git_filter_list__load(
581583 return error ;
582584}
583585
586+ int git_filter_list_load_ext (
587+ git_filter_list * * filters ,
588+ git_repository * repo ,
589+ git_blob * blob , /* can be NULL */
590+ const char * path ,
591+ git_filter_mode_t mode ,
592+ git_filter_options * opts )
593+ {
594+ git_filter_session filter_session = GIT_FILTER_SESSION_INIT ;
595+
596+ if (opts )
597+ memcpy (& filter_session .options , opts , sizeof (git_filter_options ));
598+
599+ return git_filter_list__load (
600+ filters , repo , blob , path , mode , & filter_session );
601+ }
602+
584603int git_filter_list_load (
585604 git_filter_list * * filters ,
586605 git_repository * repo ,
@@ -591,7 +610,7 @@ int git_filter_list_load(
591610{
592611 git_filter_session filter_session = GIT_FILTER_SESSION_INIT ;
593612
594- filter_session .flags = flags ;
613+ filter_session .options . flags = flags ;
595614
596615 return git_filter_list__load (
597616 filters , repo , blob , path , mode , & filter_session );
0 commit comments