Re: [PATCH/RFC v2 10/16] Read resolve-undo data
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 6, 2012, 01:51 UTC
- Message-ID
- <7vk3xc23f8.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1344203353-2819-11-git-send-email-t.gummerer@gmail.com>
Thomas Gummerer <t.gummerer@gmail.com> writes:
Show 39 quoted lines
> Make git read the resolve-undo data from the index.
>
> Since the resolve-undo data is joined with the conflicts in
> the ondisk format of the index file version 5, conflicts and
> resolved data is read at the same time, and the resolve-undo
> data is then converted to the in-memory format.
>
> Helped-by: Thomas Rast <trast@student.ethz.ch>
> Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
> ---
> read-cache.c | 1 +
> resolve-undo.c | 36 ++++++++++++++++++++++++++++++++++++
> resolve-undo.h | 2 ++
> 3 files changed, 39 insertions(+)
>
> diff --git a/read-cache.c b/read-cache.c
> index 70334f9..03370f9 100644
> --- a/read-cache.c
> +++ b/read-cache.c
> @@ -1942,6 +1942,7 @@ static struct directory_entry *read_entries_v5(struct index_state *istate,
> int i;
>
> conflict_queue = read_conflicts_v5(de, mmap, mmap_size, fd);
> + resolve_undo_convert_v5(istate, conflict_queue);
> for (i = 0; i < de->de_nfiles; i++) {
> ce = read_entry_v5(de,
> entry_offset,
> diff --git a/resolve-undo.c b/resolve-undo.c
> index 72b4612..f96c6ba 100644
> --- a/resolve-undo.c
> +++ b/resolve-undo.c
> @@ -170,3 +170,39 @@ void unmerge_index(struct index_state *istate, const char **pathspec)
> i = unmerge_index_entry_at(istate, i);
> }
> }
> +
> +void resolve_undo_convert_v5(struct index_state *istate,
> + struct conflict_entry *ce)
> +{It is unclear why this needs to be part of resolve-undo.c and exported from it. Shouldn't it (and bulk of the previous few patches) be part of a read-cache-v5.c file (with v2/3/4 specific part separated out from read-cache.c to form read-cache-v2.c)?
Show 43 quoted lines
> + int i;
> +
> + while (ce) {
> + struct string_list_item *lost;
> + struct resolve_undo_info *ui;
> + struct conflict_part *cp;
> +
> + if (ce->entries && (ce->entries->flags & CONFLICT_CONFLICTED) != 0) {
> + ce = ce->next;
> + continue;
> + }
> + if (!istate->resolve_undo) {
> + istate->resolve_undo = xcalloc(1, sizeof(struct string_list));
> + istate->resolve_undo->strdup_strings = 1;
> + }
> +
> + lost = string_list_insert(istate->resolve_undo, ce->name);
> + if (!lost->util)
> + lost->util = xcalloc(1, sizeof(*ui));
> + ui = lost->util;
> +
> + cp = ce->entries;
> + for (i = 0; i < 3; i++)
> + ui->mode[i] = 0;
> + while (cp) {
> + ui->mode[conflict_stage(cp) - 1] = cp->entry_mode;
> + hashcpy(ui->sha1[conflict_stage(cp) - 1], cp->sha1);
> + cp = cp->next;
> + }
> + ce = ce->next;
> + }
> +}
> diff --git a/resolve-undo.h b/resolve-undo.h
> index 8458769..ab660a6 100644
> --- a/resolve-undo.h
> +++ b/resolve-undo.h
> @@ -13,4 +13,6 @@ extern void resolve_undo_clear_index(struct index_state *);
> extern int unmerge_index_entry_at(struct index_state *, int);
> extern void unmerge_index(struct index_state *, const char **);
>
> +extern void resolve_undo_convert_v5(struct index_state *, struct conflict_entry *);
> +
> #endif