diff easyhg1.py @ 441:b616c9c6cfd2

Bring new-look easyhg.py into action
author Chris Cannam
date Tue, 28 Jun 2011 14:15:42 +0100
parents easyhg.py@8530c31536a7
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/easyhg1.py	Tue Jun 28 14:15:42 2011 +0100
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+#
+#    EasyMercurial
+#
+#    Based on hgExplorer by Jari Korhonen
+#    Copyright (c) 2010 Jari Korhonen
+#    Copyright (c) 2010 Chris Cannam
+#    Copyright (c) 2010 Queen Mary, University of London
+#    
+#    This program is free software; you can redistribute it and/or
+#    modify it under the terms of the GNU General Public License as
+#    published by the Free Software Foundation; either version 2 of the
+#    License, or (at your option) any later version.  See the file
+#    COPYING included with this distribution for more information.
+
+import sys
+from mercurial import ui, getpass, util
+from mercurial.i18n import _
+
+# The value assigned here may be modified during installation, by
+# replacing its default value with another one.  We can't compare
+# against its default value, because then the comparison text would
+# get modified as well.  So, compare using prefix only.
+#
+easyhg_import_path = 'NO_EASYHG_IMPORT_PATH'
+if not easyhg_import_path.startswith('NO_'):
+    # We have an installation path: append it twice, once with
+    # the Python version suffixed
+    version_suffix = "Py" + str(sys.version_info[0]) + "." + str(sys.version_info[1]);
+    sys.path.append(easyhg_import_path + "/" + version_suffix)
+    sys.path.append(easyhg_import_path)
+
+# Try to load the PyQt4 module that we need.  If this fails, we should
+# bail out later (in uisetup), because if we bail out now, Mercurial
+# will just continue without us and report success.  The invoking
+# application needs to be able to discover whether the module load
+# succeeded or not, so we need to ensure that Mercurial itself returns
+# failure if it didn't.
+#
+easyhg_pyqt_ok = True
+try:
+    from PyQt4 import QtGui
+except ImportError:
+    easyhg_pyqt_ok = False
+
+easyhg_qtapp = None
+
+def uisetup(ui):
+    if not easyhg_pyqt_ok:
+        raise util.Abort(_('Failed to load PyQt4 module required by easyhg.py'))
+    ui.__class__.prompt = easyhg_prompt
+    ui.__class__.getpass = easyhg_getpass
+    global easyhg_qtapp
+    easyhg_qtapp = QtGui.QApplication([])
+
+def easyhg_prompt(self, msg, default="y"):
+    if not self.interactive():
+        self.write(msg, ' ', default, "\n")
+        return default
+    isusername = False
+    if msg == _('user:'):
+        msg = _('Username for remote repository:')
+        isusername = True
+    d = QtGui.QInputDialog()
+    d.setInputMode(QtGui.QInputDialog.TextInput)
+    d.setTextEchoMode(QtGui.QLineEdit.Normal)
+    d.setLabelText(msg)
+    d.setWindowTitle(_('EasyMercurial: Information'))
+    d.show()
+    d.raise_()
+    ok = d.exec_()
+    r = d.textValue()
+    if not ok:
+        if isusername:
+            raise util.Abort(_('username entry cancelled'))
+        else:
+            raise util.Abort(_('information entry cancelled'))
+    if not r:
+        return default
+    return r
+
+def easyhg_getpass(self, prompt=None, default=None):
+    if not self.interactive():
+        return default
+    if not prompt or prompt == _('password:'):
+        prompt = _('Password for remote repository:');
+    d = QtGui.QInputDialog()
+    d.setInputMode(QtGui.QInputDialog.TextInput)
+    d.setTextEchoMode(QtGui.QLineEdit.Password)
+    d.setLabelText(prompt)
+    d.setWindowTitle(_('EasyMercurial: Password'))
+    d.show()
+    d.raise_()
+    ok = d.exec_()
+    r = d.textValue()
+    if not ok:
+        raise util.Abort(_('password entry cancelled'))
+    if not r:
+        return default
+    return r
+
+