hgext3rd/evolve/compat.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Thu, 19 Apr 2018 16:01:49 +0200
changeset 3693 105d2d2c6a2e
parent 3692 f9988919d69e
child 3694 c0d5e0929f8b
permissions -rw-r--r--
compat: drop obsutile layer Mercurial 4.2 is no longer supported.
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,
3693
105d2d2c6a2e compat: drop obsutile layer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3692
diff changeset
    19
    obsutil,
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
    20
    revset,
2751
4f560f117fff compat: use 'safehasattr' over 'hasattr'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2693
diff changeset
    21
    util,
3692
f9988919d69e compat: drop vfsmod compat layer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3680
diff changeset
    22
    vfs as vfsmod,
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    23
)
3524
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
    24
from mercurial.hgweb import hgweb_mod
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    25
3483
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    26
# hg < 4.6 compat (c8e2d6ed1f9e)
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    27
try:
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    28
    from mercurial import logcmdutil
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    29
    changesetdisplayer = logcmdutil.changesetdisplayer
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    30
    changesetprinter = logcmdutil.changesetprinter
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    31
    displaygraph = logcmdutil.displaygraph
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    32
except (AttributeError, ImportError):
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    33
    from mercurial import cmdutil
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    34
    changesetdisplayer = cmdutil.show_changeset
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    35
    changesetprinter = cmdutil.changeset_printer
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    36
    displaygraph = cmdutil.displaygraph
f03845bfd015 compat: add wrapper for logcmdutil functions
Yuya Nishihara <yuya@tcha.org>
parents: 3408
diff changeset
    37
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    38
from . import (
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    39
    exthelper,
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    40
)
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    41
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    42
eh = exthelper.exthelper()
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    43
3560
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    44
# 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
    45
# for hg < 4.3
3611
c912eaf29eec compat: call current obsolete.createmarkers(), not one from load time
Martin von Zweigbergk <martinvonz@google.com>
parents: 3575
diff changeset
    46
originalcreatemarkers = obsolete.createmarkers
3575
97530d6e340d compat: make override of createmarkers work on wrapped function
Martin von Zweigbergk <martinvonz@google.com>
parents: 3560
diff changeset
    47
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
    48
    originalcreatemarkers = originalcreatemarkers.func
97530d6e340d compat: make override of createmarkers work on wrapped function
Martin von Zweigbergk <martinvonz@google.com>
parents: 3560
diff changeset
    49
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
    50
    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
    51
                      operation=None):
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    52
        return obsolete.createmarkers(repo, relations, flag, date, metadata)
3611
c912eaf29eec compat: call current obsolete.createmarkers(), not one from load time
Martin von Zweigbergk <martinvonz@google.com>
parents: 3575
diff changeset
    53
else:
c912eaf29eec compat: call current obsolete.createmarkers(), not one from load time
Martin von Zweigbergk <martinvonz@google.com>
parents: 3575
diff changeset
    54
    def createmarkers(*args, **kwargs):
c912eaf29eec compat: call current obsolete.createmarkers(), not one from load time
Martin von Zweigbergk <martinvonz@google.com>
parents: 3575
diff changeset
    55
        return obsolete.createmarkers(*args, **kwargs)
3560
f61a23a84dac compat: add wrapper for obsolete.createmarkers() that accepts "operation" arg
Martin von Zweigbergk <martinvonz@google.com>
parents: 3524
diff changeset
    56
2751
4f560f117fff compat: use 'safehasattr' over 'hasattr'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2693
diff changeset
    57
if not util.safehasattr(hg, '_copycache'):
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    58
    # exact copy of relevantmarkers as in Mercurial-176d1a0ce385
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    59
    # this fixes relevant markers computation for version < hg-4.3
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    60
    @eh.wrapfunction(obsolete.obsstore, 'relevantmarkers')
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    61
    def relevantmarkers(orig, self, nodes):
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    62
        """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
    63
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    64
        "relevant" to a set of nodes mean:
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    65
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    66
        - marker that use this changeset as successor
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    67
        - prune marker of direct children on this changeset
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    68
        - 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
    69
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    70
        It is a set so you cannot rely on order.
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    71
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    72
        Backport of mercurial changeset 176d1a0ce385 for version < 4.3
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
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    75
        pendingnodes = set(nodes)
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    76
        seenmarkers = set()
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    77
        seennodes = set(pendingnodes)
2840
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
    78
        precursorsmarkers = self.predecessors
2525
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    79
        succsmarkers = self.successors
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    80
        children = self.children
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    81
        while pendingnodes:
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    82
            direct = set()
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    83
            for current in pendingnodes:
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    84
                direct.update(precursorsmarkers.get(current, ()))
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    85
                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
    86
                direct.update(pruned)
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    87
                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
    88
                direct.update(pruned)
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    89
            direct -= seenmarkers
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    90
            pendingnodes = set([m[0] for m in direct])
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    91
            seenmarkers |= direct
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    92
            pendingnodes -= seennodes
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    93
            seennodes |= pendingnodes
5adb8bdb935e compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    94
        return seenmarkers
2693
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    95
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    96
# 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
    97
def successorssets(*args, **kwargs):
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
    98
    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
    99
    if func is None:
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   100
        func = obsolete.successorssets
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   101
    return func(*args, **kwargs)
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   102
f4b0351fa813 evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2525
diff changeset
   103
# 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
   104
# 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
   105
def allprecursors(*args, **kwargs):
2841
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   106
    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
   107
    if func is None:
2841
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   108
        func = getattr(obsutil, 'allprecursors', None)
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   109
        if func is None:
7f2943b0c8ea obsolete: allprecursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2840
diff changeset
   110
            func = obsolete.allprecursors
2693
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)
2752
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   112
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   113
# 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
   114
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
   115
    """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
   116
    """
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   117
    bookmarks = repo._bookmarks
4457aa1d81aa compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2751
diff changeset
   118
    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
   119
        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
   120
    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
   121
        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
   122
            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
   123
        else:
2794
5595fb96d922 compat: use old style method to update bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2752
diff changeset
   124
            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
   125
    bookmarks.recordchange(tr)
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   126
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
   127
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
   128
    # 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
   129
    # 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
   130
    # 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
   131
    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
   132
        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
   133
    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
   134
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   135
# Evolution renaming compat
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   136
2854
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   137
TROUBLES = {}
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   138
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   139
if not util.safehasattr(context.basectx, 'orphan'):
2854
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   140
    TROUBLES['ORPHAN'] = 'unstable'
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   141
    context.basectx.orphan = context.basectx.unstable
2854
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   142
else:
66796d7b5415 warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents: 2849
diff changeset
   143
    TROUBLES['ORPHAN'] = 'orphan'
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   144
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   145
if not util.safehasattr(context.basectx, 'contentdivergent'):
2856
f6517779a7c4 warning: rename warning message
Boris Feld <boris.feld@octobus.net>
parents: 2855
diff changeset
   146
    TROUBLES['CONTENTDIVERGENT'] = 'divergent'
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   147
    context.basectx.contentdivergent = context.basectx.divergent
2856
f6517779a7c4 warning: rename warning message
Boris Feld <boris.feld@octobus.net>
parents: 2855
diff changeset
   148
else:
2858
4b934144ed11 messages: use hyphenated '{phase,content}-divergent' in user messages
Martin von Zweigbergk <martinvonz@google.com>
parents: 2856
diff changeset
   149
    TROUBLES['CONTENTDIVERGENT'] = 'content-divergent'
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   150
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   151
if not util.safehasattr(context.basectx, 'phasedivergent'):
2855
1db0137297f4 warning: rename bumped warning message
Boris Feld <boris.feld@octobus.net>
parents: 2854
diff changeset
   152
    TROUBLES['PHASEDIVERGENT'] = 'bumped'
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   153
    context.basectx.phasedivergent = context.basectx.bumped
2855
1db0137297f4 warning: rename bumped warning message
Boris Feld <boris.feld@octobus.net>
parents: 2854
diff changeset
   154
else:
2858
4b934144ed11 messages: use hyphenated '{phase,content}-divergent' in user messages
Martin von Zweigbergk <martinvonz@google.com>
parents: 2856
diff changeset
   155
    TROUBLES['PHASEDIVERGENT'] = 'phase-divergent'
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   156
2839
f9c8c754a528 context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2836
diff changeset
   157
if not util.safehasattr(context.basectx, 'isunstable'):
f9c8c754a528 context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2836
diff changeset
   158
    context.basectx.isunstable = context.basectx.troubled
f9c8c754a528 context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2836
diff changeset
   159
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   160
if not util.safehasattr(revset, 'orphan'):
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   161
    @eh.revset('orphan')
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   162
    def oprhanrevset(*args, **kwargs):
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   163
        return revset.unstable(*args, **kwargs)
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   164
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   165
if not util.safehasattr(revset, 'contentdivergent'):
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   166
    @eh.revset('contentdivergent')
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   167
    def contentdivergentrevset(*args, **kwargs):
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   168
        return revset.divergent(*args, **kwargs)
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   169
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   170
if not util.safehasattr(revset, 'phasedivergent'):
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   171
    @eh.revset('phasedivergent')
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   172
    def phasedivergentrevset(*args, **kwargs):
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   173
        return revset.bumped(*args, **kwargs)
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   174
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   175
if not util.safehasattr(context.basectx, 'instabilities'):
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   176
    def instabilities(self):
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   177
        """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
   178
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   179
        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
   180
         - orphan,
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   181
         - phase-divergent,
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   182
         - content-divergent.
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   183
         """
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   184
        instabilities = []
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   185
        if self.orphan():
2849
95470e817c00 compat: fix instabilities compat
Boris Feld <boris.feld@octobus.net>
parents: 2847
diff changeset
   186
            instabilities.append('orphan')
2836
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   187
        if self.phasedivergent():
feaa52680682 log: bumped was renamed into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 2835
diff changeset
   188
            instabilities.append('phase-divergent')
2835
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   189
        if self.contentdivergent():
20c2499ce8bc log: divergent was renamed into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 2834
diff changeset
   190
            instabilities.append('content-divergent')
2834
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   191
        return instabilities
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   192
38db1466c6fb log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents: 2794
diff changeset
   193
    context.basectx.instabilities = instabilities
2840
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   194
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   195
# XXX: Better detection of property cache
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   196
if 'predecessors' not in dir(obsolete.obsstore):
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   197
    @property
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   198
    def predecessors(self):
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   199
        return self.precursors
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   200
dfad30be866c context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2839
diff changeset
   201
    obsolete.obsstore.predecessors = predecessors
2845
9fc6a4615ae5 revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2841
diff changeset
   202
9fc6a4615ae5 revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2841
diff changeset
   203
if not util.safehasattr(obsolete, '_computeorphanset'):
9fc6a4615ae5 revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2841
diff changeset
   204
    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
   205
9c019996bce0 revset: divergent volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2845
diff changeset
   206
if not util.safehasattr(obsolete, '_computecontentdivergentset'):
9c019996bce0 revset: divergent volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2845
diff changeset
   207
    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
   208
a1805a65ce21 revset: bumped volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2846
diff changeset
   209
if not util.safehasattr(obsolete, '_computephasedivergentset'):
a1805a65ce21 revset: bumped volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents: 2846
diff changeset
   210
    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
   211
7a1a4d1f0958 pager: add a function in compats to start pager
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2858
diff changeset
   212
def startpager(ui, cmd):
7a1a4d1f0958 pager: add a function in compats to start pager
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2858
diff changeset
   213
    """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
   214
    if util.safehasattr(ui, 'pager'):
7a1a4d1f0958 pager: add a function in compats to start pager
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2858
diff changeset
   215
        ui.pager(cmd)
3074
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   216
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   217
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
   218
    # 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
   219
    assert wctx.rev() is None
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   220
    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
   221
        # pre 4.4 duplicatecopies compat
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   222
        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
   223
    else:
8d57acde165d compat: fix compatibility with new duplicatecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3064
diff changeset
   224
        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
   225
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   226
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
   227
    # 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
   228
    varnames = context.memfilectx.__init__.__code__.co_varnames
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   229
    ctxmandatory = varnames[2] == "changectx"
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   230
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   231
    if ctxmandatory:
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   232
        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
   233
                                  islink='l' in flags,
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   234
                                  isexec='x' in flags,
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   235
                                  copied=copied.get(path))
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   236
    else:
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   237
        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
   238
                                  islink='l' in flags,
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   239
                                  isexec='x' in flags,
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   240
                                  copied=copied.get(path))
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3283
diff changeset
   241
    return mctx
3408
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   242
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   243
def getcachevfs(repo):
f4ea9652661d cachevfs: use a compatibility later for all access
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3298
diff changeset
   244
    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
   245
    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
   246
        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
   247
        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
   248
    return cachevfs
3499
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   249
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   250
def strdiff(a, b, fn1, fn2):
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   251
    """ 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
   252
    """
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   253
    args = [a, '', b, '', fn1, fn2]
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   254
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   255
    # hg < 4.6 compat 8b6dd3922f70
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   256
    argspec = inspect.getargspec(mdiff.unidiff)
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   257
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   258
    if 'binary' in argspec.args:
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   259
        args.append(False)
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   260
512706514555 obsfate: fix changeset description diff computing
Boris Feld <boris.feld@octobus.net>
parents: 3483
diff changeset
   261
    return mdiff.unidiff(*args)
3514
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   262
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   263
# date related
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   264
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   265
try:
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   266
    import mercurial.utils.dateutil
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   267
    makedate = mercurial.utils.dateutil.makedate
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   268
    parsedate = mercurial.utils.dateutil.parsedate
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   269
except ImportError as e:
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   270
    import mercurial.util
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   271
    makedate = mercurial.util.makedate
498f782ccb4b compat: add compat layer for date related functions
Boris Feld <boris.feld@octobus.net>
parents: 3499
diff changeset
   272
    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
   273
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   274
def wireprotocommand(exthelper, name, args='', permission='pull'):
3680
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   275
    try:
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   276
        # Since b4d85bc1
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   277
        from mercurial.wireprotov1server import wireprotocommand
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   278
        return wireprotocommand(name, args, permission=permission)
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   279
    except (ImportError, AttributeError):
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   280
        from mercurial import wireproto
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   281
3524
6d4095e6bdd3 obsdiscovery: add compatibility layer to register wireproto command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3514
diff changeset
   282
    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
   283
        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
   284
3680
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   285
    # <= hg-4.5 permission must be registered in dictionnary
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   286
    def decorator(func):
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   287
        @eh.extsetup
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   288
        def install(ui):
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   289
            hgweb_mod.perms[name] = permission
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   290
            wireproto.commands[name] = (func, args)
e2a91d4d207d evolve: handle wireproto module deletion for registering new commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3668
diff changeset
   291
    return decorator
3616
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   292
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   293
# mercurial <= 4.5 do not have the updateresult object
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   294
try:
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   295
    from mercurial.merge import updateresult
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   296
except (ImportError, AttributeError):
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   297
    updateresult = None
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   298
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   299
def hasconflict(upres):
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   300
    if updateresult is None:
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   301
        return bool(upres[-1])
f6d629514607 compat: use updateresult API if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3575
diff changeset
   302
    return bool(upres.unresolvedcount)