commit - 044e73932dd67a6333fb1991ab83653aeb0e2902
commit + a6b158cc8110b488f51e265bea16ed17a0079e0a
blob - b00eb496bfb5c5a72716d083134d53871f9051c1
blob + 695e3dc57b3f6950442c696698ebf4591a41da82
--- lib/pack.c
+++ lib/pack.c
err = got_error_from_errno();
goto done;
}
+
+ if (n == 0) {
+ /* Plain object types are the delta base. */
+ if (delta->type != GOT_OBJ_TYPE_COMMIT &&
+ delta->type != GOT_OBJ_TYPE_TREE &&
+ delta->type != GOT_OBJ_TYPE_BLOB &&
+ delta->type != GOT_OBJ_TYPE_TAG) {
+ err = got_error(GOT_ERR_BAD_DELTA_CHAIN);
+ goto done;
+ }
+ err = got_inflate_to_file(&delta_len, delta_file,
+ base_file);
+ fclose(delta_file);
+ if (err)
+ goto done;
+ n++;
+ rewind(base_file);
+ continue;
+ }
+
/* Delta streams should always fit in memory. */
err = got_inflate_to_mem(&delta_buf, &delta_len, delta_file);
+ fclose(delta_file);
if (err)
- return err;
+ goto done;
- fclose(delta_file);
-
err = got_delta_apply(base_file, delta_buf, delta_len,
/* Final delta application writes to the output file. */
++n < deltas->nentries ? accum_file : outfile);