On 26/07/2018 17:24, Martin von Zweigbergk wrote:


On Thu, Jul 26, 2018 at 6:26 AM Boris FELD <lothiral...@gmail.com <mailto:lothiral...@gmail.com>> wrote:

    On 26/07/2018 15:06, Yuya Nishihara wrote:
    > On Thu, 26 Jul 2018 14:21:20 +0200, Boris Feld wrote:
    >> # HG changeset patch
    >> # User Boris Feld <boris.f...@octobus.net
    <mailto:boris.f...@octobus.net>>
    >> # Date 1532595350 -7200
    >> #      Thu Jul 26 10:55:50 2018 +0200
    >> # Branch stable
    >> # Node ID 88a0bf46a3ffb78aaab203d13a7c9f53e244282b
    >> # Parent  a920f2620726ef26e6caed3d72b24297699b5b39
    >> # EXP-Topic compat-hggit
    >> # Available At https://bitbucket.org/octobus/mercurial-devel/
    >> #              hg pull
    https://bitbucket.org/octobus/mercurial-devel/ -r 88a0bf46a3ff
    >> clone: process 'lookup' return as an arbitrary symbol
    >>
    >> In theory, checkout is expected to be a node here because it
    was returned by
    >> peer.lookup.
    >>
    >> In practice, multiple important extensions (like hg-git,
    hg-subversion) use
    >> peers not backed by a mercurial repository where lookup cannot
    return a node.
    >>
    >> Allowing arbitrary symbols is necessary to make these
    extensions working with
    >> 4.7.
    >>
    >> We should probably introduce a new API in Core to have these
    extensions to
    >> work without abusing the lookup API. In the meantime, a small
    change to
    >> restore compatibility in 4.7 seems in order.
    >>
    >> diff --git a/mercurial/hg.py b/mercurial/hg.py
    >> --- a/mercurial/hg.py
    >> +++ b/mercurial/hg.py
    >> @@ -730,6 +730,19 @@ def clone(ui, peeropts, source, dest=Non
    >>
    >>                   uprev = None
    >>                   status = None
    >> +                if checkout is not None and not
    node.isnode(checkout):
    > IIUC, hggit/hgsubversion may pass in a 20-length symbolic name?
    Yes, this is unfortunate. Having everything working but 20-lenght
    names
    is a first step, we can follow-up with more logic to check if the
    symbol
    is a valid name.


I think Yuya is suggesting that you simply remove the "and not node.isnode(checkout)", and I agree with that. That way 20-character names would also work. There are two downsides that I can see: 1) the cost of an extra check, and 2) a 20-character binary nodeid (from a well-behaving peer) that happens to also be a valid name will now be interpreted as the name. (1) seems negligible given the cost of a clone. (2) seems extremely unlikely to happen (i.e. that a binary nodeid happens to be only readable characters that someone also happened to use in a name). Am I missing something?

We need to detect valid node because they cannot go through revsymbol, it breaks the tests without that check. The previous API was able to handle any cases, it is now hard to get the same result when needed.

If a 20 chars string is a valid node (ie: exists in the repo) it should probably take precedence over the name. It seems extremely unlikely to not care about that case.


    >
    >> +                    # checkout was expected to be a node here
    because it was
    >> +                    # returned by peer.lookup.
    >> +                    #
    >> +                    # However, some extension (like hg-git)
    introduce peer not
    >> +                    # backed by a mercurial repository where
    lookup cannot
    >> +                    # return a node. Processing 'checkout' as
    an arbitrary
    >> +                    # symbols make it possible with these
    extensions keep
    >> +                    # working.
    >> +                    if scmutil.isrevsymbol(destrepo, checkout):
    >> +                        checkout = scmutil.revsymbol(destrepo,
    checkout).node()
    >> +                    else:
    >> +                        checkout = None
    > Do you have any plan to deprecate this hack?
    Our plan is to introduce a clear separate API that could be used
    by such
    extensions for this specific case in 4.8.
    _______________________________________________
    Mercurial-devel mailing list
    Mercurial-devel@mercurial-scm.org
    <mailto:Mercurial-devel@mercurial-scm.org>
    https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to