← Back to team overview

mythbuntu-dev team mailing list archive

[Merge] lp:~tgm4883/mythbuntu/mythbuntu-common2 into lp:~mythbuntu-dev/mythbuntu/mythbuntu-common

 

Thomas Mashos has proposed merging lp:~tgm4883/mythbuntu/mythbuntu-common2 into lp:~mythbuntu-dev/mythbuntu/mythbuntu-common.

Requested reviews:
  mythbuntu-dev (mythbuntu-dev)

For more details, see:
https://code.launchpad.net/~tgm4883/mythbuntu/mythbuntu-common2/+merge/84648

Merged -repos into -common for inclusion by default
-- 
https://code.launchpad.net/~tgm4883/mythbuntu/mythbuntu-common2/+merge/84648
Your team mythbuntu-dev is requested to review the proposed merge of lp:~tgm4883/mythbuntu/mythbuntu-common2 into lp:~mythbuntu-dev/mythbuntu/mythbuntu-common.
=== modified file 'debian/changelog'
--- debian/changelog	2011-10-05 05:11:43 +0000
+++ debian/changelog	2011-12-06 18:33:26 +0000
@@ -1,8 +1,13 @@
 mythbuntu-common (0.63) oneiric; urgency=low
 
+  [ Mario Limonciello ]
   * Fix hang in installer plugin myth-drivers. (LP: #867856)
 
- -- Mario Limonciello <Mario_Limonciello@xxxxxxxx>  Wed, 05 Oct 2011 00:11:38 -0500
+  [ Thomas Mashos ]
+  * Merged mythbuntu-repos into this package
+  * Added mythbuntu-repos to mythbuntu-common depends
+
+ -- Thomas Mashos <thomas@xxxxxxxxxx>  Tue, 06 Dec 2011 10:29:59 -0800
 
 mythbuntu-common (0.62) oneiric; urgency=low
 

=== modified file 'debian/control'
--- debian/control	2011-06-29 19:48:23 +0000
+++ debian/control	2011-12-06 18:33:26 +0000
@@ -19,7 +19,8 @@
          python-gconf,
          lsb-release,
          software-properties-gtk,
-         libdvdread4
+         libdvdread4,
+         mythbuntu-repos
 XB-Python-Version: ${python:Versions}
 Recommends: nvidia-common, mythbuntu-bare-client
 Suggests: mythbuntu-bare-console
@@ -29,3 +30,11 @@
  .
  Depending upon the usage, this application may also be useful by other
  projects needing to accomplish similar tasks.
+
+Package: mythbuntu-repos
+Architecture: all
+Depends: ${shlibs:Depends}, ${misc:Depends}, mythbuntu-control-centre
+Description: Mythbuntu repository installer
+ This package will install and configure the mythbuntu repositories. This
+ includes the MythTV-Updates, Mythbuntu-Updates, and XMLTV repositories.
+ (depending on user choice during install).

=== removed file 'debian/install'
--- debian/install	2011-06-29 19:21:50 +0000
+++ debian/install	1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-debian/mythbuntu.make usr/share/mythbuntu

=== added file 'debian/mythbuntu-common.install'
--- debian/mythbuntu-common.install	1970-01-01 00:00:00 +0000
+++ debian/mythbuntu-common.install	2011-12-06 18:33:26 +0000
@@ -0,0 +1,2 @@
+debian/mythbuntu.make usr/share/mythbuntu
+

=== added file 'debian/mythbuntu-repos.install'
--- debian/mythbuntu-repos.install	1970-01-01 00:00:00 +0000
+++ debian/mythbuntu-repos.install	2011-12-06 18:33:26 +0000
@@ -0,0 +1,1 @@
+mythbuntu-repos/* /usr/share/mythbuntu/plugins/

=== added file 'debian/mythbuntu-repos.prerm'
--- debian/mythbuntu-repos.prerm	1970-01-01 00:00:00 +0000
+++ debian/mythbuntu-repos.prerm	2011-12-06 18:33:26 +0000
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+case "$1" in
+    remove|purge)
+	release=$(lsb_release -c -s)
+	RMBLDS="`cat /usr/share/mythbuntu/plugins/mythbuntu-repos.db | grep $release | cut -f 2`"
+	for version in $RMBLDS
+	do
+		## Fixes for 0.21 and 0.22 PPA's
+	        if [ "$version" = "0.21" ]; then
+	          version="fixes-0.21"
+	        elif [ "$version" = "0.22" ]; then
+	          version="trunk-0.22"
+	        elif [ "$version" = "0.24.x" ]; then
+	          version="0.24"
+	        fi
+		apt-add-repository --remove ppa:mythbuntu/$version || true
+	done
+	apt-add-repository -r ppa:mythbuntu/testing || true
+    apt-add-repository -r ppa:mythbuntu/xmltv || true
+	;;
+esac

=== added directory 'mythbuntu-repos'
=== added file 'mythbuntu-repos/mythbuntu-repos.db'
--- mythbuntu-repos/mythbuntu-repos.db	1970-01-01 00:00:00 +0000
+++ mythbuntu-repos/mythbuntu-repos.db	2011-12-06 18:33:26 +0000
@@ -0,0 +1,18 @@
+MYTHTV_RELEASE	0.24.1
+TRUNKPASS	YouMustBeThisTallToRide
+
+karmic	0.22
+karmic	0.23
+karmic	0.23.1
+lucid	0.23
+lucid	0.23.1
+lucid	0.24.x
+lucid	0.25
+maverick	0.23.1
+maverick	0.24.x
+natty	0.24.x
+natty	0.25
+oneiric	0.24.x
+oneiric	0.25
+precise 0.24.x
+precise 0.25

=== added directory 'mythbuntu-repos/python'
=== added file 'mythbuntu-repos/python/mythbuntu_repos.py'
--- mythbuntu-repos/python/mythbuntu_repos.py	1970-01-01 00:00:00 +0000
+++ mythbuntu-repos/python/mythbuntu_repos.py	2011-12-06 18:33:26 +0000
@@ -0,0 +1,243 @@
+## -*- coding: utf-8 -*-
+#
+# «Mythbuntu Repos» - A Plugin for adding Mythbuntu Repos. (ie. -testing and
+# Auto-Builds)
+#
+# Copyright (C) 2009, Thomas Mashos, for Mythbuntu
+#
+#
+# Mythbuntu 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this application; if not, write to the Free Software Foundation, Inc., 51
+# Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+################################################################################
+
+from MythbuntuControlCentre.plugin import MCCPlugin
+import os
+import re
+import commands
+import urllib2
+import shutil
+import subprocess
+import ConfigParser
+
+class MythbuntuReposPlugin(MCCPlugin):
+    """A Plugin for adding Mythbuntu Repos"""
+    #
+    #Load GUI & Calculate Changes
+    #
+
+    def __init__(self):
+        #Initialize parent class
+        information = {}
+        information["name"] = "Repositories"
+        information["icon"] = "emblem-downloads"
+        information["ui"] = "tab_repos"
+        MCCPlugin.__init__(self, information)
+        self.CONFIGFILE = "/etc/default/mythbuntu-repos"
+        self.USERHOME = os.path.expanduser("~")
+        self.DBLINK = "http://bazaar.launchpad.net/~mythbuntu/mythbuntu/mythbuntu-repos/download/head:/mythbunturepos.db-20110701013326-zkyc2b8dxf072vof-2/mythbuntu-repos.db";
+        if not os.path.isdir(self.USERHOME+"/.mythbuntu"):
+            os.mkdir(self.USERHOME+"/.mythbuntu")
+        if not os.path.isfile(self.USERHOME+"/.mythbuntu/mythbuntu-repos.db"):
+            try:
+                self.downloadFile(self.DBLINK, self.USERHOME+"/.mythbuntu/")
+            except:
+                shutil.copy("/usr/share/mythbuntu/plugins/mythbuntu-repos.db", self.USERHOME+"/.mythbuntu/")
+        self.config = ConfigParser.ConfigParser()
+
+    #Set mythtv versions
+    def captureState(self):
+        """Determines the state of the items on managed by this plugin
+           and stores it into the plugin's own internal structures"""
+        self.versions = []
+        for line in open("/etc/lsb-release").xreadlines():
+            if "DISTRIB_CODENAME" in line:
+                line = line.strip("\n")
+                throwaway, distro = line.split("=")
+        NumRepos = 0
+        for line in open(self.USERHOME+"/.mythbuntu/mythbuntu-repos.db").xreadlines():
+            if distro in line:
+                line = line.strip("\n")
+                release, version = line.split("\t")
+                self.versions.append(version)
+                NumRepos += 1
+            elif "MYTHTV_RELEASE" in line:
+                line = line.strip("\n")
+                VerName, self.CurVer = line.split("\t")
+            elif "TRUNKPASS" in line:
+                line = line.strip("\n")
+                discard, self.TRUNKPASS = line.split("\t")
+        self.changes = {}
+        rei = 0
+        while (rei <= NumRepos):
+            self.builder.get_object('repobox').remove_text(0)
+            rei = rei+1
+        for item in self.versions:
+            self.builder.get_object('repobox').append_text(item)
+        if os.path.exists(self.CONFIGFILE):
+            self.config.read(self.CONFIGFILE)
+        try:
+            self.changes['MythTVUpdatesActivated'] = self.config.getboolean("cfg", "ActivateMythTVUpdates")
+        except:
+            self.changes['MythTVUpdatesActivated'] = False
+        try:
+            self.changes['MythTVUpdatesRepo'] = self.config.get("cfg", "MythTVRepo")
+        except:            
+            self.changes['MythTVUpdatesRepo'] = self.versions[0]
+        try:
+            self.changes['ActivateMythbuntuUpdates'] = self.config.getboolean("cfg", "ActivateMythbuntuUpdates")
+        except:
+            self.changes['ActivateMythbuntuUpdates'] = False
+        try:
+            self.changes['ActivateXMLTVUpdates'] = self.config.getboolean("cfg", "ActivateXMLTVUpdates")
+        except:
+            self.changes['ActivateXMLTVUpdates'] = False
+
+    def applyStateToGUI(self):
+        """Takes the current state information and sets the GUI
+           for this plugin"""
+        self.mythtv_updates_checkbox.set_active(self.changes['MythTVUpdatesActivated'])
+        self.repobox.set_sensitive(self.changes['MythTVUpdatesActivated'])
+        try:
+            self.repobox.set_active(self.versions.index(self.changes['MythTVUpdatesRepo']))
+        except ValueError:
+            self.repobox.set_active(0)
+        self.mythbuntu_updates_checkbox.set_active(self.changes['ActivateMythbuntuUpdates'])
+        self.xmltv_updates_checkbox.set_active(self.changes['ActivateXMLTVUpdates'])
+        self.trunk_pass_ok.hide()
+
+    def on_mythtv_updates_checkbox_toggled(self, widget, data=None):
+        """Show the repobox if this is checked"""
+        widget_was_visible = self.mythtv_updates_checkbox.get_active()
+        if widget_was_visible:
+            self.repobox.set_sensitive(True)
+        else:
+            self.repobox.set_sensitive(False)
+
+    def on_dev_password_entry_changed(self, widget, data=None):
+        """Require a password for using trunk"""
+        if self.dev_password_entry.get_text() == self.TRUNKPASS:
+            self.trunk_pass_error.hide()
+            self.trunk_pass_ok.show()
+        else:
+            self.trunk_pass_error.show()
+            self.trunk_pass_ok.hide()
+
+    def on_repobox_changed(self, widget, data=None):
+        """Check the version to know if it's trunk"""
+        if not self.repobox.get_active_text() == None:
+            SELVER = self.convertVersion(self.repobox.get_active_text())
+            if SELVER > self.CurVer:
+                self.trunk_block.show()
+            else:
+                self.trunk_block.hide()
+
+    def convertVersion(self, VERSION):
+        """Remove the trailing .x if it exists"""
+        if VERSION.endswith(".x"):
+            VERSION = VERSION.strip(".x")
+        return VERSION
+
+    def compareState(self):
+        """Determines what items have been modified on this plugin"""
+        MCCPlugin.clearParentState(self)
+        SENDLIST = False
+        SELVER = self.convertVersion(self.repobox.get_active_text())
+        if self.mythtv_updates_checkbox.get_active() != self.changes['MythTVUpdatesActivated'] and self.mythtv_updates_checkbox.get_active() == False:
+            self._markReconfigureRoot('MythTV-Updates-Activated', self.mythtv_updates_checkbox.get_active())
+            SENDLIST = True
+        if self.repobox.get_sensitive() == True:
+            if self.repobox.get_active_text() != self.changes['MythTVUpdatesRepo'] or self.mythtv_updates_checkbox.get_active() != self.changes['MythTVUpdatesActivated']:
+                if (SELVER > self.CurVer and self.dev_password_entry.get_text() == self.TRUNKPASS) or SELVER <= self.CurVer:
+                    self._markReconfigureRoot('MythTV-Updates-Repo', self.repobox.get_active_text())
+                    self._markReconfigureRoot('MythTV-Updates-Activated', self.mythtv_updates_checkbox.get_active())
+                    SENDLIST = True
+                elif self.mythtv_updates_checkbox.get_active() == False:
+                    self._markReconfigureRoot('MythTV-Updates-Activated', self.mythtv_updates_checkbox.get_active())
+        if self.mythbuntu_updates_checkbox.get_active() != self.changes['ActivateMythbuntuUpdates']:
+            self._markReconfigureRoot('Mythbuntu-Updates-Activated', self.mythbuntu_updates_checkbox.get_active())
+        if self.xmltv_updates_checkbox.get_active() != self.changes['ActivateXMLTVUpdates']:
+            self._markReconfigureRoot('XMLTV-Updates-Activated', self.xmltv_updates_checkbox.get_active())
+        if SENDLIST == True:
+            self._markReconfigureRoot('Repo-list', self.versions)
+
+    def refresh_button_clicked(self, widget, data=None):
+        """Download a new db file if requested"""
+        self.downloadFile(self.DBLINK, self.USERHOME+"/.mythbuntu/")
+        self.captureState()
+        self.applyStateToGUI()
+
+    def downloadFile(self, url, dest):
+        """Download files"""
+        file_name = url.split('/')[-1]
+        u = urllib2.urlopen(url)
+        f = open(dest+file_name, 'wb')
+        meta = u.info()
+        file_size = int(meta.getheaders("Content-Length")[0])
+
+        file_size_dl = 0
+        block_sz = 8192
+        while True:
+            buffer = u.read(block_sz)
+            if not buffer:
+                break
+        
+            file_size_dl += len(buffer)
+            f.write(buffer)
+            status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
+            status = status + chr(8)*(len(status)+1)
+        f.close()
+
+    #
+    # Process selected activities
+    #
+
+    def root_scripted_changes(self, reconfigure):
+        """System-wide changes that need root access to be applied.
+           This function is ran by the dbus backend"""
+        if os.path.exists(self.CONFIGFILE):
+            self.config.read("/etc/default/mythbuntu-repos")
+        else:
+            self.config.add_section("cfg")
+        if "Repo-list" in reconfigure:
+            for item in reconfigure["Repo-list"]:
+                if item.endswith(".x"):
+                    item = item.strip(".x")
+                    subprocess.call(["apt-add-repository", "-r", "-y", "ppa:mythbuntu/"+item])
+        if "MythTV-Updates-Activated" in reconfigure:
+            if reconfigure["MythTV-Updates-Activated"]:
+                repo = reconfigure["MythTV-Updates-Repo"]
+                self.config.set("cfg", "ActivateMythTVUpdates", True)
+                self.config.set("cfg", "MythTVRepo", repo)
+                if repo.endswith(".x"):
+                    repo = repo.strip(".x")
+                subprocess.call(["apt-add-repository", "-y", "ppa:mythbuntu/"+repo])
+            else:
+                self.config.set("cfg", "ActivateMythTVUpdates", False)
+        if "Mythbuntu-Updates-Activated" in reconfigure:
+            if reconfigure["Mythbuntu-Updates-Activated"]:
+                subprocess.call(["apt-add-repository", "-y", "ppa:mythbuntu/testing"])
+                self.config.set("cfg", "ActivateMythbuntuUpdates", True)
+            else:
+                subprocess.call(["apt-add-repository", "-r", "-y", "ppa:mythbuntu/testing"])
+                self.config.set("cfg", "ActivateMythbuntuUpdates", False)
+        if "XMLTV-Updates-Activated" in reconfigure:
+            if reconfigure["XMLTV-Updates-Activated"]:
+                subprocess.call(["apt-add-repository", "-y", "ppa:mythbuntu/xmltv"])
+                self.config.set("cfg", "ActivateXMLTVUpdates", True)
+            else:
+                subprocess.call(["apt-add-repository", "-r", "-y", "ppa:mythbuntu/xmltv"])
+                self.config.set("cfg", "ActivateXMLTVUpdates", False)
+        with open('/etc/default/mythbuntu-repos', 'wb') as configfile:
+            self.config.write(configfile)
+        

=== added directory 'mythbuntu-repos/ui'
=== added file 'mythbuntu-repos/ui/tab_repos.ui'
--- mythbuntu-repos/ui/tab_repos.ui	1970-01-01 00:00:00 +0000
+++ mythbuntu-repos/ui/tab_repos.ui	2011-12-06 18:33:26 +0000
@@ -0,0 +1,436 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <object class="GtkListStore" id="model1">
+    <columns>
+      <!-- column-name gchararray -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkListStore" id="model2">
+    <columns>
+      <!-- column-name gchararray -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkVBox" id="tab_repos">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <child>
+      <object class="GtkLabel" id="graphics_drivers_title">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="xalign">0</property>
+        <property name="yalign">0.46000000834465027</property>
+        <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Repositories&lt;/b&gt;&lt;/big&gt;</property>
+        <property name="use_markup">True</property>
+        <property name="single_line_mode">True</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">False</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkHSeparator" id="hseparator6">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">False</property>
+        <property name="padding">6</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkVBox" id="vbox11">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="spacing">10</property>
+        <child>
+          <object class="GtkAlignment" id="alignment5">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">The MythTV Updates repo will contain updated MythTV software for
+ the version selected below. It is automatically built each day when
+ there are upstream fixes available.</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment8">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="xscale">0</property>
+            <property name="left_padding">25</property>
+            <child>
+              <object class="GtkCheckButton" id="mythtv_updates_checkbox">
+                <property name="label" translatable="yes">Activate MythTV Updates repository</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_mythtv_updates_checkbox_toggled" swapped="no"/>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label3">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">Select which version of MythTV you want to receive updates for.</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" id="hbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkAlignment" id="alignment1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">2.2351741291171123e-10</property>
+                <property name="xscale">0</property>
+                <property name="yscale">0</property>
+                <property name="left_padding">50</property>
+                <property name="right_padding">25</property>
+                <child>
+                  <object class="GtkComboBox" id="repobox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="model">model1</property>
+                    <signal name="changed" handler="on_repobox_changed" swapped="no"/>
+                    <child>
+                      <object class="GtkCellRendererText" id="renderer1"/>
+                      <attributes>
+                        <attribute name="text">0</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="alignment2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="xscale">0</property>
+                <property name="yscale">0</property>
+                <child>
+                  <object class="GtkButton" id="refreshbutton">
+                    <property name="label" translatable="yes">Refresh</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_action_appearance">False</property>
+                    <signal name="clicked" handler="refresh_button_clicked" swapped="no"/>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkVBox" id="trunk_block">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkAlignment" id="alignment7">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkLabel" id="trunk_warning">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                    <property name="label" translatable="yes">Warning: You have selected the MythTV version currently in development!!
+ If you select this version, it is recommended that you subscribe to the
+ &lt;a href="http://www.mythtv.org/mailman/listinfo/mythtv-dev/"&gt;mythtv developer&lt;/a&gt; and &lt;a href="http://www.mythtv.org/mailman/listinfo/mythtv-commits/"&gt;mythtv commits&lt;/a&gt; mailing lists and be prepared for
+ severe breakage. If you wish to continue please enter
+ YouMustBeThisTallToRide below for the development version password.</property>
+                    <property name="use_markup">True</property>
+                    <property name="track_visited_links">False</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="alignment9">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkHBox" id="hbox2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkAlignment" id="alignment10">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="xscale">0</property>
+                        <property name="right_padding">10</property>
+                        <child>
+                          <object class="GtkLabel" id="label4">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes"> MythTV Development Version Password</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkAlignment" id="alignment11">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="xscale">0</property>
+                        <child>
+                          <object class="GtkEntry" id="dev_password_entry">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">●</property>
+                            <signal name="changed" handler="on_dev_password_entry_changed" swapped="no"/>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkImage" id="trunk_pass_ok">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="xpad">5</property>
+                        <property name="stock">gtk-ok</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkImage" id="trunk_pass_error">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="xpad">5</property>
+                        <property name="stock">gtk-dialog-error</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">The Mythbuntu Updates repo provides updates for Mythbuntu specific
+ software such as Mythbuntu Bare and Mythbuntu Log Grabber. It does not
+ contain MythTV updates.</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">5</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment12">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
+            <property name="left_padding">25</property>
+            <child>
+              <object class="GtkCheckButton" id="mythbuntu_updates_checkbox">
+                <property name="label" translatable="yes">Activate Mythbuntu Updates repository</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="xalign">0</property>
+                <property name="draw_indicator">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">6</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment3">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
+            <child>
+              <object class="GtkLabel" id="label5">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">The XMLTV Updates repo provides daily builds of XMLTV for schedule data.
+ If you do not know what XMLTV is you probably don't need to enable this.</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">7</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment13">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
+            <property name="left_padding">25</property>
+            <child>
+              <object class="GtkCheckButton" id="xmltv_updates_checkbox">
+                <property name="label" translatable="yes">Activate XMLTV Updates repository</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="xalign">0</property>
+                <property name="draw_indicator">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">8</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment6">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkLabel" id="complete_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">After hitting apply, to complete the transition to the Updates repositories,
+ please open update-manager (or synaptic) and click Check (or Reload) and
+ then install updates as you normally would.</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">9</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="padding">6</property>
+        <property name="position">2</property>
+      </packing>
+    </child>
+  </object>
+</interface>


Follow ups