@@ -16,15 +16,20 @@ struct git_grafts {
1616 /* Map of `git_commit_graft`s */
1717 git_oidmap * commits ;
1818
19+ /* Type of object IDs */
20+ git_oid_t oid_type ;
21+
1922 /* File backing the graft. NULL if it's an in-memory graft */
2023 char * path ;
2124 unsigned char path_checksum [GIT_HASH_SHA256_SIZE ];
2225};
2326
24- int git_grafts_new (git_grafts * * out )
27+ int git_grafts_new (git_grafts * * out , git_oid_t oid_type )
2528{
2629 git_grafts * grafts ;
2730
31+ GIT_ASSERT_ARG (out && oid_type );
32+
2833 grafts = git__calloc (1 , sizeof (* grafts ));
2934 GIT_ERROR_CHECK_ALLOC (grafts );
3035
@@ -33,19 +38,26 @@ int git_grafts_new(git_grafts **out)
3338 return -1 ;
3439 }
3540
41+ grafts -> oid_type = oid_type ;
42+
3643 * out = grafts ;
3744 return 0 ;
3845}
3946
40- int git_grafts_from_file (git_grafts * * out , const char * path )
47+ int git_grafts_from_file (
48+ git_grafts * * out ,
49+ const char * path ,
50+ git_oid_t oid_type )
4151{
4252 git_grafts * grafts = NULL ;
4353 int error ;
4454
55+ GIT_ASSERT_ARG (path && oid_type );
56+
4557 if (* out )
4658 return git_grafts_refresh (* out );
4759
48- if ((error = git_grafts_new (& grafts )) < 0 )
60+ if ((error = git_grafts_new (& grafts , oid_type )) < 0 )
4961 goto error ;
5062
5163 grafts -> path = git__strdup (path );
@@ -133,7 +145,7 @@ int git_grafts_parse(git_grafts *grafts, const char *buf, size_t len)
133145 for (; parser .remain_len ; git_parse_advance_line (& parser )) {
134146 git_oid graft_oid ;
135147
136- if ((error = git_parse_advance_oid (& graft_oid , & parser , GIT_OID_SHA1 )) < 0 ) {
148+ if ((error = git_parse_advance_oid (& graft_oid , & parser , grafts -> oid_type )) < 0 ) {
137149 git_error_set (GIT_ERROR_GRAFTS , "invalid graft OID at line %" PRIuZ , parser .line_num );
138150 goto error ;
139151 }
@@ -143,7 +155,7 @@ int git_grafts_parse(git_grafts *grafts, const char *buf, size_t len)
143155 GIT_ERROR_CHECK_ALLOC (id );
144156
145157 if ((error = git_parse_advance_expected (& parser , " " , 1 )) < 0 ||
146- (error = git_parse_advance_oid (id , & parser , GIT_OID_SHA1 )) < 0 ) {
158+ (error = git_parse_advance_oid (id , & parser , grafts -> oid_type )) < 0 ) {
147159 git_error_set (GIT_ERROR_GRAFTS , "invalid parent OID at line %" PRIuZ , parser .line_num );
148160 goto error ;
149161 }
0 commit comments