commit - e1ad6ebcf6e7b7a707020aa0829c05a16e8a24a4
commit + 999f19f65ebfdfc865544b4e3d1039891eca25de
blob - 4975158ecf8a6b5d094fba6b824c1375df001d71
blob + 2ba33f7285825caf1462e5f754c6d8889a4e5aec
--- lib/pack.c
+++ lib/pack.c
uint64_t base_size;
size_t base_tslen;
size_t n;
- FILE *base_packfile;
char *path_base_packfile;
+ struct got_pack *base_pack;
off_t delta_data_offset;
n = fread(&id, sizeof(id), 1, packfile);
if (err)
return err;
- err = open_packfile(&base_packfile, path_base_packfile, repo, packidx);
- got_packidx_close(packidx);
- if (err)
- return err;
+ base_pack = get_cached_pack(path_base_packfile, repo);
+ if (base_pack == NULL) {
+ err = cache_pack(&base_pack, path_base_packfile, NULL, repo);
+ if (err)
+ goto done;
+ }
- if (fseeko(base_packfile, base_offset, SEEK_SET) != 0) {
+ if (fseeko(base_pack->packfile, base_offset, SEEK_SET) != 0) {
err = got_error_from_errno();
goto done;
}
err = parse_object_type_and_size(&base_type, &base_size, &base_tslen,
- base_packfile);
+ base_pack->packfile);
if (err)
goto done;
- err = resolve_delta_chain(deltas, repo, base_packfile,
+ err = resolve_delta_chain(deltas, repo, base_pack->packfile,
path_base_packfile, base_offset, base_tslen, base_type,
base_size);
done:
free(path_base_packfile);
- if (base_packfile && fclose(base_packfile) == -1 && err == 0)
- err = got_error_from_errno();
return err;
}