Merge lp:~laney/ubuntu-release-upgrader/lp1548858 into lp:ubuntu-release-upgrader

Proposed by Iain Lane
Status: Merged
Merged at revision: 2957
Proposed branch: lp:~laney/ubuntu-release-upgrader/lp1548858
Merge into: lp:ubuntu-release-upgrader
Diff against target: 203 lines (+82/-33)
4 files modified
DistUpgrade/DistUpgradeViewGtk3.py (+47/-21)
DistUpgrade/ReleaseNotesViewerWebkit.py (+26/-10)
debian/changelog (+7/-0)
debian/control (+2/-2)
To merge this branch: bzr merge lp:~laney/ubuntu-release-upgrader/lp1548858
Reviewer Review Type Date Requested Status
Ubuntu Core Development Team Pending
Review via email: mp+286930@code.launchpad.net

Commit message

Add back the old code for Vte 2.90 and WebKit 1 - u-r-u needs to remain compatible with 14.04

Description of the change

Add back the old code for Vte 2.90 and WebKit 1 - u-r-u needs to remain compatible with 14.04

To post a comment you must log in.
Revision history for this message
Brian Murray (brian-murray) wrote :

I tested an upgrade from Trusty to Xenial and while it exploded, I was still able to see ubuntu-release-upgrader dialogs about the situation so the bug seems fixed.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'DistUpgrade/DistUpgradeViewGtk3.py'
2--- DistUpgrade/DistUpgradeViewGtk3.py 2016-02-16 14:46:49 +0000
3+++ DistUpgrade/DistUpgradeViewGtk3.py 2016-02-23 17:51:48 +0000
4@@ -20,9 +20,19 @@
5 # USA
6
7 import gi
8-gi.require_version("Vte", "2.91")
9-from gi.repository import Vte
10-gi.require_version("Gtk", "3.0")
11+
12+vte291 = False
13+try:
14+ gi.require_version("Vte", "2.91")
15+ from gi.repository import Vte
16+ vte291 = True
17+except Exception as e:
18+ gi.require_version("Vte", "2.90")
19+ # COMPAT: Dear upstream, this compat code below will be duplicated in
20+ # all python-vte using applications. Love, Michael
21+ from gi.repository import Vte
22+ Vte.Pty.new_sync = Vte.Pty.new
23+
24 from gi.repository import Gtk
25 from gi.repository import Gdk
26 from gi.repository import GLib
27@@ -356,26 +366,21 @@
28 self.term = term
29 self.parent = parent
30 def call(self, cmd, hidden=False):
31- def wait_for_child(terminal, status):
32- #print("wait for child finished")
33- self.finished=True
34+ if vte291:
35+ def wait_for_child(terminal, status):
36+ #print("wait for child finished")
37+ self.finished=True
38+ else:
39+ def wait_for_child(widget):
40+ #print("wait for child finished")
41+ self.finished=True
42 self.term.show()
43 self.term.connect("child-exited", wait_for_child)
44 self.parent.expander_terminal.set_sensitive(True)
45 if hidden==False:
46 self.parent.expander_terminal.set_expanded(True)
47 self.finished = False
48- if hasattr(self.term, "fork_command_full"):
49- (success, pid) = self.term.fork_command_full(
50- Vte.PtyFlags.DEFAULT,
51- "/",
52- cmd,
53- None,
54- 0, # GLib.SpawnFlags
55- None, # child_setup
56- None, # child_setup_data
57- )
58- elif hasattr(self.term, "spawn_sync"):
59+ if vte291:
60 (success, pid) = self.term.spawn_sync(
61 Vte.PtyFlags.DEFAULT,
62 "/",
63@@ -386,6 +391,16 @@
64 None, # child_setup_data
65 None, # GCancellable
66 )
67+ else:
68+ (success, pid) = self.term.fork_command_full(
69+ Vte.PtyFlags.DEFAULT,
70+ "/",
71+ cmd,
72+ None,
73+ 0, # GLib.SpawnFlags
74+ None, # child_setup
75+ None, # child_setup_data
76+ )
77 if not success or pid < 0:
78 # error
79 return
80@@ -402,12 +417,20 @@
81 def open(self, url):
82 if not self._webkit_view:
83 return
84- self._webkit_view.load_uri(url)
85- self._webkit_view.connect("load-changed", self._on_load_changed)
86+ try:
87+ from gi.repository import WebKit2
88+ assert WebKit2 # silence pep8
89+ self._webkit_view.load_uri(url)
90+ self._webkit_view.connect("load-changed", self._on_load_changed)
91+ except ImportError:
92+ self._webkit_view.open(url)
93+ self._webkit_view.connect("load-finished", self._on_load_finished)
94 def show(self):
95 self._webkit_view.show()
96 def hide(self):
97 self._webkit_view.hide()
98+ def _on_load_finished(self, view, frame):
99+ view.show()
100 def _on_load_changed(self, view, event, data):
101 from gi.repository import WebKit2
102 if event == WebKit2.LoadEvent.LOAD_FINISHED:
103@@ -513,8 +536,11 @@
104 def getHtmlView(self):
105 if self._webkit_view is None:
106 try:
107- from gi.repository import WebKit2
108- self._webkit_view = WebKit2.WebView()
109+ try:
110+ from gi.repository import WebKit2 as WebKit
111+ except ImportError:
112+ from gi.repository import WebKit
113+ self._webkit_view = WebKit.WebView()
114 settings = self._webkit_view.get_settings()
115 settings.set_property("enable-plugins", False)
116 self.vbox_main.pack_end(self._webkit_view, True, True, 0)
117
118=== modified file 'DistUpgrade/ReleaseNotesViewerWebkit.py'
119--- DistUpgrade/ReleaseNotesViewerWebkit.py 2016-02-16 14:46:49 +0000
120+++ DistUpgrade/ReleaseNotesViewerWebkit.py 2016-02-23 17:51:48 +0000
121@@ -24,26 +24,42 @@
122 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
123 # USA
124
125+from .ReleaseNotesViewer import open_url
126+
127 from gi.repository import Gtk
128-from gi.repository import WebKit2
129-
130-from .ReleaseNotesViewer import open_url
131-
132-
133-class ReleaseNotesViewerWebkit(WebKit2.WebView):
134+
135+webkit2 = False
136+try:
137+ from gi.repository import WebKit2 as WebKit
138+ webkit2 = True
139+except ImportError:
140+ from gi.repository import WebKit
141+
142+
143+class ReleaseNotesViewerWebkit(WebKit.WebView):
144 def __init__(self, notes_url):
145 super(ReleaseNotesViewerWebkit, self).__init__()
146 self.load_uri(notes_url)
147- self.connect("decide-policy",
148- self._on_decide_policy)
149+ if webkit2:
150+ self.connect("decide-policy",
151+ self._on_decide_policy)
152+ else:
153+ self.connect("navigation-policy-decision-requested",
154+ self._on_navigation_policy_decision_requested)
155+
156+ def _on_navigation_policy_decision_requested(self, view, frame,
157+ request, action, policy):
158+ open_url(request.get_uri())
159+ policy.ignore()
160+ return True
161
162 def _on_decide_policy(self, web_view, decision, decision_type):
163- if decision_type == WebKit2.PolicyDecisionType.NAVIGATION_ACTION:
164+ if decision_type == WebKit.PolicyDecisionType.NAVIGATION_ACTION:
165 navigation_action = decision.get_navigation_action()
166 navigation_request = navigation_action.get_request()
167 navigation_type = navigation_action.get_navigation_type()
168
169- if navigation_type == WebKit2.NavigationType.LINK_CLICKED:
170+ if navigation_type == WebKit.NavigationType.LINK_CLICKED:
171 uri = navigation_request.get_uri()
172 open_url(uri)
173 decision.ignore()
174
175=== modified file 'debian/changelog'
176--- debian/changelog 2016-02-16 15:09:41 +0000
177+++ debian/changelog 2016-02-23 17:51:48 +0000
178@@ -1,3 +1,10 @@
179+ubuntu-release-upgrader (1:16.04.7) UNRELEASED; urgency=medium
180+
181+ * Keep fallback compatibility with Vte 2.90 and WebKit 1, required to run on
182+ 14.04 (LP: #1548858)
183+
184+ -- Iain Lane <iain.lane@canonical.com> Tue, 23 Feb 2016 16:23:34 +0000
185+
186 ubuntu-release-upgrader (1:16.04.6) xenial; urgency=medium
187
188 * utils/demotions.py: Set Apt::Architectures too so that the host's
189
190=== modified file 'debian/control'
191--- debian/control 2016-02-16 14:46:49 +0000
192+++ debian/control 2016-02-23 17:51:48 +0000
193@@ -56,9 +56,9 @@
194 python3-distupgrade (= ${source:Version}),
195 python3-dbus,
196 python3-gi (>= 3.8),
197- gir1.2-vte-2.91,
198+ gir1.2-vte-2.91 | gir1.2-vte-2.90,
199 gir1.2-gtk-3.0,
200- gir1.2-webkit2-4.0
201+ gir1.2-webkit2-4.0 | gir1.2-webkit-3.0
202 Description: manage release upgrades
203 This is the GTK+ frontend of the Ubuntu Release Upgrader
204

Subscribers

People subscribed via source and target branches