Project

General

Profile

Actions

Defect #29413

closed

Mercurial 4.7 compatibility

Added by Frédéric Fondement over 5 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
SCM
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:
Resolution:
Fixed
Affected version:

Description

Hello,

Redmine 3.4.6 doesn't work with mercurial 4.7.
Logs say that in redmine/lib/redmine/scm/adapters/mercurial/redminehelper.py, module cmdutil does not have a command method.
Checking mercurial 4.6.1 source, this method is indeed deprecated ; it must have been removed from 4.7.
I got it back to work by following deprecation instruction which was "used registrar.command instead":

import re, time, cgi, urllib
from mercurial import cmdutil, commands, node, error, hg, registrar # added registrar

cmdtable = {}
command = registrar.command(cmdtable) # replaced cmdutil with registrar

Regards.


Files

29413-mercurial-fix.diff (866 Bytes) 29413-mercurial-fix.diff Patch by Frédéric Fondement (#29413#note-5) Go MAEDA, 2018-08-22 05:47
Actions #1

Updated by Go MAEDA over 5 years ago

  • Target version set to 3.3.9
Actions #2

Updated by Frédéric Fondement over 5 years ago

Another problem with exploring branches using hg 4.7.
It can be solved by modifying _changectx of redmine/scm/adapters/mercurial/redminehelper.py:

def _changectx(repo, rev):
    if hasattr(repo, 'branchtip') and rev in repo.branchmap(): # mercurial 4.7 doesn't select on branch name
        rev = repo.branchtip(rev)
    if hasattr(repo, 'changectx'):
        return repo.changectx(rev)
    else:
        return repo[rev]

Actions #3

Updated by Frédéric Fondement over 5 years ago

Maybe clever:

def _changectx(repo, rev):
    if isinstance(rev, str):
        rev = repo.lookup(rev)
    if hasattr(repo, 'changectx'):
        return repo.changectx(rev)
    else:
        return repo[rev]
Actions #4

Updated by Go MAEDA over 5 years ago

Frédéric Fondement, thank you for reporting the issue and submitting the workaround. Do you know it also work with Mercurial < 4.7?

Actions #5

Updated by Frédéric Fondement over 5 years ago

Good point !
The change I proposed fails with 4.0.

Here is the new version sucessfully tested with hg 4.7, 4.6, 4.5, 4.4, 4.1, 4.0, 3.9, 3.5, 2.6.2 (the older I can easily access - using pip):

import re, time, cgi, urllib
from mercurial import cmdutil, commands, node, error, hg, registrar

cmdtable = {}
command = registrar.command(cmdtable) if hasattr(registrar, 'command') else cmdutil.command(cmdtable)
def _changectx(repo, rev):
    if isinstance(rev, str):
        rev = repo.lookup(rev)
    if hasattr(repo, 'changectx'):
        return repo.changectx(rev)
    else:
        return repo[rev]
Actions #6

Updated by Go MAEDA over 5 years ago

I made a patch file from #29413#note-5.

Actions #7

Updated by Go MAEDA over 5 years ago

LGTM. The test suite passed with both Mercurial 2.6.2 and 4.7.

Actions #8

Updated by Go MAEDA over 5 years ago

  • Status changed from New to Resolved
  • Assignee set to Go MAEDA
Actions #9

Updated by Go MAEDA over 5 years ago

  • Status changed from Resolved to Closed
  • Resolution set to Fixed

Committed. Thank you for reporting and fixing the issue.

Actions

Also available in: Atom PDF