Re: [PATCH/RFC v2 10/16] Read resolve-undo data

2012-08-07 Thread Thomas Gummerer


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

2012-08-05 Thread Junio C Hamano
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

2012-08-05 Thread Thomas Gummerer
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