Excerpts from Durham Goode's message of 2017-02-27 10:41:39 -0800:
> On 2/24/17 4:04 PM, Jun Wu wrote:
> > Excerpts from Durham Goode's message of 2017-02-24 15:42:34 -0800:
> >> Maybe I don't understand your proposal.  The current merge-tools are
> >> invoked once per file.  Would this python merge-tool be invoked in some
> >> other way where it's given the full conflict state at the beginning then
> >> it can do what it wants?  So we'd special case python merge tools to be
> >
> > Actually it's a good question. I think it's more consistent if being called
> > per-file. But I see that'll be problematic about "when is it the last file?"
> > That probably requires an extra parameter about how many files are left.
> >
> >> a little different?  We could just define a internal merge tool called
> >> 'internal:json' or something and skip the whole extensibility thing.
> >
> > That's possible. Although I'm not sure if it's a good idea or not. Since we
> > have ":dump" already, maybe name it something like ":dump-json". I guess the
> > most difficulty part to reach agreement is to define the json schema - the
> > merge state includes things like executable bit, symlink, etc. So I'd rather
> > to put this outside core from the beginning.
> 
> If it ends up outside core, it's such a minor feature we'll likely never 
> do the work to move it in to core. I don't think the json schema will be 
> that big of a deal. The kinds of data we need are pretty clear: file 
> content at various versions, file flag at various versions, kind of 
> conflict.
> 
> >
> >> Also, how does the merge tool communicate to the caller the json
> >> results? Write it to a file? Or does the merge tool have the ability to
> >> print to stdout?
> >
> > It has ui and repo.wvfs so it could do whatever it wants.
> >
> > Therefore the signature could be something like:
> >
> >   def mergefunc(ui, repo, basefctx, localfctx, otherfctx, index, total):
> >       raise ... # merge failure
> >       return None # alternative, merge failure
> >       return fctx-like # merge success
> >
> > If we want to do the ":dump-json" thing, it could be like:
> >
> >   state = {}
> >   def merge(....):
> >       if index == 0:
> >           state.clear()
> >       state[basefctx.path()] = ....
> >       if index == total:
> >           ui.write(json.dumps(state))
> >       return None # report failure
> 
> What if we drop the --prep and just introduce '--tool 
> internal:dump-json' as the switch that gets us to this code path.  So 
> that gets it in core without needing much of a rewrite. If you're 
> worried about deciding on a schema, we can mark it as experimental in 
> the documentation.

I think that's a possibility. Note that there are 2 possible output formats:

  1. Raw file contents, without conflict markers
  2. Sliced file segments, with conflict indicators

I guess we want 2. The format is slightly more complex than 1. As long as it
express all the related information unambiguously, I'd be fine with it.
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to