On 08/09, Junio C Hamano wrote:
> Thomas Gummerer <t.gumme...@gmail.com> writes:
> 
> > 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.
> 
> This, and the next one, are both about reading extension data from
> the v2 formatted index, no?

Yes, exactly.

> Again, mild NAK.
> 
> I think it is a lot more logical for the v5 code to read data stored
> in the resolve-undo and cache-tree extensions using the public API
> just like other users of these data do, and write out whatever in a
> way that is specific to the v5 index format.
> 
> If the v5 codepath needs some information that is not exposed to
> other users of istate->resolve_undo and istate->cache_tree, then the
> story is different, but I do not think that is the case.

Sorry it's not clear to me what you mean with using the public API here.
Do you mean using resolve_undo_write() and resolve_undo_read()? I
wouldn't think those two methods would be really useful, as they expect
the data mangled in to a char* or return it as struct strbuf*.  And I
don't see the other methods doing something more useful.  Or I could
use the resolve-undo string_list directly, and just move the function
to read-cache-v5.c, or am I missing something here?

> >
> > Helped-by: Thomas Rast <tr...@student.ethz.ch>
> > Signed-off-by: Thomas Gummerer <t.gumme...@gmail.com>
> > ---
> >  read-cache-v5.c |    1 +
> >  resolve-undo.c  |   36 ++++++++++++++++++++++++++++++++++++
> >  resolve-undo.h  |    2 ++
> >  3 files changed, 39 insertions(+)
> >
> > diff --git a/read-cache-v5.c b/read-cache-v5.c
> > index ec1201d..b47398d 100644
> > --- a/read-cache-v5.c
> > +++ b/read-cache-v5.c
> > @@ -494,6 +494,7 @@ static struct directory_entry *read_entries(struct 
> > index_state *istate,
> >     int i;
> >  
> >     conflict_queue = read_conflicts(de, mmap, mmap_size, fd);
> > +   resolve_undo_convert_v5(istate, conflict_queue);
> >     for (i = 0; i < de->de_nfiles; i++) {
> >             ce = read_entry(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)
> > +{
> > +   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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to