@@ -496,7 +496,7 @@ int git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t pos)
496496 return GIT_ENOTFOUND ;
497497}
498498
499- static int add_default_backends (
499+ int git_odb__add_default_backends (
500500 git_odb * db , const char * objects_dir ,
501501 bool as_alternates , int alternate_depth )
502502{
@@ -531,7 +531,7 @@ static int add_default_backends(
531531#endif
532532
533533 /* add the loose object backend */
534- if (git_odb_backend_loose (& loose , objects_dir , -1 , 0 , 0 , 0 ) < 0 ||
534+ if (git_odb_backend_loose (& loose , objects_dir , -1 , db -> do_fsync , 0 , 0 ) < 0 ||
535535 add_backend_internal (db , loose , GIT_LOOSE_PRIORITY , as_alternates , inode ) < 0 )
536536 return -1 ;
537537
@@ -586,7 +586,7 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_
586586 alternate = git_buf_cstr (& alternates_path );
587587 }
588588
589- if ((result = add_default_backends (odb , alternate , true, alternate_depth + 1 )) < 0 )
589+ if ((result = git_odb__add_default_backends (odb , alternate , true, alternate_depth + 1 )) < 0 )
590590 break ;
591591 }
592592
@@ -598,7 +598,7 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_
598598
599599int git_odb_add_disk_alternate (git_odb * odb , const char * path )
600600{
601- return add_default_backends (odb , path , true, 0 );
601+ return git_odb__add_default_backends (odb , path , true, 0 );
602602}
603603
604604int git_odb_open (git_odb * * out , const char * objects_dir )
@@ -612,7 +612,7 @@ int git_odb_open(git_odb **out, const char *objects_dir)
612612 if (git_odb_new (& db ) < 0 )
613613 return -1 ;
614614
615- if (add_default_backends (db , objects_dir , 0 , 0 ) < 0 ) {
615+ if (git_odb__add_default_backends (db , objects_dir , 0 , 0 ) < 0 ) {
616616 git_odb_free (db );
617617 return -1 ;
618618 }
@@ -621,6 +621,24 @@ int git_odb_open(git_odb **out, const char *objects_dir)
621621 return 0 ;
622622}
623623
624+ int git_odb__set_caps (git_odb * odb , int caps )
625+ {
626+ if (caps == GIT_ODB_CAP_FROM_OWNER ) {
627+ git_repository * repo = odb -> rc .owner ;
628+ int val ;
629+
630+ if (!repo ) {
631+ giterr_set (GITERR_ODB , "cannot access repository to set odb caps" );
632+ return -1 ;
633+ }
634+
635+ if (!git_repository__cvar (& val , repo , GIT_CVAR_FSYNCOBJECTFILES ))
636+ odb -> do_fsync = !!val ;
637+ }
638+
639+ return 0 ;
640+ }
641+
624642static void odb_free (git_odb * db )
625643{
626644 size_t i ;
0 commit comments