Rev 4: Very basic SettingRecorder which can save the default target branch in http://bzr.arbash-meinel.com/branches/bzr/merge_into
John Arbash Meinel
john at arbash-meinel.com
Fri Dec 21 21:28:40 GMT 2007
At http://bzr.arbash-meinel.com/branches/bzr/merge_into
------------------------------------------------------------
revno: 4
revision-id:john at arbash-meinel.com-20071221212834-qjjsrrb2c0zv8ado
parent: john at arbash-meinel.com-20071221205426-rt82hrvdevdp85ph
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: merge_into
timestamp: Fri 2007-12-21 15:28:34 -0600
message:
Very basic SettingRecorder which can save the default target branch
modified:
bzr_merge_into.py bzr_merge_into.py-20071221192513-1fyh868lls6qugcq-1
bzr_merge_into.wxg bzr_merge_into.wxg-20071221185509-khngkqvqe1jjzb2i-1
-------------- next part --------------
=== modified file 'bzr_merge_into.py'
--- a/bzr_merge_into.py 2007-12-21 20:54:26 +0000
+++ b/bzr_merge_into.py 2007-12-21 21:28:34 +0000
@@ -20,6 +20,7 @@
import errno
import os
+import re
import subprocess
import sys
import time
@@ -91,6 +92,11 @@
# We want to poll, but we also want to grab sys.stdout and
# sys.stderr, how do we do that?
while p.poll() is None and not self.canceled:
+ # TODO: Rather than spinning here without showing the user
+ # anything, we would really like to create a fake terminal, and
+ # have it show the output from the child command.
+ # We basically need to poll p.stdout and p.stderr, and write
+ # them to a text control.
self.gauge_progress.Pulse()
wx.Yield()
time.sleep(0.1)
@@ -134,7 +140,7 @@
self.text_merge_patch = wx.TextCtrl(self, -1, "")
self.label_2 = wx.StaticText(self, -1, "Target Branch")
self.btn_browse_branch = wx.Button(self, -1, "Browse")
- self.text_target_branch = wx.TextCtrl(self, -1, "/home/jameinel/dev/bzr/jam-integration")
+ self.text_target_branch = wx.TextCtrl(self, -1, "")
self.radio_pull_overwrite = wx.RadioButton(self, -1, "pull --overwrite", style=wx.RB_GROUP)
self.radio_merge = wx.RadioButton(self, -1, "merge")
self.button_1 = wx.Button(self, wx.ID_CANCEL, "")
@@ -206,9 +212,13 @@
self.text_target_branch.SetValue(dlg.GetPath())
def onCancel(self, event): # wxGlade: MergeIntoFrame.<event_handler>
+ global canceled
+ canceled = True
self.Close()
def onOk(self, event): # wxGlade: MergeIntoFrame.<event_handler>
+ global canceled
+ canceled = True
patch = self.text_merge_patch.GetValue()
if not patch:
dlg = wx.MessageDialog(self,
@@ -256,27 +266,98 @@
err_dlg.ShowModal()
else:
# We are done here
+ canceled = False
+ app.setting_recorder.update('target_branch',
+ self.text_target_branch.GetValue())
self.Close()
# end of class MergeIntoFrame
+class SettingRecorder(object):
+ """Just a *very* simple class that tracks a couple basic settings."""
+
+ setting_re = re.compile('^(?P<key>\S+)\s*=\s*(?P<value>.*)$')
+
+ def __init__(self, filename):
+ self.filename = filename
+ self.lines = []
+ self.settings = {}
+ # Map from setting to the line it was found on
+ self.setting_line = {}
+
+ def parse(self):
+ # Process the settings file
+ try:
+ f = open(self.filename, 'rb')
+ except IOError, e:
+ if e.errno in (errno.ENOENT,):
+ self.lines = []
+ return
+ else:
+ raise
+ try:
+ self.lines = f.readlines()
+ finally:
+ f.close()
+ for idx, line in enumerate(self.lines):
+ if line.startswith('#'):
+ continue
+ m = self.setting_re.match(line)
+ if m:
+ self.settings[m.group('key')] = m.group('value')
+ self.setting_line[m.group('key')] = idx
+
+ def get(self, key):
+ return self.settings.get(key, None)
+
+ def update(self, key, value):
+ """Change a setting to something new."""
+ self.settings[key] = value
+ new_line = '%s = %s\n' % (key, value)
+ idx = self.setting_line.get(key, None)
+ if idx is not None:
+ self.lines[idx] = new_line
+ else:
+ self.setting_line[key] = len(self.lines)
+ self.lines.append(new_line)
+
+ def write(self):
+ f = open(self.filename, 'wb')
+ try:
+ f.writelines(self.lines)
+ finally:
+ f.close()
+
class MergeIntoApp(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
merge_into = MergeIntoFrame(None, -1, "")
self.SetTopWindow(merge_into)
+ self.setting_recorder = SettingRecorder(
+ os.path.expanduser('~/.bzr_merge_into_guirc'))
+ self.setting_recorder.parse()
if len(sys.argv) > 1:
patch = sys.argv[1]
merge_into.text_merge_patch.SetValue(patch)
+ target = None
if len(sys.argv) > 2:
target = sys.argv[2]
+ else:
+ target = self.setting_recorder.get('target_branch')
+ if target is not None:
merge_into.text_target_branch.SetValue(target)
merge_into.Show()
+ self.merge_into = merge_into
return 1
# end of class MergeIntoApp
+canceled = True
+
if __name__ == "__main__":
app = MergeIntoApp(0)
app.MainLoop()
+ merge_into = app.merge_into
+ if not canceled:
+ app.setting_recorder.write()
=== modified file 'bzr_merge_into.wxg'
--- a/bzr_merge_into.wxg 2007-12-21 20:54:26 +0000
+++ b/bzr_merge_into.wxg 2007-12-21 21:28:34 +0000
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- generated by wxGlade 0.5 on Fri Dec 21 14:44:03 2007 -->
+<!-- generated by wxGlade 0.5 on Fri Dec 21 15:26:55 2007 -->
<application path="bzr_merge_into.py" name="" class="MergeIntoApp" option="0" language="python" top_window="merge_into" encoding="UTF-8" use_gettext="0" overwrite="0" use_new_namespace="1" for_version="2.8" is_template="0">
<object class="MergeIntoFrame" name="merge_into" base="EditFrame">
More information about the bazaar-commits
mailing list