hgext3rd/evolve/compat.py
author Martin von Zweigbergk <martinvonz@google.com>
Mon, 19 Mar 2018 15:46:17 -0700
changeset 3575 97530d6e340d
parent 3560 f61a23a84dac
child 3611 c912eaf29eec
child 3616 f6d629514607
permissions -rw-r--r--
compat: make override of createmarkers work on wrapped function If createmarkers() has been wrapped using functools.partial(), the __code__ attribute won't exist. Fix by unwrapping partial functions. I tried to find another attribute to use as proxy for the "__code__.co_argcount < 6", but there were no new functions or similar added in that commit.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     1
# Copyright 2017 Octobus <contact@octobus.net>
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     2
#
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     3
# This software may be used and distributed according to the terms of the
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     4
# GNU General Public License version 2 or any later version.
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     5
"""
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     6
Compatibility module
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     7
"""
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     8
3499
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
     9
import inspect
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
    10
3575
97530d6e340d compat: make override of createmarkers work on wrapped function
Martin von Zweigbergk <martinvonz@google.com>
parents: 3560
diff changeset
    11
import functools
97530d6e340d compat: make override of createmarkers work on wrapped function
Martin von Zweigbergk <martinvonz@google.com>
parents: 3560
diff changeset
    12
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    13
from mercurial import (
3074
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
    14
    copies,
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
    15
    context,
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    16
    hg,
3499
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
    17
    mdiff,
2751
4f560f117fff compat: use 'safehasattr' over 'hasattr'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2693
diff changeset
    18
    obsolete,
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
    19
    revset,
2751
4f560f117fff compat: use 'safehasattr' over 'hasattr'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2693
diff changeset
    20
    util,
3524
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
    21
    wireproto,
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    22
)
3524
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
    23
from mercurial.hgweb import hgweb_mod
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    24
3408
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
    25
# hg < 4.2 compat
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
    26
try:
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
    27
    from mercurial import vfs as vfsmod
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
    28
    vfsmod.vfs
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
    29
except ImportError:
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
    30
    from mercurial import scmutil as vfsmod
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
    31
2693
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    32
try:
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    33
    from mercurial import obsutil
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    34
    obsutil.closestpredecessors
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    35
except ImportError:
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    36
    obsutil = None
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    37
3483
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    38
# hg < 4.6 compat (c8e2d6ed1f9e)
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    39
try:
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    40
    from mercurial import logcmdutil
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    41
    changesetdisplayer = logcmdutil.changesetdisplayer
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    42
    changesetprinter = logcmdutil.changesetprinter
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    43
    displaygraph = logcmdutil.displaygraph
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    44
except (AttributeError, ImportError):
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    45
    from mercurial import cmdutil
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    46
    changesetdisplayer = cmdutil.show_changeset
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    47
    changesetprinter = cmdutil.changeset_printer
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    48
    displaygraph = cmdutil.displaygraph
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    49
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    50
from . import (
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    51
    exthelper,
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    52
)
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    53
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    54
eh = exthelper.exthelper()
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    55
3560
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    56
# Wrap obsolete.creatmarkers and make it accept but ignore "operation" argument
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    57
# for hg < 4.3
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    58
createmarkers = obsolete.createmarkers
3575
97530d6e340d compat: make override of createmarkers work on wrapped function
Martin von Zweigbergk <martinvonz@google.com>
parents: 3560
diff changeset
    59
originalcreatemarkers = createmarkers
97530d6e340d compat: make override of createmarkers work on wrapped function
Martin von Zweigbergk <martinvonz@google.com>
parents: 3560
diff changeset
    60
while isinstance(originalcreatemarkers, functools.partial):
97530d6e340d compat: make override of createmarkers work on wrapped function
Martin von Zweigbergk <martinvonz@google.com>
parents: 3560
diff changeset
    61
    originalcreatemarkers = originalcreatemarkers.func
97530d6e340d compat: make override of createmarkers work on wrapped function
Martin von Zweigbergk <martinvonz@google.com>
parents: 3560
diff changeset
    62
if originalcreatemarkers.__code__.co_argcount < 6:
3560
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    63
    def createmarkers(repo, relations, flag=0, date=None, metadata=None,
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    64
                      operation=None):
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    65
        return obsolete.createmarkers(repo, relations, flag, date, metadata)
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    66
2751
4f560f117fff compat: use 'safehasattr' over 'hasattr'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2693
diff changeset
    67
if not util.safehasattr(hg, '_copycache'):
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    68
    # exact copy of relevantmarkers as in Mercurial-176d1a0ce385
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    69
    # this fixes relevant markers computation for version < hg-4.3
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    70
    @eh.wrapfunction(obsolete.obsstore, 'relevantmarkers')
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    71
    def relevantmarkers(orig, self, nodes):
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    72
        """return a set of all obsolescence markers relevant to a set of nodes.
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    73
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    74
        "relevant" to a set of nodes mean:
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    75
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    76
        - marker that use this changeset as successor
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    77
        - prune marker of direct children on this changeset
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    78
        - recursive application of the two rules on precursors of these markers
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    79
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    80
        It is a set so you cannot rely on order.
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    81
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    82
        Backport of mercurial changeset 176d1a0ce385 for version < 4.3
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    83
        """
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    84
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    85
        pendingnodes = set(nodes)
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    86
        seenmarkers = set()
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    87
        seennodes = set(pendingnodes)
2840
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
    88
        precursorsmarkers = self.predecessors
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    89
        succsmarkers = self.successors
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    90
        children = self.children
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    91
        while pendingnodes:
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    92
            direct = set()
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    93
            for current in pendingnodes:
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    94
                direct.update(precursorsmarkers.get(current, ()))
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    95
                pruned = [m for m in children.get(current, ()) if not m[1]]
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    96
                direct.update(pruned)
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    97
                pruned = [m for m in succsmarkers.get(current, ()) if not m[1]]
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    98
                direct.update(pruned)
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    99
            direct -= seenmarkers
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   100
            pendingnodes = set([m[0] for m in direct])
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   101
            seenmarkers |= direct
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   102
            pendingnodes -= seennodes
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   103
            seennodes |= pendingnodes
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
   104
        return seenmarkers
2693
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   105
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   106
# successors set move from mercurial.obsolete to mercurial.obsutil in 4.3
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   107
def successorssets(*args, **kwargs):
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   108
    func = getattr(obsutil, 'successorssets', None)
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   109
    if func is None:
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   110
        func = obsolete.successorssets
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   111
    return func(*args, **kwargs)
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   112
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   113
# allprecursors set move from mercurial.obsolete to mercurial.obsutil in 4.3
2841
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   114
# allprecursors  was renamed into allpredecessors in 4.4
2693
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   115
def allprecursors(*args, **kwargs):
2841
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   116
    func = getattr(obsutil, 'allpredecessors', None)
2693
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   117
    if func is None:
2841
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   118
        func = getattr(obsutil, 'allprecursors', None)
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   119
        if func is None:
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   120
            func = obsolete.allprecursors
2693
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   121
    return func(*args, **kwargs)
2752
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   122
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   123
# compatibility layer for mercurial < 4.3
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   124
def bookmarkapplychanges(repo, tr, changes):
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   125
    """Apply a list of changes to bookmarks
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   126
    """
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   127
    bookmarks = repo._bookmarks
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   128
    if util.safehasattr(bookmarks, 'applychanges'):
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   129
        return bookmarks.applychanges(repo, tr, changes)
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   130
    for name, node in changes:
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   131
        if node is None:
2794
5595fb96d922 compat: use old style method to update bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2752
diff changeset
   132
            del bookmarks[name]
2752
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   133
        else:
2794
5595fb96d922 compat: use old style method to update bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2752
diff changeset
   134
            bookmarks[name] = node
2752
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   135
    bookmarks.recordchange(tr)
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   136
3283
039c4b8dc3ed obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3074
diff changeset
   137
def isobsnotesupported():
039c4b8dc3ed obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3074
diff changeset
   138
    # hack to know obsnote is supported. The patches for obsnote support was
039c4b8dc3ed obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3074
diff changeset
   139
    # pushed before the obsfateprinter patches, so this will serve as a good
039c4b8dc3ed obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3074
diff changeset
   140
    # check
039c4b8dc3ed obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3074
diff changeset
   141
    if not obsutil:
039c4b8dc3ed obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3074
diff changeset
   142
        return False
039c4b8dc3ed obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3074
diff changeset
   143
    return util.safehasattr(obsutil, 'obsfateprinter')
039c4b8dc3ed obsnote: warn if user try to store a note in obsmarker on an older hg
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3074
diff changeset
   144
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   145
# Evolution renaming compat
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   146
2854
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   147
TROUBLES = {}
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   148
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   149
if not util.safehasattr(context.basectx, 'orphan'):
2854
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   150
    TROUBLES['ORPHAN'] = 'unstable'
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   151
    context.basectx.orphan = context.basectx.unstable
2854
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   152
else:
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   153
    TROUBLES['ORPHAN'] = 'orphan'
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   154
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   155
if not util.safehasattr(context.basectx, 'contentdivergent'):
2856
f6517779a7c4 warning: rename warning message
Boris Feld <boris.feld@octobus.net>
parents: 2855
diff changeset
   156
    TROUBLES['CONTENTDIVERGENT'] = 'divergent'
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   157
    context.basectx.contentdivergent = context.basectx.divergent
2856
f6517779a7c4 warning: rename warning message
Boris Feld <boris.feld@octobus.net>
parents: 2855
diff changeset
   158
else:
2858
4b934144ed11 messages: use hyphenated '{phase,content}-divergent' in user messages
Martin von Zweigbergk <martinvonz@google.com>
parents: 2856
diff changeset
   159
    TROUBLES['CONTENTDIVERGENT'] = 'content-divergent'
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   160
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   161
if not util.safehasattr(context.basectx, 'phasedivergent'):
2855
1db0137297f4 warning: rename bumped warning message
Boris Feld <boris.feld@octobus.net>
parents: 2854
diff changeset
   162
    TROUBLES['PHASEDIVERGENT'] = 'bumped'
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   163
    context.basectx.phasedivergent = context.basectx.bumped
2855
1db0137297f4 warning: rename bumped warning message
Boris Feld <boris.feld@octobus.net>
parents: 2854
diff changeset
   164
else:
2858
4b934144ed11 messages: use hyphenated '{phase,content}-divergent' in user messages
Martin von Zweigbergk <martinvonz@google.com>
parents: 2856
diff changeset
   165
    TROUBLES['PHASEDIVERGENT'] = 'phase-divergent'
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   166
2839
f9c8c754a528 context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2836
diff changeset
   167
if not util.safehasattr(context.basectx, 'isunstable'):
f9c8c754a528 context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2836
diff changeset
   168
    context.basectx.isunstable = context.basectx.troubled
f9c8c754a528 context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2836
diff changeset
   169
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   170
if not util.safehasattr(revset, 'orphan'):
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   171
    @eh.revset('orphan')
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   172
    def oprhanrevset(*args, **kwargs):
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   173
        return revset.unstable(*args, **kwargs)
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   174
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   175
if not util.safehasattr(revset, 'contentdivergent'):
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   176
    @eh.revset('contentdivergent')
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   177
    def contentdivergentrevset(*args, **kwargs):
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   178
        return revset.divergent(*args, **kwargs)
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   179
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   180
if not util.safehasattr(revset, 'phasedivergent'):
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   181
    @eh.revset('phasedivergent')
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   182
    def phasedivergentrevset(*args, **kwargs):
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   183
        return revset.bumped(*args, **kwargs)
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   184
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   185
if not util.safehasattr(context.basectx, 'instabilities'):
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   186
    def instabilities(self):
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   187
        """return the list of instabilities affecting this changeset.
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   188
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   189
        Instabilities are returned as strings. possible values are:
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   190
         - orphan,
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   191
         - phase-divergent,
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   192
         - content-divergent.
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   193
         """
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   194
        instabilities = []
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   195
        if self.orphan():
2849
95470e817c00 compat: fix instabilities compat
Boris Feld <boris.feld@octobus.net>
parents: 2847
diff changeset
   196
            instabilities.append('orphan')
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   197
        if self.phasedivergent():
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   198
            instabilities.append('phase-divergent')
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   199
        if self.contentdivergent():
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   200
            instabilities.append('content-divergent')
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   201
        return instabilities
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   202
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   203
    context.basectx.instabilities = instabilities
2840
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   204
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   205
# XXX: Better detection of property cache
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   206
if 'predecessors' not in dir(obsolete.obsstore):
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   207
    @property
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   208
    def predecessors(self):
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   209
        return self.precursors
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   210
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   211
    obsolete.obsstore.predecessors = predecessors
2845
9fc6a4615ae5 revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2841
diff changeset
   212
9fc6a4615ae5 revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2841
diff changeset
   213
if not util.safehasattr(obsolete, '_computeorphanset'):
9fc6a4615ae5 revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2841
diff changeset
   214
    obsolete._computeorphanset = obsolete.cachefor('orphan')(obsolete._computeunstableset)
2846
9c019996bce0 revset: divergent volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2845
diff changeset
   215
9c019996bce0 revset: divergent volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2845
diff changeset
   216
if not util.safehasattr(obsolete, '_computecontentdivergentset'):
9c019996bce0 revset: divergent volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2845
diff changeset
   217
    obsolete._computecontentdivergentset = obsolete.cachefor('contentdivergent')(obsolete._computedivergentset)
2847
a1805a65ce21 revset: bumped volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2846
diff changeset
   218
a1805a65ce21 revset: bumped volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2846
diff changeset
   219
if not util.safehasattr(obsolete, '_computephasedivergentset'):
a1805a65ce21 revset: bumped volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2846
diff changeset
   220
    obsolete._computephasedivergentset = obsolete.cachefor('phasedivergent')(obsolete._computebumpedset)
3064
7a1a4d1f0958 pager: add a function in compats to start pager
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2858
diff changeset
   221
7a1a4d1f0958 pager: add a function in compats to start pager
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2858
diff changeset
   222
def startpager(ui, cmd):
7a1a4d1f0958 pager: add a function in compats to start pager
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2858
diff changeset
   223
    """function to start a pager in case ui.pager() exists"""
7a1a4d1f0958 pager: add a function in compats to start pager
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2858
diff changeset
   224
    if util.safehasattr(ui, 'pager'):
7a1a4d1f0958 pager: add a function in compats to start pager
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2858
diff changeset
   225
        ui.pager(cmd)
3074
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   226
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   227
def duplicatecopies(repo, wctx, rev, fromrev, skiprev=None):
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   228
    # cannot use anything else until 4.3 support is dropped.
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   229
    assert wctx.rev() is None
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   230
    if copies.duplicatecopies.__code__.co_argcount < 5:
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   231
        # pre 4.4 duplicatecopies compat
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   232
        copies.duplicatecopies(repo, rev, fromrev, skiprev=skiprev)
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   233
    else:
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   234
        copies.duplicatecopies(repo, wctx, rev, fromrev, skiprev=skiprev)
3298
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   235
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   236
def memfilectx(repo, ctx, fctx, flags, copied, path):
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   237
    # XXX Would it be better at the module level?
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   238
    varnames = context.memfilectx.__init__.__code__.co_varnames
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   239
    ctxmandatory = varnames[2] == "changectx"
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   240
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   241
    if ctxmandatory:
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   242
        mctx = context.memfilectx(repo, ctx, fctx.path(), fctx.data(),
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   243
                                  islink='l' in flags,
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   244
                                  isexec='x' in flags,
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   245
                                  copied=copied.get(path))
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   246
    else:
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   247
        mctx = context.memfilectx(repo, fctx.path(), fctx.data(),
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   248
                                  islink='l' in flags,
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   249
                                  isexec='x' in flags,
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   250
                                  copied=copied.get(path))
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   251
    return mctx
3408
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   252
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   253
def getcachevfs(repo):
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   254
    cachevfs = getattr(repo, 'cachevfs', None)
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   255
    if cachevfs is None:
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   256
        cachevfs = vfsmod.vfs(repo.vfs.join('cache'))
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   257
        cachevfs.createmode = repo.store.createmode
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   258
    return cachevfs
3499
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   259
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   260
def strdiff(a, b, fn1, fn2):
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   261
    """ A version of mdiff.unidiff for comparing two strings
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   262
    """
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   263
    args = [a, '', b, '', fn1, fn2]
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   264
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   265
    # hg < 4.6 compat 8b6dd3922f70
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   266
    argspec = inspect.getargspec(mdiff.unidiff)
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   267
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   268
    if 'binary' in argspec.args:
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   269
        args.append(False)
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   270
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   271
    return mdiff.unidiff(*args)
3514
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   272
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   273
# date related
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   274
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   275
try:
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   276
    import mercurial.utils.dateutil
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   277
    makedate = mercurial.utils.dateutil.makedate
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   278
    parsedate = mercurial.utils.dateutil.parsedate
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   279
except ImportError as e:
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   280
    import mercurial.util
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   281
    makedate = mercurial.util.makedate
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   282
    parsedate = mercurial.util.parsedate
3524
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   283
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   284
def wireprotocommand(exthelper, name, args='', permission='pull'):
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   285
    if 3 <= len(wireproto.wireprotocommand.func_defaults):
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   286
        return wireproto.wireprotocommand(name, args, permission=permission)
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   287
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   288
    else:
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   289
        # <= hg-4.5 permission must be registered in dictionnary
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   290
        def decorator(func):
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   291
            @eh.extsetup
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   292
            def install(ui):
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   293
                hgweb_mod.perms[name] = permission
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   294
                wireproto.commands[name] = (func, args)
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   295
        return decorator