Merge lp:~sylvain-pineau/checkbox/bug1060211 into lp:checkbox

Proposed by Sylvain Pineau
Status: Merged
Approved by: Zygmunt Krynicki
Approved revision: 1728
Merged at revision: 1727
Proposed branch: lp:~sylvain-pineau/checkbox/bug1060211
Merge into: lp:checkbox
Diff against target: 239 lines (+83/-51)
2 files modified
debian/changelog (+2/-1)
scripts/graphics_driver (+81/-50)
To merge this branch: bzr merge lp:~sylvain-pineau/checkbox/bug1060211
Reviewer Review Type Date Requested Status
Zygmunt Krynicki (community) Approve
Review via email: mp+127729@code.launchpad.net

Commit message

Added NVIDIA driver detection to scripts/graphics_driver - fixes LP:1060211

Description of the change

This MR adds NVIDIA driver detection to scripts/graphics_driver

To post a comment you must log in.
Revision history for this message
Zygmunt Krynicki (zyga) wrote :

Works well on fglrx/ati, doing some more code review now

Revision history for this message
Zygmunt Krynicki (zyga) wrote :

I'd rather see some tests as a way to document what gets matched to what but I'll +1 this as we're closing to release and it does not seem broken to me

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2012-10-03 09:24:40 +0000
3+++ debian/changelog 2012-10-03 11:55:23 +0000
4@@ -179,7 +179,8 @@
5 drivers (LP: #956139 and #992727)
6 * debian/control, jobs/esata.txt.in, jobs/firewire.txt.in, jobs/usb.txt.in,
7 jobs/mediacard.txt.in: Remove udisks package references in all of the jobs
8- that use removable_storage scripts (LP: #1059620)
9+ that use removable_storage scripts (LP: #1059620)
10+ * scripts/graphics_driver: Added NVIDIA driver detection (LP: #1060211)
11
12 [Zygmunt Krynicki]
13 * Fixed simple duplicate 'the' mistakes (LP: #1040022)
14
15=== modified file 'scripts/graphics_driver'
16--- scripts/graphics_driver 2012-09-11 14:38:19 +0000
17+++ scripts/graphics_driver 2012-10-03 11:55:23 +0000
18@@ -38,19 +38,20 @@
19 import sys
20 import os
21
22-from subprocess import Popen, PIPE
23+from subprocess import Popen, PIPE, check_output, CalledProcessError
24+
25
26 class XorgLog(object):
27
28 def __init__(self, logfile=None):
29- self.modules = [ ]
30- self.errors = [ ]
31- self.warnings = [ ]
32- self.info = [ ]
33- self.notimpl = [ ]
34- self.notices = [ ]
35- self.cards = [ ]
36- self.displays = { }
37+ self.modules = []
38+ self.errors = []
39+ self.warnings = []
40+ self.info = []
41+ self.notimpl = []
42+ self.notices = []
43+ self.cards = []
44+ self.displays = {}
45 self.xserver_version = None
46 self.boot_time = None
47 self.boot_logfile = None
48@@ -78,7 +79,8 @@
49 self.modules.append(module)
50 gathering_module = False
51 module = None
52- m = re.search('\(II\) Loading.*modules\/drivers\/(.+)_drv\.so', line)
53+ m = re.search(
54+ '\(II\) Loading.*modules\/drivers\/(.+)_drv\.so', line)
55 if m:
56 found_ddx = True
57 m = re.search(r'\(II\) Module (\w+):', line)
58@@ -96,26 +98,38 @@
59 gathering_module = True
60
61 if gathering_module:
62- m = re.search(r'vendor="(.*:?)"', line)
63- if m:
64- module['vendor'] = m.group(1)
65-
66- m = re.search(r'module version = (.*)', line)
67- if m:
68- module['version'] = m.group(1)
69-
70- m = re.search(r'class: (.*)', line)
71- if m:
72- module['class'] = m.group(1)
73-
74- m = re.search(r'ABI class:\s+(.*:?), version\s+(.*:?)', line)
75- if m:
76- if m.group(1)[:5] == "X.Org":
77- module['abi_name'] = m.group(1)[6:]
78- else:
79- module['abi_name'] = m.group(1)
80- module['abi_version'] = m.group(2)
81- continue
82+ m = re.search(r'vendor="(.*:?)"', line)
83+ if m:
84+ module['vendor'] = m.group(1)
85+
86+ m = re.search(r'module version = (.*)', line)
87+ if m:
88+ module['version'] = m.group(1)
89+
90+ if module['name'] == 'nvidia':
91+ try:
92+ version = check_output(
93+ "nvidia-settings -v",
94+ shell=True,
95+ universal_newlines=True)
96+ m = re.search(r'.*version\s+([0-9\.]+).*', version)
97+ if m:
98+ module['version'] = m.group(1)
99+ except CalledProcessError:
100+ pass
101+
102+ m = re.search(r'class: (.*)', line)
103+ if m:
104+ module['class'] = m.group(1)
105+
106+ m = re.search(r'ABI class:\s+(.*:?), version\s+(.*:?)', line)
107+ if m:
108+ if m.group(1)[:5] == "X.Org":
109+ module['abi_name'] = m.group(1)[6:]
110+ else:
111+ module['abi_name'] = m.group(1)
112+ module['abi_version'] = m.group(2)
113+ continue
114
115 # General details
116 m = re.search(r'Current Operating System: (.*)$', line)
117@@ -163,19 +177,29 @@
118 display = {'Output': display_name}
119 continue
120
121- m = re.search(r'\(II\) (.*)\(\d+\): Assigned Display Device: (.*)$', line)
122- if m:
123- self.displays[display_name] = display
124- self.video_driver = m.group(1)
125- display_name = m.group(2)
126- display = {'Output': display_name}
127- continue
128-
129- m = re.search(r'Manufacturer: (.*) *Model: (.*) *Serial#: (.*)', line)
130+ m = re.search(
131+ r'\(II\) (.*)\(\d+\): Assigned Display Device: (.*)$', line)
132+ if m:
133+ self.displays[display_name] = display
134+ self.video_driver = m.group(1)
135+ display_name = m.group(2)
136+ display = {'Output': display_name}
137+ continue
138+
139+ m = re.search(r'\(II\) (.*)\(\d+\): Setting mode "(.*?):', line)
140+ if m:
141+ self.displays[display_name] = display
142+ self.video_driver = m.group(1)
143+ display_name = m.group(2)
144+ display = {'Output': display_name}
145+ continue
146+
147+ m = re.search(
148+ r'Manufacturer: (.*) *Model: (.*) *Serial#: (.*)', line)
149 if m:
150 display['display manufacturer'] = m.group(1)
151- display['display model'] = m.group(2)
152- display['display serial no.'] = m.group(3)
153+ display['display model'] = m.group(2)
154+ display['display serial no.'] = m.group(3)
155
156 m = re.search(r'EDID Version: (.*)', line)
157 if m:
158@@ -186,15 +210,18 @@
159 display['vendor'] = m.group(1)
160 display['product id'] = m.group(2)
161
162- m = re.search(r'Max Image Size \[(.*)\]: *horiz.: (.*) *vert.: (.*)', line)
163+ m = re.search(
164+ r'Max Image Size \[(.*)\]: *horiz.: (.*) *vert.: (.*)', line)
165 if m:
166- display['size max horizontal'] = "%s %s" %(m.group(2), m.group(1))
167- display['size max vertical'] = "%s %s" %(m.group(3), m.group(1))
168+ display['size max horizontal'] = "%s %s" % (
169+ m.group(2), m.group(1))
170+ display['size max vertical'] = "%s %s" % (
171+ m.group(3), m.group(1))
172
173 m = re.search(r'Image Size: *(.*) x (.*) (.*)', line)
174 if m:
175- display['size horizontal'] = "%s %s" %(m.group(1), m.group(3))
176- display['size vertical'] = "%s %s" %(m.group(2), m.group(3))
177+ display['size horizontal'] = "%s %s" % (m.group(1), m.group(3))
178+ display['size vertical'] = "%s %s" % (m.group(2), m.group(3))
179
180 m = re.search(r'(.*) is preferred mode', line)
181 if m:
182@@ -202,7 +229,7 @@
183
184 m = re.search(r'Modeline \"(\d+)x(\d+)\"x([0-9\.]+) *(.*)$', line)
185 if m:
186- key = "mode %sx%s@%s" %(m.group(1), m.group(2), m.group(3))
187+ key = "mode %sx%s@%s" % (m.group(1), m.group(2), m.group(3))
188 display[key] = m.group(4)
189 continue
190
191@@ -244,9 +271,10 @@
192 ])
193 return [err for err in self.warnings if err not in excludes]
194
195+
196 def get_driver_info(xlog):
197 '''Return the running driver and version'''
198- print('-'*13,'VIDEO DRIVER INFORMATION','-'*13)
199+ print('-' * 13, 'VIDEO DRIVER INFORMATION', '-' * 13)
200 if xlog.video_driver:
201 for module in xlog.modules:
202 if module['name'] == xlog.video_driver.lower():
203@@ -259,9 +287,11 @@
204 file=sys.stderr)
205 return 1
206
207+
208 def is_laptop():
209 return os.path.isdir('/proc/acpi/button/lid')
210
211+
212 def hybrid_graphics_check(xlog):
213 '''Check for Hybrid Graphics'''
214 card_id1 = re.compile('.*0300: *(.+):(.+) \(.+\)')
215@@ -289,14 +319,14 @@
216 id = id1 + ':' + id2
217 cards.append(id)
218
219- print('-'*13,'HYBRID GRAPHICS CHECK','-'*16)
220+ print('-' * 13, 'HYBRID GRAPHICS CHECK', '-' * 16)
221 for card in cards:
222 formatted_name = cards_dict.get(card.split(':')[0], 'Unknown')
223 formatted_cards.append(formatted_name)
224 print('Graphics Chipset: %s (%s)' % (formatted_name, card))
225
226 for module in xlog.modules:
227- if module['ddx'] == True and module['name'] not in drivers:
228+ if module['ddx'] and module['name'] not in drivers:
229 drivers.append(module['name'])
230 print('Loaded DDX Drivers: %s' %
231 ', '.join(drivers))
232@@ -310,6 +340,7 @@
233
234 return 0
235
236+
237 def main():
238 xlog = XorgLog("/var/log/Xorg.0.log")
239 results = []

Subscribers

People subscribed via source and target branches