notes: convert combine_notes_* to object_id

Convert the definition and declarations of combine_notes_* functions
to struct object_id and adjust usage of these functions.

Signed-off-by: Patryk Obara <patryk.obara@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patryk Obara 2018-01-28 01:13:17 +01:00 committed by Junio C Hamano
parent 5078f34459
commit b7d591d17b
2 changed files with 38 additions and 33 deletions

46
notes.c
View File

@ -270,8 +270,8 @@ static int note_tree_insert(struct notes_tree *t, struct int_node *tree,
if (!oidcmp(&l->val_oid, &entry->val_oid))
return 0;
ret = combine_notes(l->val_oid.hash,
entry->val_oid.hash);
ret = combine_notes(&l->val_oid,
&entry->val_oid);
if (!ret && is_null_oid(&l->val_oid))
note_tree_remove(t, tree, n, entry);
free(entry);
@ -786,8 +786,8 @@ static int prune_notes_helper(const struct object_id *object_oid,
return 0;
}
int combine_notes_concatenate(unsigned char *cur_sha1,
const unsigned char *new_sha1)
int combine_notes_concatenate(struct object_id *cur_oid,
const struct object_id *new_oid)
{
char *cur_msg = NULL, *new_msg = NULL, *buf;
unsigned long cur_len, new_len, buf_len;
@ -795,18 +795,18 @@ int combine_notes_concatenate(unsigned char *cur_sha1,
int ret;
/* read in both note blob objects */
if (!is_null_sha1(new_sha1))
new_msg = read_sha1_file(new_sha1, &new_type, &new_len);
if (!is_null_oid(new_oid))
new_msg = read_sha1_file(new_oid->hash, &new_type, &new_len);
if (!new_msg || !new_len || new_type != OBJ_BLOB) {
free(new_msg);
return 0;
}
if (!is_null_sha1(cur_sha1))
cur_msg = read_sha1_file(cur_sha1, &cur_type, &cur_len);
if (!is_null_oid(cur_oid))
cur_msg = read_sha1_file(cur_oid->hash, &cur_type, &cur_len);
if (!cur_msg || !cur_len || cur_type != OBJ_BLOB) {
free(cur_msg);
free(new_msg);
hashcpy(cur_sha1, new_sha1);
oidcpy(cur_oid, new_oid);
return 0;
}
@ -825,20 +825,20 @@ int combine_notes_concatenate(unsigned char *cur_sha1,
free(new_msg);
/* create a new blob object from buf */
ret = write_sha1_file(buf, buf_len, blob_type, cur_sha1);
ret = write_sha1_file(buf, buf_len, blob_type, cur_oid->hash);
free(buf);
return ret;
}
int combine_notes_overwrite(unsigned char *cur_sha1,
const unsigned char *new_sha1)
int combine_notes_overwrite(struct object_id *cur_oid,
const struct object_id *new_oid)
{
hashcpy(cur_sha1, new_sha1);
oidcpy(cur_oid, new_oid);
return 0;
}
int combine_notes_ignore(unsigned char *cur_sha1,
const unsigned char *new_sha1)
int combine_notes_ignore(struct object_id *cur_oid,
const struct object_id *new_oid)
{
return 0;
}
@ -848,17 +848,17 @@ int combine_notes_ignore(unsigned char *cur_sha1,
* newlines removed.
*/
static int string_list_add_note_lines(struct string_list *list,
const unsigned char *sha1)
const struct object_id *oid)
{
char *data;
unsigned long len;
enum object_type t;
if (is_null_sha1(sha1))
if (is_null_oid(oid))
return 0;
/* read_sha1_file NUL-terminates */
data = read_sha1_file(sha1, &t, &len);
data = read_sha1_file(oid->hash, &t, &len);
if (t != OBJ_BLOB || !data || !len) {
free(data);
return t != OBJ_BLOB || !data;
@ -884,17 +884,17 @@ static int string_list_join_lines_helper(struct string_list_item *item,
return 0;
}
int combine_notes_cat_sort_uniq(unsigned char *cur_sha1,
const unsigned char *new_sha1)
int combine_notes_cat_sort_uniq(struct object_id *cur_oid,
const struct object_id *new_oid)
{
struct string_list sort_uniq_list = STRING_LIST_INIT_DUP;
struct strbuf buf = STRBUF_INIT;
int ret = 1;
/* read both note blob objects into unique_lines */
if (string_list_add_note_lines(&sort_uniq_list, cur_sha1))
if (string_list_add_note_lines(&sort_uniq_list, cur_oid))
goto out;
if (string_list_add_note_lines(&sort_uniq_list, new_sha1))
if (string_list_add_note_lines(&sort_uniq_list, new_oid))
goto out;
string_list_remove_empty_items(&sort_uniq_list, 0);
string_list_sort(&sort_uniq_list);
@ -905,7 +905,7 @@ int combine_notes_cat_sort_uniq(unsigned char *cur_sha1,
string_list_join_lines_helper, &buf))
goto out;
ret = write_sha1_file(buf.buf, buf.len, blob_type, cur_sha1);
ret = write_sha1_file(buf.buf, buf.len, blob_type, cur_oid->hash);
out:
strbuf_release(&buf);

25
notes.h
View File

@ -9,27 +9,32 @@
* When adding a new note annotating the same object as an existing note, it is
* up to the caller to decide how to combine the two notes. The decision is
* made by passing in a function of the following form. The function accepts
* two SHA1s -- of the existing note and the new note, respectively. The
* two object_ids -- of the existing note and the new note, respectively. The
* function then combines the notes in whatever way it sees fit, and writes the
* resulting SHA1 into the first SHA1 argument (cur_sha1). A non-zero return
* resulting oid into the first argument (cur_oid). A non-zero return
* value indicates failure.
*
* The two given SHA1s shall both be non-NULL and different from each other.
* Either of them (but not both) may be == null_sha1, which indicates an
* empty/non-existent note. If the resulting SHA1 (cur_sha1) is == null_sha1,
* The two given object_ids shall both be non-NULL and different from each
* other. Either of them (but not both) may be == null_oid, which indicates an
* empty/non-existent note. If the resulting oid (cur_oid) is == null_oid,
* the note will be removed from the notes tree.
*
* The default combine_notes function (you get this when passing NULL) is
* combine_notes_concatenate(), which appends the contents of the new note to
* the contents of the existing note.
*/
typedef int (*combine_notes_fn)(unsigned char *cur_sha1, const unsigned char *new_sha1);
typedef int (*combine_notes_fn)(struct object_id *cur_oid,
const struct object_id *new_oid);
/* Common notes combinators */
int combine_notes_concatenate(unsigned char *cur_sha1, const unsigned char *new_sha1);
int combine_notes_overwrite(unsigned char *cur_sha1, const unsigned char *new_sha1);
int combine_notes_ignore(unsigned char *cur_sha1, const unsigned char *new_sha1);
int combine_notes_cat_sort_uniq(unsigned char *cur_sha1, const unsigned char *new_sha1);
int combine_notes_concatenate(struct object_id *cur_oid,
const struct object_id *new_oid);
int combine_notes_overwrite(struct object_id *cur_oid,
const struct object_id *new_oid);
int combine_notes_ignore(struct object_id *cur_oid,
const struct object_id *new_oid);
int combine_notes_cat_sort_uniq(struct object_id *cur_oid,
const struct object_id *new_oid);
/*
* Notes tree object