Re: [PATCH/RFC v2 10/16] Read resolve-undo data
On 08/05, Junio C Hamano wrote: > Thomas Gummerer 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. > > > > Helped-by: Thomas Rast > > Signed-off-by: Thomas Gummerer > > --- > > 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)? I thought this should be part of resolve-undo.c, to keep everything that has to do with resolve-undo in the same file, taking model from resolve_undo_read and resolve_undo_write. But I don't care to deeply about it, it can easily be moved to read-cache-v5.c. > > + 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
Re: [PATCH/RFC v2 10/16] Read resolve-undo data
Thomas Gummerer 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. > > Helped-by: Thomas Rast > Signed-off-by: Thomas Gummerer > --- > 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)? > + 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
[PATCH/RFC v2 10/16] Read resolve-undo data
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 Signed-off-by: Thomas Gummerer --- 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) +{ + 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 -- 1.7.10.GIT -- 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