static int write_each_non_note_until(const char *note_path, struct write_each_note_data *d) { struct non_note *n = d->next_non_note; int cmp = 0, ret; while (n && (!note_path || (cmp = strcmp(n->path, note_path)) <= 0)) { if (note_path && cmp == 0) ; /* do nothing, prefer note to non-note */ else { ret = write_each_note_helper(d->root, n->path, n->mode, &n->oid); if (ret) return ret; } n = n->next; } d->next_non_note = n; return 0; }
static int write_each_note(const struct object_id *object_oid, const struct object_id *note_oid, char *note_path, void *cb_data) { struct write_each_note_data *d = (struct write_each_note_data *) cb_data; size_t note_path_len = strlen(note_path); unsigned int mode = 0100644; if (note_path[note_path_len - 1] == '/') { /* subtree entry */ note_path_len--; note_path[note_path_len] = '\0'; mode = 040000; } assert(note_path_len <= GIT_SHA1_HEXSZ + FANOUT_PATH_SEPARATORS); /* Weave non-note entries into note entries */ return write_each_non_note_until(note_path, d) || write_each_note_helper(d->root, note_path, mode, note_oid); }
static int write_each_note(const unsigned char *object_sha1, const unsigned char *note_sha1, char *note_path, void *cb_data) { struct write_each_note_data *d = (struct write_each_note_data *) cb_data; size_t note_path_len = strlen(note_path); unsigned int mode = 0100644; if (note_path[note_path_len - 1] == '/') { /* subtree entry */ note_path_len--; note_path[note_path_len] = '\0'; mode = 040000; } assert(note_path_len <= 40 + 19); /* Weave non-note entries into note entries */ return write_each_non_note_until(note_path, d) || write_each_note_helper(d->root, note_path, mode, note_sha1); }