Defect #29413
closedMercurial 4.7 compatibility
0%
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
Updated by Frédéric Fondement over 6 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]
Updated by Frédéric Fondement over 6 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]
Updated by Go MAEDA over 6 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?
Updated by Frédéric Fondement over 6 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]
Updated by Go MAEDA over 6 years ago
- File 29413-mercurial-fix.diff 29413-mercurial-fix.diff added
- Category set to SCM
I made a patch file from #29413#note-5.
Updated by Go MAEDA over 6 years ago
LGTM. The test suite passed with both Mercurial 2.6.2 and 4.7.
Updated by Go MAEDA over 6 years ago
- Status changed from New to Resolved
- Assignee set to Go MAEDA
Updated by Go MAEDA over 6 years ago
- Status changed from Resolved to Closed
- Resolution set to Fixed
Committed. Thank you for reporting and fixing the issue.