Re: [PATCH/RFC v3 07/13] Read resolve-undo data
On 08/09, Junio C Hamano wrote: Thomas Gummerer t.gumme...@gmail.com writes: 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()? The code that reads from istate-resolve_undo is fine to do the v5 specific conversion, but it does not belong to resolve-undo.c file which is about the resolve-undo extension. Moving it to v5 specific file you added for this topic, read-cache-v5.c, and everything looks more logical. When we taught ls-files to show the paths with resolve-undo data, we didn't add any function to resolve-undo.c that does ls-files's work for it. Instead, ls-files just uses the public API (the data structure you find at the_index.resolve_undo is part of the API) to find what it needs to learn, and I think v5 code can do the same. then the story is different comment refers to a possibilty that v5 code might need something more than callers outside resolve-undo.c can find from its public interface, but I do not think it is the case. Ok, thanks for the clarification, will change it for the re-roll. -- 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 v3 07/13] Read resolve-undo data
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? 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. 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
Re: [PATCH/RFC v3 07/13] Read resolve-undo data
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
Re: [PATCH/RFC v3 07/13] Read resolve-undo data
Thomas Gummerer t.gumme...@gmail.com writes: 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()? The code that reads from istate-resolve_undo is fine to do the v5 specific conversion, but it does not belong to resolve-undo.c file which is about the resolve-undo extension. Moving it to v5 specific file you added for this topic, read-cache-v5.c, and everything looks more logical. When we taught ls-files to show the paths with resolve-undo data, we didn't add any function to resolve-undo.c that does ls-files's work for it. Instead, ls-files just uses the public API (the data structure you find at the_index.resolve_undo is part of the API) to find what it needs to learn, and I think v5 code can do the same. then the story is different comment refers to a possibilty that v5 code might need something more than callers outside resolve-undo.c can find from its public interface, but I do not think it is the case. -- 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 v3 07/13] 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 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 -- 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