MCPcopy Create free account
hub / github.com/git/git / write_one

Function write_one

builtin/pack-objects.c:799–850  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

797};
798
799static enum write_one_status write_one(struct hashfile *f,
800 struct object_entry *e,
801 off_t *offset)
802{
803 off_t size;
804 int recursing;
805
806 /*
807 * we set offset to 1 (which is an impossible value) to mark
808 * the fact that this object is involved in "write its base
809 * first before writing a deltified object" recursion.
810 */
811 recursing = (e->idx.offset == 1);
812 if (recursing) {
813 warning(_("recursive delta detected for object %s"),
814 oid_to_hex(&e->idx.oid));
815 return WRITE_ONE_RECURSIVE;
816 } else if (e->idx.offset || e->preferred_base) {
817 /* offset is non zero if object is written already. */
818 return WRITE_ONE_SKIP;
819 }
820
821 /* if we are deltified, write out base object first. */
822 if (DELTA(e)) {
823 e->idx.offset = 1; /* now recurse */
824 switch (write_one(f, DELTA(e), offset)) {
825 case WRITE_ONE_RECURSIVE:
826 /* we cannot depend on this one */
827 SET_DELTA(e, NULL);
828 break;
829 default:
830 break;
831 case WRITE_ONE_BREAK:
832 e->idx.offset = recursing;
833 return WRITE_ONE_BREAK;
834 }
835 }
836
837 e->idx.offset = *offset;
838 size = write_object(f, e, *offset);
839 if (!size) {
840 e->idx.offset = recursing;
841 return WRITE_ONE_BREAK;
842 }
843 written_list[nr_written++] = &e->idx;
844
845 /* make sure off_t is sufficiently large not to wrap */
846 if (signed_add_overflows(*offset, size))
847 die(_("pack too large for current definition of off_t"));
848 *offset += size;
849 return WRITE_ONE_WRITTEN;
850}
851
852static int mark_tagged(const struct reference *ref, void *cb_data UNUSED)
853{

Callers 1

write_pack_fileFunction · 0.70

Calls 4

warningFunction · 0.85
oid_to_hexFunction · 0.85
write_objectFunction · 0.70
dieFunction · 0.50

Tested by

no test coverage detected