From: Junio C Hamano Date: Thu, 7 Mar 2019 00:59:56 +0000 (+0900) Subject: Merge branch 'nd/split-index-null-base-fix' X-Git-Tag: v2.22.0-rc0~171 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/0efa3d74e705ed2c66c33854ac4bfd0d6c7f56de?hp=--cc Merge branch 'nd/split-index-null-base-fix' Split-index fix. * nd/split-index-null-base-fix: read-cache.c: fix writing "link" index ext with null base oid --- 0efa3d74e705ed2c66c33854ac4bfd0d6c7f56de diff --cc read-cache.c index 75ff234fc8,d140b44f8f..441537032f --- a/read-cache.c +++ b/read-cache.c @@@ -2867,40 -2516,12 +2867,41 @@@ static int do_write_index(struct index_ } strbuf_release(&previous_name_buf); - if (err) + if (err) { + free(ieot); return err; + } /* Write extension data here */ + offset = lseek(newfd, 0, SEEK_CUR); + if (offset < 0) { + free(ieot); + return -1; + } + offset += write_buffer_len; + the_hash_algo->init_fn(&eoie_c); + + /* + * Lets write out CACHE_EXT_INDEXENTRYOFFSETTABLE first so that we + * can minimize the number of extensions we have to scan through to + * find it during load. Write it out regardless of the + * strip_extensions parameter as we need it when loading the shared + * index. + */ + if (ieot) { + struct strbuf sb = STRBUF_INIT; + + write_ieot_extension(&sb, ieot); + err = write_index_ext_header(&c, &eoie_c, newfd, CACHE_EXT_INDEXENTRYOFFSETTABLE, sb.len) < 0 + || ce_write(&c, newfd, sb.buf, sb.len) < 0; + strbuf_release(&sb); + free(ieot); + if (err) + return -1; + } + - if (!strip_extensions && istate->split_index) { + if (!strip_extensions && istate->split_index && + !is_null_oid(&istate->split_index->base_oid)) { struct strbuf sb = STRBUF_INIT; err = write_link_extension(&sb, istate) < 0 ||