Vote #79472
完了Mercurial 4.7 compatibility
0%
説明
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.
journals
--------------------------------------------------------------------------------
Another problem with exploring branches using hg 4.7.
It can be solved by modifying _changectx of redmine/scm/adapters/mercurial/redminehelper.py:
<pre>
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]
</pre>
--------------------------------------------------------------------------------
Maybe clever:
<pre>
def _changectx(repo, rev):
if isinstance(rev, str):
rev = repo.lookup(rev)
if hasattr(repo, 'changectx'):
return repo.changectx(rev)
else:
return repo[rev]
</pre>
--------------------------------------------------------------------------------
Frédéric Fondement, thank you for reporting the issue and submitting the workaround. Do you know it also work with Mercurial < 4.7?
--------------------------------------------------------------------------------
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):
<pre>
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)
</pre>
<pre>
def _changectx(repo, rev):
if isinstance(rev, str):
rev = repo.lookup(rev)
if hasattr(repo, 'changectx'):
return repo.changectx(rev)
else:
return repo[rev]
</pre>
--------------------------------------------------------------------------------
I made a patch file from #29413#note-5.
--------------------------------------------------------------------------------
LGTM. The test suite passed with both Mercurial 2.6.2 and 4.7.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Committed. Thank you for reporting and fixing the issue.
--------------------------------------------------------------------------------