~primes2h/ubuntu-qa-website/implement_laptop_testing

« back to all changes in this revision

Viewing changes to code/scripts/lp-integration.py

  • Committer: Stéphane Graber
  • Date: 2009-12-04 13:29:01 UTC
  • mfrom: (134.1.1 qawebsite.fix-sync)
  • Revision ID: stgraber@ubuntu.com-20091204132901-gvv8w52t2dw638i3
Merge fix for lp-integration.py

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
17
 
18
 
verbose=0 #Verbosity level, 0 = nothing, 1 = critical, 2 = info, 3 = debug
19
 
tag=1 #Set to 0 to disable tagging (will print a message in info mode to the console instead)
 
18
# Common settings
 
19
verbose=3       # Verbosity level, 0 = nothing, 1 = critical, 2 = info, 3 = debug
 
20
tag=1           # Set to 0 to disable tagging (will print a message in info mode to the console instead)
 
21
lock=0          # Enable locking
 
22
 
 
23
# Database settings
 
24
db_host="/var/run/postgresql/"
 
25
db_user="db"
 
26
db_password=None
 
27
db_database="qatracker"
 
28
 
20
29
import sys, pgdb, re, os
21
30
 
22
 
#Check if lock is present
23
 
if os.path.exists("/tmp/lp-integration.lock"):
24
 
        sys.exit("lp-integration.py is already running")
25
 
else:
26
 
        lock=open("/tmp/lp-integration.lock","w+")
27
 
        lock.write(str(os.getpid()))
28
 
        lock.close()
29
 
 
30
 
#We have a copy of upstream python-launchpad-bugs in main/
31
 
sys.path[0]="main"
32
 
import launchpadbugs.connector as Connector
33
 
 
 
31
# Check if lock is present
 
32
if lock:
 
33
    if os.path.exists("/tmp/lp-integration.lock"):
 
34
        sys.exit("lp-integration.py is already running")
 
35
    else:
 
36
        lock=open("/tmp/lp-integration.lock","w+")
 
37
        lock.write(str(os.getpid()))
 
38
        lock.close()
 
39
 
 
40
# Load launchpadlib
34
41
from launchpadlib.launchpad import Launchpad, EDGE_SERVICE_ROOT
35
42
from launchpadlib.credentials import Credentials
 
43
from launchpadlib.errors import HTTPError
36
44
 
 
45
# Initialize the cache
37
46
cachedir = ".launchpadlib/cache"
38
47
if not os.path.exists(cachedir):
39
48
    os.makedirs(cachedir,0700)
40
49
 
 
50
# Get credential
41
51
credfile = "lp-integration.cred"
42
 
 
43
52
try:
44
53
    credentials = Credentials()
45
54
    credentials.load(open(credfile))
48
57
    launchpad = Launchpad.get_token_and_login("lp-integration", EDGE_SERVICE_ROOT, cachedir)
49
58
    launchpad.credentials.save(open(credfile,"w",0600)) 
50
59
 
51
 
Blueprint=Connector.ConnectBlueprint()
52
 
Blueprint.authentication="cookie.txt"
53
 
 
54
 
#Loading PostgreSQL settings from the site config (assuming we are in /scripts from the site root)
55
 
config=open("../sites/default/settings.php")
56
 
for line in config.readlines():
57
 
        if re.match('\$db_url',line):
58
 
                db=line.replace("\n","")
59
 
                db=re.split('.*= \'(.*)://(.*):(.*)@(.*)/(.*)\';.*', db)
60
 
 
 
60
# Connect to the DB
61
61
try:
62
 
        db=pgdb.connect(user=db[2],password=db[3],host=db[4],database=db[5])
63
 
        cursor=db.cursor()
 
62
    db=pgdb.connect(user=db_user,password=db_password,host=db_host,database=db_database)
 
63
    cursor=db.cursor()
64
64
except:
65
 
        sys.exit("Failed to connect to the DB")
 
65
    sys.exit("Failed to connect to the DB")
66
66
 
67
67
def getItems(sql):
68
 
        "Returns an array of bugnumber for the give SQL queries"
69
 
        itemlist=[]
70
 
        for query in sql:
71
 
                cursor.execute(query)
72
 
                for item in cursor.fetchall():
73
 
                        if item[0]:
74
 
                                itemlist.append(item[0])
75
 
        
76
 
        #Now generate a list of distinct bugs
77
 
        items=[]
78
 
        for item in itemlist:
79
 
                if item not in items:
80
 
                        items.append(item)
81
 
        return items
 
68
    "Returns an array of bugnumber for the given SQL queries"
 
69
    itemlist=set()
 
70
    for query in sql:
 
71
        cursor.execute(query)
 
72
        for item in cursor.fetchall():
 
73
            if item[0]:
 
74
                itemlist.add(item[0])
 
75
    return itemlist
82
76
 
83
77
def updateBug(bugnumber):
84
 
        "Get LP information about bugnumber, tag if a tag is specified and update the DB"
85
 
 
86
 
        bugnumber=int(bugnumber)
87
 
        try:
88
 
                bug=launchpad.bugs[bugnumber]
89
 
        except:
90
 
                if verbose >= 1: print "Unable to open bug "+str(bugnumber)
91
 
                return 
92
 
        main=0
93
 
        queries=[]
94
 
 
95
 
        try:
96
 
                if bug.duplicate_of:
97
 
                        mainbug=bug.duplicate_of.id
98
 
                        bug=launchpad.bugs[mainbug]
99
 
                else:
100
 
                        mainbug=bugnumber
101
 
 
102
 
                if isinstance(mainbug, int) and isinstance(bugnumber, int):
103
 
                        bug_bugnumber=str(mainbug)
104
 
                        bug_originalbug=str(bugnumber)
105
 
 
106
 
                        #Tags are only used by the QA-Tracker (yet)
107
 
                        try:
108
 
                                cursor.execute("SELECT qawebsite_module_setting.value FROM qatracker_result LEFT JOIN qatracker_bug ON qatracker_bug.resultid=qatracker_result.id LEFT JOIN qatracker_build ON qatracker_build.id=qatracker_result.buildid LEFT JOIN qatracker_milestone ON qatracker_milestone.id=qatracker_build.milestoneid LEFT JOIN qawebsite_module_setting ON qawebsite_module_setting.siteid=qatracker_milestone.siteid WHERE qawebsite_module_setting.option='bug_tag' AND qawebsite_module_setting.option!='' AND qatracker_bug.bugnumber='"+str(bugnumber)+"'")
109
 
                                for tagtext in cursor.fetchall():
110
 
                                        if tagtext[0] != "" and tagtext[0] not in bug.tags:
111
 
                                                if tag != 0:
112
 
                                                        bug.tags.append(str(tagtext[0]))
113
 
                                                        bug.lp_save()
114
 
                                                        if verbose >= 2: print "Tag \""+str(tagtext[0])+"\" added to bug "+str(bugnumber)
115
 
                                                else:
116
 
                                                        if tag == 0 and verbose >= 2: print "Tag \""+str(tagtext[0])+"\" would have been added to bug "+str(bugnumber)
117
 
                        except:
118
 
                                if verbose >= 2: print "Unable to tag, either unable to get the tag from the DB (probably not using qatracker) or python-launchpadlib failed to tag the bug"
119
 
        
120
 
                        if bug.title:
121
 
                                bug_title=pgdb._quote(bug.title)
122
 
                        else:
123
 
                                bug_title="'None'"
124
 
 
125
 
        
126
 
                        # 2009-10-01 - just use the first Ubuntu bug task found for lack of a better idea
127
 
                        task_links = [task.self_link for task in bug.bug_tasks]
128
 
                        task_links.sort(reverse=True)
129
 
 
130
 
                        for task_link in task_links:
131
 
                            if 'ubuntu/+source' in task_link:
132
 
                                task = launchpad.load(task_link)
133
 
                                bug_product = task.bug_target_display_name
134
 
                                bug_product=pgdb._quote(bug_product)
135
 
                                bug_status=pgdb._quote(task.status)
136
 
                                bug_importance=pgdb._quote(task.importance)
137
 
                                if task.assignee:
138
 
                                    try:
139
 
                                        bug_assignee=pgdb._quote(task.assignee.display_name)
140
 
                                    except:
141
 
                                        bug_assignee=pgdb._quote(task.assignee.name)
142
 
                                else:
143
 
                                    bug_assignee=pgdb._quote("None")
144
 
                                break
145
 
                            elif 'ubuntu/+bug' in task_link:
146
 
                                task = launchpad.load(task_link)
147
 
                                bug_product = task.bug_target_display_name
148
 
                                bug_product=pgdb._quote(bug_product)
149
 
                                bug_status=pgdb._quote(task.status)
150
 
                                bug_importance=pgdb._quote(task.importance)
151
 
                                if task.assignee:
152
 
                                    try:
153
 
                                        bug_assignee=pgdb._quote(task.assignee.display_name)
154
 
                                    except:
155
 
                                        bug_assignee=pgdb._quote(task.assignee.name)
156
 
                                else:
157
 
                                    bug_assignee=pgdb._quote("None")
158
 
                                
159
 
                        if len(bug.messages) > 0:
160
 
                                bug_comments=str(len(bug.messages))
161
 
                        else:
162
 
                                bug_comments="0"
163
 
                
164
 
                        # this used to be direct subscribers only but this doesn't exist in
165
 
                        # python-launchpadlib   
166
 
                        if len(bug.subscriptions) > 0:
167
 
                                bug_subscribers=str(len(bug.subscriptions))
168
 
                        else:
169
 
                                bug_subscribers="0"
170
 
                        
171
 
                        bug_duplicates=str(len(bug.duplicates))
172
 
 
173
 
                else:
174
 
                        if verbose >= 1: print "Object is not bug "+str(bugnumber)
175
 
                        return
176
 
        except: 
177
 
                if verbose >= 1: print "Error while parsing bug "+str(bugnumber)
178
 
                return
179
 
 
180
 
        try:
181
 
                cursor.execute("SELECT originalbug FROM qawebsite_launchpad_bug WHERE originalbug='"+bug_originalbug+"'")
182
 
                if len(cursor.fetchall()) == 0:
183
 
                        cursor.execute("INSERT INTO qawebsite_launchpad_bug (bugnumber, originalbug, title, product, status, importance, assignee, mentoring, commentscount, subscriberscount, duplicatescount) VALUES ("+bug_bugnumber+","+bug_originalbug+","+bug_title+","+bug_product+","+bug_status+","+bug_importance+","+bug_assignee+","+bug_mentoring+","+bug_comments+","+bug_subscribers+","+bug_duplicates+")")
184
 
                else:
185
 
                        cursor.execute("UPDATE qawebsite_launchpad_bug SET lastchange=now() WHERE originalbug='"+bug_originalbug+"' AND status!="+bug_status)
186
 
                        cursor.execute("UPDATE qawebsite_launchpad_bug SET bugnumber="+bug_bugnumber+", title="+bug_title+", product="+bug_product+", status="+bug_status+", importance="+bug_importance+", assignee="+bug_assignee+", mentoring="+bug_mentoring+", commentscount="+bug_comments+", subscriberscount="+bug_subscribers+", duplicatescount="+bug_duplicates+" WHERE originalbug='"+bug_originalbug+"'")
187
 
                db.commit()
188
 
                if verbose >= 3: print "Bug "+str(bugnumber)+" successfully updated"
189
 
        except:
190
 
                if verbose >= 1: print "DB failed for bug "+str(bugnumber)
191
 
                return
192
 
 
193
 
def updateSpec(specurl):
194
 
        "Get LP information about specurl and update the DB"
195
 
 
196
 
        try:
197
 
                spec=Blueprint(specurl)
198
 
        except:
199
 
                if verbose >= 1: print "Unable to open the specification : "+specurl
200
 
                return 
201
 
        queries=[]
202
 
 
203
 
        try:
204
 
                spec_url=pgdb._quote(specurl)
205
 
 
206
 
                if spec.title:
207
 
                        spec_title=pgdb._quote(spec.title)
208
 
                else:
209
 
                        spec_title="'None'"
210
 
                
211
 
                if spec.product:
212
 
                        spec_product=pgdb._quote(spec.product)
213
 
                else:
214
 
                        spec_product="'None'"
215
 
 
216
 
                if spec.priority:
217
 
                        spec_priority=pgdb._quote(spec.priority)
218
 
                else:
219
 
                        spec_priority="'Unknown'"
220
 
                
221
 
                if spec.definition:
222
 
                        spec_definition=pgdb._quote(spec.definition)
223
 
                else:
224
 
                        spec_definition="'Unknown'"
225
 
                
226
 
                if spec.implementation:
227
 
                        spec_implementation=pgdb._quote(spec.implementation)
228
 
                else:
229
 
                        spec_implementation="'Unknown'"
230
 
 
231
 
                #In some case a user may not have a realname set on LP (realname doesn't exist)
232
 
                try:
233
 
                        spec_assignee=pgdb._quote(spec.assignee.realname)
234
 
                except:
235
 
                        spec_assignee=pgdb._quote(spec.assignee)
236
 
                if spec_assignee == "'unknown'":
237
 
                        spec_assignee="Null"
238
 
 
239
 
                if len(spec.get_mentors()) >= 1:
240
 
                        spec_mentoring="1"
241
 
                else:
242
 
                        spec_mentoring="0"
243
 
        
244
 
        except:
245
 
                if verbose >= 1: print "Error while parsing spec "+specurl
246
 
                return
247
 
 
248
 
        try:
249
 
                cursor.execute("SELECT blueprinturl FROM qawebsite_launchpad_blueprint WHERE blueprinturl="+spec_url+"")
250
 
                if len(cursor.fetchall()) == 0:
251
 
                        cursor.execute("INSERT INTO qawebsite_launchpad_blueprint (blueprinturl, title, product, priority, definition, implementation, assignee, mentoring) VALUES ("+spec_url+","+spec_title+","+spec_product+","+spec_priority+","+spec_definition+","+spec_implementation+","+spec_assignee+","+spec_mentoring+")")
252
 
                else:
253
 
                        cursor.execute("UPDATE qawebsite_launchpad_blueprint SET lastchange=now() WHERE blueprinturl="+spec_url+" AND (definition!="+spec_definition+" OR implementation!="+spec_implementation+")")
254
 
                        cursor.execute("UPDATE qawebsite_launchpad_blueprint SET title="+spec_title+", product="+spec_product+", priority="+spec_priority+", definition="+spec_definition+", implementation="+spec_implementation+", assignee="+spec_assignee+", mentoring="+spec_mentoring+" WHERE blueprinturl="+spec_url)
255
 
                db.commit()
256
 
                if verbose >= 3: print "Spec "+specurl+" successfully updated"
257
 
        except:
258
 
                if verbose >= 1: print "DB failed for spec "+specurl
259
 
                return
260
 
 
261
 
#Arrays containing the SQL queries to execute
 
78
    "Get LP information about bugnumber, tag if a tag is specified and update the DB"
 
79
 
 
80
    bugnumber=int(bugnumber)
 
81
    try:
 
82
        bug=launchpad.bugs[bugnumber]
 
83
    except HTTPError:
 
84
        if verbose >= 1: print "bug #"+str(bugnumber)+": HTTP error"
 
85
        return
 
86
    except KeyError:
 
87
        if verbose >= 1: print "bug #"+str(bugnumber)+": Unknown bug"
 
88
        return
 
89
    except KeyboardInterrupt:
 
90
        sys.exit("KeyboardInterrupt caught.")
 
91
    except:
 
92
        if verbose >= 1: print "bug #"+str(bugnumber)+": Unhandled error when opening bug"
 
93
        return
 
94
 
 
95
    main=0
 
96
    queries=[]
 
97
 
 
98
    try:
 
99
        if bug.duplicate_of:
 
100
            mainbug=bug.duplicate_of.id
 
101
            bug=launchpad.bugs[mainbug]
 
102
        else:
 
103
            mainbug=bugnumber
 
104
 
 
105
        if isinstance(mainbug, int) and isinstance(bugnumber, int):
 
106
            bug_bugnumber=str(mainbug)
 
107
            bug_originalbug=str(bugnumber)
 
108
 
 
109
            if bug.title:
 
110
                bug_title=pgdb._quote(bug.title)
 
111
            else:
 
112
                bug_title="'None'"
 
113
 
 
114
            # 2009-10-01 - just use the first Ubuntu bug task found for lack of a better idea
 
115
            task_links = [task.self_link for task in bug.bug_tasks]
 
116
            task_links.sort(reverse=True)
 
117
 
 
118
            for task_link in task_links:
 
119
                task = launchpad.load(task_link)
 
120
                bug_product = task.bug_target_display_name
 
121
                bug_product=pgdb._quote(bug_product)
 
122
                bug_status=pgdb._quote(task.status)
 
123
                bug_importance=pgdb._quote(task.importance)
 
124
                if task.assignee:
 
125
                    try:
 
126
                        bug_assignee=pgdb._quote(task.assignee.display_name)
 
127
                    except:
 
128
                        bug_assignee=pgdb._quote(task.assignee.name)
 
129
                else:
 
130
                    bug_assignee=pgdb._quote("None")
 
131
 
 
132
            # FIXME: LP returns 500 for some bugs, workaround that for now.
 
133
            try:
 
134
                if len(bug.messages) > 0:
 
135
                    bug_comments=str(len(bug.messages))
 
136
                else:
 
137
                    bug_comments="0"
 
138
            except:
 
139
                bug_comments="0"
 
140
 
 
141
            # this used to be direct subscribers only but this doesn't exist in
 
142
            # python-launchpadlib
 
143
            if len(bug.subscriptions) > 0:
 
144
                bug_subscribers=str(len(bug.subscriptions))
 
145
            else:
 
146
                bug_subscribers="0"
 
147
            bug_duplicates=str(len(bug.duplicates))
 
148
 
 
149
            # If wanted, tag the bug
 
150
            if tag != 0:
 
151
                try:
 
152
                    cursor.execute("SELECT DISTINCT qawebsite_module_setting.value FROM qatracker_result LEFT JOIN qatracker_bug ON qatracker_bug.resultid=qatracker_result.id LEFT JOIN qatracker_build ON qatracker_build.id=qatracker_result.buildid LEFT JOIN qatracker_milestone ON qatracker_milestone.id=qatracker_build.milestoneid LEFT JOIN qawebsite_module_setting ON qawebsite_module_setting.siteid=qatracker_milestone.siteid WHERE qawebsite_module_setting.option='bug_tag' AND qawebsite_module_setting.option!='' AND qatracker_bug.bugnumber='"+str(bugnumber)+"'")
 
153
                    tags=cursor.fetchall()
 
154
                    for tagtext in tags:
 
155
                        if tagtext[0] != "" and tagtext[0] not in bug.tags:
 
156
                            taglist=bug.tags
 
157
                            taglist.append(unicode(str(tagtext[0])))
 
158
                            bug.tags=taglist
 
159
                            bug.lp_save()
 
160
                            if verbose >= 2: print "bug #"+str(bugnumber)+": Added \""+str(tagtext[0])+"\" tag"
 
161
                except KeyboardInterrupt:
 
162
                    sys.exit("KeyboardInterrupt caught.")
 
163
                except:
 
164
                    if verbose >= 1: print "bug #"+str(bugnumber)+": Unable to add \""+str(tagtext[0])+"\" tag"
 
165
 
 
166
            # Bug mentoring no longer exists, set to disable by default.
 
167
            bug_mentoring="0"
 
168
        else:
 
169
            if verbose >= 1: print "bug #"+str(bugnumber)+": Invalid bug object"
 
170
            return
 
171
 
 
172
    except KeyboardInterrupt:
 
173
        sys.exit("KeyboardInterrupt caught.")
 
174
    except HTTPError:
 
175
        if verbose >= 1: print "bug #"+str(bugnumber)+": HTTP error"
 
176
        return
 
177
    except:
 
178
        if verbose >= 1: print "bug #"+str(bugnumber)+": Error opening bug"
 
179
        return
 
180
 
 
181
    try:
 
182
        cursor.execute("SELECT originalbug FROM qawebsite_launchpad_bug WHERE originalbug='"+bug_originalbug+"'")
 
183
        if len(cursor.fetchall()) == 0:
 
184
            cursor.execute("INSERT INTO qawebsite_launchpad_bug (bugnumber, originalbug, title, product, status, importance, assignee, mentoring, commentscount, subscriberscount, duplicatescount) VALUES ("+bug_bugnumber+","+bug_originalbug+","+bug_title+","+bug_product+","+bug_status+","+bug_importance+","+bug_assignee+","+bug_mentoring+","+bug_comments+","+bug_subscribers+","+bug_duplicates+")")
 
185
        else:
 
186
            cursor.execute("UPDATE qawebsite_launchpad_bug SET lastchange=now() WHERE originalbug='"+bug_originalbug+"' AND status!="+bug_status)
 
187
            cursor.execute("UPDATE qawebsite_launchpad_bug SET bugnumber="+bug_bugnumber+", title="+bug_title+", product="+bug_product+", status="+bug_status+", importance="+bug_importance+", assignee="+bug_assignee+", mentoring="+bug_mentoring+", commentscount="+bug_comments+", subscriberscount="+bug_subscribers+", duplicatescount="+bug_duplicates+" WHERE originalbug='"+bug_originalbug+"'")
 
188
        db.commit()
 
189
        if verbose >= 3: print "bug #"+str(bugnumber)+": Successfully updated"
 
190
    except KeyboardInterrupt:
 
191
        sys.exit("KeyboardInterrupt caught.")
 
192
    except:
 
193
        if verbose >= 1: print "bug #"+str(bugnumber)+": DB faillure"
 
194
        return
 
195
 
 
196
# Arrays containing the SQL queries to execute
262
197
bug_new=[]
263
198
bug_current=[]
264
199
bug_archive=[]
265
 
spec_new=[]
266
 
spec_current=[]
267
 
spec_archive=[]
268
 
 
269
 
#Check if we have the right qawebsite_launchpad_bug table
270
 
try:
271
 
        cursor.execute("SELECT bugnumber,originalbug,title,product,status,importance,assignee,mentoring,commentscount,subscriberscount,duplicatescount FROM qawebsite_launchpad_bug")
272
 
except:
273
 
        sys.exit("table qawebsite_launchpad_bug missing")
274
 
 
275
 
#Check what are the installed modules
276
 
try:
277
 
        cursor.execute("SELECT bugnumber FROM qatracker_bug")
278
 
        bug_new.append("SELECT DISTINCT bugnumber FROM qatracker_bug WHERE bugnumber NOT IN (SELECT originalbug FROM qawebsite_launchpad_bug)")
279
 
        bug_current.append("SELECT DISTINCT qatracker_bug.bugnumber FROM qatracker_result LEFT JOIN qatracker_build ON qatracker_result.buildid=qatracker_build.id LEFT JOIN qatracker_milestone ON qatracker_milestone.id=qatracker_build.milestoneid LEFT JOIN qatracker_bug ON qatracker_bug.resultid=qatracker_result.id WHERE qatracker_milestone.status!=2")
280
 
        bug_archive.append("SELECT DISTINCT qatracker_bug.bugnumber FROM qatracker_result LEFT JOIN qatracker_build ON qatracker_result.buildid=qatracker_build.id LEFT JOIN qatracker_milestone ON qatracker_milestone.id=qatracker_build.milestoneid LEFT JOIN qatracker_bug ON qatracker_bug.resultid=qatracker_result.id WHERE qatracker_milestone.status=2")
281
 
except:
282
 
        if verbose >= 1: print "Module qatracker not found"
283
 
 
284
 
try:
285
 
        cursor.execute("SELECT bugid FROM qapoll_choice")
286
 
        bug_new.append("SELECT DISTINCT bugid FROM qapoll_choice WHERE bugid NOT IN (SELECT originalbug FROM qawebsite_launchpad_bug)")
287
 
        bug_current.append("SELECT DISTINCT bugid FROM qapoll_choice WHERE bugid IN (SELECT originalbug FROM qawebsite_launchpad_bug) AND status != '-2'")
288
 
        bug_archive.append("SELECT DISTINCT bugid FROM qapoll_choice WHERE bugid IN (SELECT originalbug FROM qawebsite_launchpad_bug) AND status = '-2'")
289
 
        spec_new.append("SELECT DISTINCT specid FROM qapoll_choice WHERE specid NOT IN (SELECT blueprinturl FROM qawebsite_launchpad_blueprint) AND specid IS NOT NULL")
290
 
        spec_current.append("SELECT DISTINCT specid FROM qapoll_choice WHERE specid IN (SELECT blueprinturl FROM qawebsite_launchpad_blueprint) AND specid IS NOT NULL")
291
 
except:
292
 
        if verbose >= 1: print "Module qapoll not found"
293
 
 
294
 
#Generate a set of bug to parse
 
200
 
 
201
# Check if we have the right qawebsite_launchpad_bug table
 
202
try:
 
203
    cursor.execute("SELECT bugnumber,originalbug,title,product,status,importance,assignee,mentoring,commentscount,subscriberscount,duplicatescount FROM qawebsite_launchpad_bug")
 
204
except:
 
205
    sys.exit("table qawebsite_launchpad_bug missing")
 
206
 
 
207
# Check what are the installed modules
 
208
try:
 
209
    cursor.execute("SELECT bugnumber FROM qatracker_bug")
 
210
    bug_new.append("SELECT DISTINCT bugnumber FROM qatracker_bug WHERE bugnumber NOT IN (SELECT originalbug FROM qawebsite_launchpad_bug)")
 
211
    bug_current.append("SELECT DISTINCT qatracker_bug.bugnumber FROM qatracker_result LEFT JOIN qatracker_build ON qatracker_result.buildid=qatracker_build.id LEFT JOIN qatracker_milestone ON qatracker_milestone.id=qatracker_build.milestoneid LEFT JOIN qatracker_bug ON qatracker_bug.resultid=qatracker_result.id WHERE qatracker_milestone.status!=2")
 
212
    bug_archive.append("SELECT DISTINCT qatracker_bug.bugnumber FROM qatracker_result LEFT JOIN qatracker_build ON qatracker_result.buildid=qatracker_build.id LEFT JOIN qatracker_milestone ON qatracker_milestone.id=qatracker_build.milestoneid LEFT JOIN qatracker_bug ON qatracker_bug.resultid=qatracker_result.id WHERE qatracker_milestone.status=2")
 
213
except KeyboardInterrupt:
 
214
    sys.exit("KeyboardInterrupt caught.")
 
215
except:
 
216
    db.rollback()
 
217
    if verbose >= 1: print "Module qatracker not found"
 
218
 
 
219
# Generate a set of bug to parse
295
220
if len(sys.argv) == 2:
296
 
        if sys.argv[1] == "update-new":
297
 
                if verbose >= 3: print "Selecting new items"
298
 
                bugs=getItems(bug_new)
299
 
                specs=getItems(spec_new)
300
 
        elif sys.argv[1] == "update-current":
301
 
                if verbose >= 3: print "Selecting currently shown items"
302
 
                bugs=getItems(bug_current)
303
 
                specs=getItems(spec_current)
304
 
        elif sys.argv[1] == "update-archive":
305
 
                if verbose >= 3: print "Selecting archived items"
306
 
                bugs=getItems(bug_archive)
307
 
                specs=getItems(spec_archive)
308
 
        else:
309
 
                sys.exit("Unknown action \""+sys.argv[1]+"\"")
 
221
    if sys.argv[1] == "update-new":
 
222
        if verbose >= 3: print "Selecting new items"
 
223
        bugs=getItems(bug_new)
 
224
    elif sys.argv[1] == "update-current":
 
225
        if verbose >= 3: print "Selecting currently shown items"
 
226
        bugs=getItems(bug_current)
 
227
    elif sys.argv[1] == "update-archive":
 
228
        if verbose >= 3: print "Selecting archived items"
 
229
        bugs=getItems(bug_archive)
 
230
    else:
 
231
        sys.exit("Unknown action \""+sys.argv[1]+"\"")
310
232
else:
311
 
        sys.exit("Syntax: "+sys.argv[0]+" <action>")
 
233
    sys.exit("Syntax: "+sys.argv[0]+" <action>")
312
234
 
313
235
#Now parsing bugs
314
236
for bug in bugs:
315
 
        updateBug(bug)
316
 
 
317
 
#Now parsing specs
318
 
for spec in specs:
319
 
        updateSpec(spec)
 
237
    updateBug(bug)
320
238
 
321
239
#Close DB connection
322
240
cursor.close()
323
241
db.close()
324
 
os.remove("/tmp/lp-integration.lock")
 
242
 
 
243
if lock:
 
244
    os.remove("/tmp/lp-integration.lock")