This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ajaksu2
Recipients ajaksu2, loewis
Date 2009-03-06.05:29:01
SpamBayes Score 0.0020189185
Marked as misclassified No
Message-id <00163630f1df3867d704646c8f51@google.com>
In-reply-to
Content
Reviewers: ,

Description:
"This is a very long line.  I am wondering how it will be wrapped. What
will happen to this exceedingly long line? Will it be wrapped? Will it?
Really? What will happen?

Here's an example:

   def fact(n):
     if n > 1:
       return n * fact(n-1)
     else:
       assert n in (0, 1)
       return 1

What do you think of that?"

Please review this at http://codereview.appspot.com/24075

Affected files:
   M     static/upload.py

Index: static/upload.py
===================================================================
--- static/upload.py	(revision 402)
+++ static/upload.py	(working copy)
@@ -61,7 +61,30 @@
  # Max size of patch or base file.
  MAX_UPLOAD_SIZE = 900 * 1024

+#python static/upload.py -R 2771 -F msg66272 --send_mail
+fields = {'issue':'title', 'msg':'content', 'file':'description', }
+def fetch_item(nodeid, kind='issue', tracker='http://bugs.python.org'):
+  query_tpl = [('@action', 'export_csv'), ('@filter', 'id'),
+  ('id', nodeid), ('@columns', fields[kind])]
+  item_url = '/%s?%s' % (kind, urllib.urlencode(query_tpl))
+  content = urllib.urlopen(tracker + item_url).read().split('\r\n')
+  if content[0] == 'title':
+    return '[issue%s] %s' % (nodeid, content[1].strip())
+  elif content[0] == 'content' or content[0] == 'description':
+    return content[1].strip()

+def fetch(nodeid, debug=True):
+  kind = 'issue'
+  if nodeid.startswith('msg'):
+    kind = 'msg'
+  elif nodeid.startswith('file'):
+    kind = 'file'
+  nodeid = nodeid.replace(kind, '')
+  result = fetch_item(int(nodeid), kind)
+  if debug:
+    logging.info('Fetched "%s: %s"' % (kind, result))
+  return result
+
  def GetEmail(prompt):
    """Prompts the user for their email address and returns it.

@@ -453,6 +476,14 @@
  group.add_option("--send_mail", action="store_true",
                   dest="send_mail", default=False,
                   help="Send notification email to reviewers.")
+# Link options
+group = parser.add_option_group("Link options")
+group.add_option("-R", "--roundup", action="store", dest="roundup",
+                 metavar="ROUNDUP", default=None,
+                 help="Python tracker issue number to link with.")
+group.add_option("-F", "--fetch_descr", action="store", dest="fetch_descr",
+                 metavar="FETCHDESCR", default=None,
+                 help="Tracker file or message to fetch description from.")

  def GetRpcServer(options):
@@ -1291,7 +1322,10 @@
      prompt = "Message describing this patch set: "
    else:
      prompt = "New issue subject: "
-  message = options.message or raw_input(prompt).strip()
+  if options.roundup:
+    message = fetch(options.roundup)
+  else:
+    message = options.message or raw_input(prompt).strip()
    if not message:
      ErrorExit("A non-empty message is required")
    rpc_server = GetRpcServer(options)
@@ -1307,11 +1341,16 @@
        if "@" in reviewer and not reviewer.split("@")[1].count(".") == 1:
          ErrorExit("Invalid email address: %s" % reviewer)
      form_fields.append(("reviewers", options.reviewers))
+  tracker_email = 'report@bugs.python.org,'
    if options.cc:
      for cc in options.cc.split(','):
        if "@" in cc and not cc.split("@")[1].count(".") == 1:
          ErrorExit("Invalid email address: %s" % cc)
-    form_fields.append(("cc", options.cc))
+    if options.roundup:
+      cc = tracker_email + options.cc
+    form_fields.append(("cc", cc))
+  elif options.roundup:
+    form_fields.append(("cc", tracker_email[:-1]))
    description = options.description
    if options.description_file:
      if options.description:
@@ -1319,6 +1358,9 @@
      file = open(options.description_file, 'r')
      description = file.read()
      file.close()
+  elif options.fetch_descr:
+    # XXX Add error handling as above
+    description = fetch(options.fetch_descr)
    if description:
      form_fields.append(("description", description))
    # Send a hash of all the base file so the server can determine if a copy
History
Date User Action Args
2009-03-06 05:29:12ajaksu2setrecipients: + loewis
2009-03-06 05:29:09ajaksu2linkissue2771 messages
2009-03-06 05:29:02ajaksu2create