@@ -550,18 +550,15 @@ struct GitRepoImpl : GitRepo, std::enable_shared_from_this<GitRepoImpl>
550550 }
551551
552552 /* *
553- * A 'GitSourceAccessor' with no regard for export-ignore or any other transformations .
553+ * A 'GitSourceAccessor' with no regard for export-ignore.
554554 */
555- ref<GitSourceAccessor> getRawAccessor (const Hash & rev, bool smudgeLfs = false , bool applyFilters = false );
555+ ref<GitSourceAccessor> getRawAccessor (const Hash & rev, const GitAccessorOptions & options );
556556
557- ref<SourceAccessor> getAccessor (
558- const Hash & rev,
559- bool exportIgnore,
560- std::string displayPrefix,
561- bool smudgeLfs = false ,
562- bool applyFilters = false ) override ;
557+ ref<SourceAccessor>
558+ getAccessor (const Hash & rev, const GitAccessorOptions & options, std::string displayPrefix) override ;
563559
564- ref<SourceAccessor> getAccessor (const WorkdirInfo & wd, bool exportIgnore, MakeNotAllowedError e) override ;
560+ ref<SourceAccessor>
561+ getAccessor (const WorkdirInfo & wd, const GitAccessorOptions & options, MakeNotAllowedError e) override ;
565562
566563 ref<GitFileSystemObjectSink> getFileSystemObjectSink () override ;
567564
@@ -704,7 +701,7 @@ struct GitRepoImpl : GitRepo, std::enable_shared_from_this<GitRepoImpl>
704701
705702 Hash treeHashToNarHash (const fetchers::Settings & settings, const Hash & treeHash) override
706703 {
707- auto accessor = getAccessor (treeHash, false , " " );
704+ auto accessor = getAccessor (treeHash, {} , " " );
708705
709706 fetchers::Cache::Key cacheKey{" treeHashToNarHash" , {{" treeHash" , treeHash.gitRev ()}}};
710707
@@ -753,18 +750,18 @@ struct GitSourceAccessor : SourceAccessor
753750 git_oid oid;
754751 Object root;
755752 std::optional<lfs::Fetch> lfsFetch = std::nullopt ;
756- bool applyFilters ;
753+ GitAccessorOptions options ;
757754 };
758755
759756 Sync<State> state_;
760757
761- GitSourceAccessor (ref<GitRepoImpl> repo_, const Hash & rev, bool smudgeLfs, bool applyFilters_ )
758+ GitSourceAccessor (ref<GitRepoImpl> repo_, const Hash & rev, const GitAccessorOptions & options )
762759 : state_{State{
763760 .repo = repo_,
764761 .oid = hashToOID (rev),
765762 .root = peelToTreeOrBlob (lookupObject (*repo_, hashToOID (rev)).get ()),
766- .lfsFetch = smudgeLfs ? std::make_optional (lfs::Fetch (*repo_, hashToOID (rev))) : std::nullopt ,
767- .applyFilters = applyFilters_ ,
763+ .lfsFetch = options. smudgeLfs ? std::make_optional (lfs::Fetch (*repo_, hashToOID (rev))) : std::nullopt ,
764+ .options = options ,
768765 }}
769766 {
770767 }
@@ -792,7 +789,7 @@ struct GitSourceAccessor : SourceAccessor
792789 }
793790 }
794791
795- if (!state->applyFilters )
792+ if (!state->options . applyFilters )
796793 return std::string ((const char *) git_blob_rawcontent (blob.get ()), git_blob_rawsize (blob.get ()));
797794 else {
798795 // Apply git filters including potential CRLF conversion
@@ -1336,26 +1333,26 @@ struct GitFileSystemObjectSinkImpl : GitFileSystemObjectSink
13361333 }
13371334};
13381335
1339- ref<GitSourceAccessor> GitRepoImpl::getRawAccessor (const Hash & rev, bool smudgeLfs, bool applyFilters )
1336+ ref<GitSourceAccessor> GitRepoImpl::getRawAccessor (const Hash & rev, const GitAccessorOptions & options )
13401337{
13411338 auto self = ref<GitRepoImpl>(shared_from_this ());
1342- return make_ref<GitSourceAccessor>(self, rev, smudgeLfs, applyFilters );
1339+ return make_ref<GitSourceAccessor>(self, rev, options );
13431340}
13441341
1345- ref<SourceAccessor> GitRepoImpl::getAccessor (
1346- const Hash & rev, bool exportIgnore , std::string displayPrefix, bool smudgeLfs, bool applyFilters )
1342+ ref<SourceAccessor>
1343+ GitRepoImpl::getAccessor ( const Hash & rev, const GitAccessorOptions & options , std::string displayPrefix)
13471344{
13481345 auto self = ref<GitRepoImpl>(shared_from_this ());
1349- ref<GitSourceAccessor> rawGitAccessor = getRawAccessor (rev, smudgeLfs, applyFilters );
1346+ ref<GitSourceAccessor> rawGitAccessor = getRawAccessor (rev, options );
13501347 rawGitAccessor->setPathDisplay (std::move (displayPrefix));
1351- if (exportIgnore)
1348+ if (options. exportIgnore )
13521349 return make_ref<GitExportIgnoreSourceAccessor>(self, rawGitAccessor, rev);
13531350 else
13541351 return rawGitAccessor;
13551352}
13561353
1357- ref<SourceAccessor>
1358- GitRepoImpl::getAccessor ( const WorkdirInfo & wd, bool exportIgnore , MakeNotAllowedError makeNotAllowedError)
1354+ ref<SourceAccessor> GitRepoImpl::getAccessor (
1355+ const WorkdirInfo & wd, const GitAccessorOptions & options , MakeNotAllowedError makeNotAllowedError)
13591356{
13601357 auto self = ref<GitRepoImpl>(shared_from_this ());
13611358 ref<SourceAccessor> fileAccessor = AllowListSourceAccessor::create (
@@ -1365,7 +1362,7 @@ GitRepoImpl::getAccessor(const WorkdirInfo & wd, bool exportIgnore, MakeNotAllow
13651362 boost::unordered_flat_set<CanonPath>{CanonPath::root},
13661363 std::move (makeNotAllowedError))
13671364 .cast <SourceAccessor>();
1368- if (exportIgnore)
1365+ if (options. exportIgnore )
13691366 fileAccessor = make_ref<GitExportIgnoreSourceAccessor>(self, fileAccessor, std::nullopt );
13701367 return fileAccessor;
13711368}
@@ -1380,7 +1377,7 @@ std::vector<std::tuple<GitRepoImpl::Submodule, Hash>> GitRepoImpl::getSubmodules
13801377 /* Read the .gitmodules files from this revision. */
13811378 CanonPath modulesFile (" .gitmodules" );
13821379
1383- auto accessor = getAccessor (rev, exportIgnore, " " );
1380+ auto accessor = getAccessor (rev, {. exportIgnore = exportIgnore} , " " );
13841381 if (!accessor->pathExists (modulesFile))
13851382 return {};
13861383
@@ -1397,7 +1394,7 @@ std::vector<std::tuple<GitRepoImpl::Submodule, Hash>> GitRepoImpl::getSubmodules
13971394
13981395 std::vector<std::tuple<Submodule, Hash>> result;
13991396
1400- auto rawAccessor = getRawAccessor (rev);
1397+ auto rawAccessor = getRawAccessor (rev, {} );
14011398
14021399 for (auto & submodule : parseSubmodules (pathTemp)) {
14031400 /* Filter out .gitmodules entries that don't exist or are not
0 commit comments