vcs.mercurial: Shell out to hg instead of using the mercurial package
authorW. Trevor King <wking@tremily.us>
Mon, 27 Jan 2014 18:01:42 +0000 (10:01 -0800)
committerW. Trevor King <wking@tremily.us>
Mon, 27 Jan 2014 18:01:42 +0000 (10:01 -0800)
Mercurial doesn't have Python 3 support, and has no plans for adding
it in the near future [1].  It's a pretty painless conversion to shell
out instead (as we already do for Git), so go that route instead.

[1]: http://mercurial.selenic.com/wiki/SupportedPythonVersions#Python_3.x_support

update_copyright/vcs/mercurial.py

index 6deee3c8baf7012f63f990f22560b8c6e36a2fa4..09700d2108dcb7d9e5c11b34e62b21b53da4744b 100644 (file)
 # You should have received a copy of the GNU General Public License along with
 # update-copyright.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import absolute_import
-
-import io as _io
-import os as _os
-import sys as _sys
-
-import mercurial as _mercurial
-from mercurial.__version__ import version as _version
-import mercurial.dispatch as _mercurial_dispatch
-
 from . import VCSBackend as _VCSBackend
 from . import utils as _utils
 
@@ -37,22 +27,9 @@ class MercurialBackend (_VCSBackend):
         self._version = _version
 
     def _hg_cmd(*args):
-        cwd = _os.getcwd()
-        stdout = _sys.stdout
-        stderr = _sys.stderr
-        tmp_stdout = _io.StringIO()
-        tmp_stderr = _io.StringIO()
-        _sys.stdout = tmp_stdout
-        _sys.stderr = tmp_stderr
-        _os.chdir(self._root)
-        try:
-            _mercurial_dispatch.dispatch(list(args))
-        finally:
-            _os.chdir(cwd)
-            _sys.stdout = stdout
-            _sys.stderr = stderr
-        return (tmp_stdout.getvalue().rstrip('\n'),
-                tmp_stderr.getvalue().rstrip('\n'))
+        status,stdout,stderr = _utils.invoke(
+            ['hg'] + list(args), cwd=self._root, unicode_output=True)
+        return stdout.rstrip('\n')
 
     def _years(self, filename=None):
         args = [