PageRenderTime 1150ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/hgconf/uname_gtk.py

https://bitbucket.org/sborho/hgconfig
Python | 139 lines | 126 code | 8 blank | 5 comment | 7 complexity | b70dac751ee5255876a3b6137d64721f MD5 | raw file
  1. # Username dialog (Gtk)
  2. from mercurial import util
  3. import iniparse
  4. import os, os.path, socket
  5. import sys
  6. try:
  7. import pygtk
  8. import gtk
  9. import gtk.glade
  10. pygtk.require("2.0")
  11. except:
  12. sys.exit(1)
  13. class UsernameDialogGtk:
  14. def __init__(self, hgui, repo, tolocal):
  15. self.hgui = hgui
  16. self.repo = repo
  17. #Set the Glade file
  18. p = os.path.dirname(os.path.abspath(__file__))
  19. self.gladefile = os.sep.join([p, "uname_dialog.glade"])
  20. if not os.path.exists(self.gladefile): # MSI path layout
  21. self.gladefile = os.sep.join([p, '..', '..', '..',
  22. 'share', 'hgconf', 'uname_dialog.glade'])
  23. self.wTree = gtk.glade.XML(self.gladefile)
  24. #Get the Main Window, and connect the "destroy" event
  25. self.window = self.wTree.get_widget("usernameDialog")
  26. self.window.connect("destroy", gtk.main_quit)
  27. #Create our dictionary and connect it
  28. dic = { "on_okButton_clicked" : self.okButton_clicked,
  29. "on_cancelButton_clicked" : gtk.main_quit,
  30. "on_usernameDialog_destroy" : gtk.main_quit }
  31. self.wTree.signal_autoconnect(dic)
  32. self.usernameComboBox = self.wTree.get_widget('usernameComboBox')
  33. self.textEntry = self.usernameComboBox.get_child()
  34. self.localRadioButton = self.wTree.get_widget('localRadioButton')
  35. # Get current username or decent default guess
  36. try:
  37. user = os.environ.get("HGUSER") or \
  38. self.hgui.config("ui", "username") or \
  39. os.environ.get("EMAIL") or \
  40. '%s@%s' % (util.getuser(), socket.getfqdn())
  41. except KeyError:
  42. user = ''
  43. # If no localrepo is provided, disable that option
  44. if not repo:
  45. self.localRadioButton.set_enabled(False)
  46. elif tolocal:
  47. self.localRadioButton.set_active(True)
  48. self.textEntry.set_text(user)
  49. self.configfn = os.path.expanduser("~/.config/hgconfig")
  50. self.unamehist = []
  51. if not os.path.exists(self.configfn):
  52. return
  53. ini = iniparse.INIConfig(file(self.configfn))
  54. if 'uname-history' in list(ini):
  55. for i in xrange(0, 10):
  56. try:
  57. text = ini['uname-history']['%d' % i]
  58. self.unamehist.append(text)
  59. except:
  60. break
  61. if user in self.unamehist:
  62. self.unamehist.remove(user)
  63. self.unamehist.append(user)
  64. # Fill combo box
  65. liststore = gtk.ListStore(str)
  66. for name in self.unamehist:
  67. iter = liststore.append()
  68. liststore.set(iter, 0, name)
  69. self.usernameComboBox.set_model(liststore)
  70. self.usernameComboBox.set_text_column(0)
  71. def okButton_clicked(self, state):
  72. # Add new username to history
  73. username = str(self.textEntry.get_text())
  74. if username in self.unamehist:
  75. self.unamehist.remove(username)
  76. self.unamehist.append(username)
  77. # Create empty config file if necessary
  78. configdir = os.path.dirname(self.configfn)
  79. if not os.path.exists(configdir):
  80. os.mkdir(configdir)
  81. if not os.path.exists(self.configfn):
  82. f = open(self.configfn, "w")
  83. f.write("# Generated by hg-config\n")
  84. f.close()
  85. # Store username history 'self.unamehist'
  86. ini = iniparse.INIConfig(file(self.configfn))
  87. if 'uname-history' not in list(ini):
  88. ini.new_namespace('uname-history')
  89. for i, name in enumerate(self.unamehist):
  90. ini['uname-history']['%d' % i] = name
  91. f = open(self.configfn, "w")
  92. f.write(str(ini))
  93. f.close()
  94. if self.localRadioButton.get_active():
  95. path = [os.sep.join([self.repo.root, '.hg', 'hgrc'])]
  96. else:
  97. path = util.user_rcpath()
  98. for fn in path:
  99. if os.path.exists(fn):
  100. break
  101. else:
  102. fn = path[0]
  103. self.hgui.warn("Creating %s\n" % fn)
  104. f = open(fn, "w")
  105. f.write("# Generated by hg-config\n")
  106. f.close()
  107. ini = iniparse.INIConfig(file(fn))
  108. if 'ui' not in list(ini):
  109. ini.new_namespace('ui')
  110. if 'hooks' not in list(ini):
  111. ini.new_namespace('hooks')
  112. ini['ui']['username'] = username
  113. ini['hooks']['precommit.username'] = ''
  114. f = open(fn, "w")
  115. f.write(str(ini))
  116. f.close()
  117. # set username for this commit
  118. self.hgui.setconfig("ui", "username", username)
  119. gtk.main_quit()