summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-bz47
1 files changed, 28 insertions, 19 deletions
diff --git a/git-bz b/git-bz
index bb83522..935d7e1 100755
--- a/git-bz
+++ b/git-bz
@@ -893,6 +893,32 @@ class BugServer(object):
return self._xmlrpc_proxy
+ # Query the server for the legal values of the given field; returns an
+ # array, or None if the query failed
+ def _legal_values(self, field):
+ try:
+ response = self.get_xmlrpc_proxy().Bug.legal_values({ 'field': field })
+ cache.set(self.host, 'legal_' + field, response['values'])
+ return response['values']
+ except xmlrpclib.Fault, e:
+ if e.faultCode == -32000: # https://bugzilla.mozilla.org/show_bug.cgi?id=513511
+ return None
+ raise
+ except xmlrpclib.ProtocolError, e:
+ if e.errcode == 500: # older bugzilla versions die this way
+ return None
+ elif e.errcode == 404: # really old bugzilla, no XML-RPC
+ return None
+ raise
+
+ def legal_values(self, field):
+ try:
+ return cache.get(self.host, 'legal_' + field)
+ except IndexError:
+ values = self._legal_values(field)
+ cache.set(self.host, 'legal_' + field, values)
+ return values
+
class BugTransport(xmlrpclib.Transport):
def __init__(self, server):
xmlrpclib.Transport.__init__(self)
@@ -1104,23 +1130,6 @@ class Bug(object):
print "Attached %s" % filename
- # Query the server for the legal values of the given field; returns an
- # array, or None if the query failed
- def legal_values(self, field):
- try:
- response = self.server.get_xmlrpc_proxy().Bug.legal_values({ 'field': field })
- return response['values']
- except xmlrpclib.Fault, e:
- if e.faultCode == -32000: # https://bugzilla.mozilla.org/show_bug.cgi?id=513511
- return None
- raise
- except xmlrpclib.ProtocolError, e:
- if e.errcode == 500: # older bugzilla versions die this way
- return None
- elif e.errcode == 404: # really old bugzilla, no XML-RPC
- return None
- raise
-
# Update specified fields of a bug; keyword arguments are interpreted
# as field_name=value
def update(self, **changes):
@@ -1492,7 +1501,7 @@ def edit_bug(bug, applied_commits=None):
template.write("# Uncommment and edit to change resolution\n")
else:
template.write("# Uncomment to resolve bug\n")
- legal_resolutions = bug.legal_values('resolution')
+ legal_resolutions = bug.server.legal_values('resolution')
if legal_resolutions:
# Require non-empty resolution. DUPLICATE, MOVED would need special support
legal_resolutions = [x for x in legal_resolutions if x not in ('', 'DUPLICATE', 'MOVED')]
@@ -1507,7 +1516,7 @@ def edit_bug(bug, applied_commits=None):
template.write("\n# Lines below change patch status, unless commented out\n")
else:
template.write("\n# To change patch status, uncomment below, edit 'committed' as appropriate.\n")
- legal_statuses = bug.legal_values('attachments.status')
+ legal_statuses = bug.server.legal_values('attachments.status')
if legal_statuses:
legal_statuses.append('obsolete')
template.write("# possible statuses: %s\n" % abbreviation_help_string(legal_statuses))