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:
parent
5078f34459
commit
b7d591d17b
46
notes.c
46
notes.c
@ -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
25
notes.h
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user