Hmm I was looking at my code, and its flawed (the usage of brackets). This
one should work better:

import re


def replace_bug(m):

    bugs = re.split(r"[\s,]+", m.group(1))

    return ", ".join("<a
href='http://code.google.com/p/chromium/issues/detail?id=%s'>%s</a>" %
(i, i) for i in bugs if i != "")
bug_pattern = r"(?<=BUG=)(\s*\d+\s*(?:,\s*\d+\s*)*)"
result = re.sub(bug_pattern, replace_bug, "\nBUG=1 , 2, 3 ")
print result

 <http://codepad.org/DmH9r8I6>I submitted the patch to rietveld:
 http://codereview.appspot.com/115083
<http://codereview.appspot.com/115083>
-- Mohamed Mansour


On Wed, Sep 9, 2009 at 11:44 PM, Mohamed Mansour <[email protected]> wrote:

> Then it would just be a simple regular expression:
>
>> def repl(m):
>
>     issues = re.split('\,|\s', m.group(1))
>
>     return ", ".join("<a href='
>> http://code.google.com/p/chromium/issues/detail?id=%s'>%s</a>" % (s, s)
>> for s in issues)
>
>
>> if __name__ == '__main__':
>
>     description = "\nBUG=1,2, 3,4"
>
>     description = re.sub("\nBUG=(\d+[\,\s?\d+]*)", repl, description)
>
>      print description
>
>
> - Mohamed Mansour
>
>
>
> On Wed, Sep 9, 2009 at 11:32 PM, Jeremy Orlow <[email protected]> wrote:
>
>> Would be nice if it still handled http://crbug.com/ and crbug.com/ since
>> people probably will continue using them for a while.
>> Also split(', ') ONLY works for when you do 'blah, blah'.  Not
>> 'blah,blah'.  Not 'blah blah'.  Or any other crazy things people might do.
>>
>> I didn't know that you could give re.sub a callback to format the replace
>> text though.  That's cool and could probably make my code simpler.
>>
>> J
>>
>>
>> On Thu, Sep 10, 2009 at 12:27 PM, Mohamed Mansour <[email protected]>wrote:
>>
>>> How about just this:
>>> def repl(m):
>>>     issues = m.group(1).split(', ')
>>>     return ", ".join("<a href='
>>> http://code.google.com/p/chromium/issues/detail?id=%s'>%s</a>" % (s, s)
>>> for s in issues)
>>>
>>> if __name__ == '__main__':
>>>     description = "\nBUG=2, 3"
>>>     description = re.sub("\nBUG=(\d+[, \d+]*)", repl, description)
>>>     print description
>>>
>>>
>>> Works great!
>>>
>>> - Mohamed Mansour
>>>
>>>
>>>
>>> On Wed, Sep 9, 2009 at 11:25 PM, Jeremy Orlow <[email protected]>wrote:
>>>
>>>> I don't have a rietveld dev environment set up, so I wrote a quick
>>>> script to test the general algorithm.  It's not as pythony as I'd like, but
>>>> it seems to be fairly robust:
>>>> #!/usr/bin/python
>>>> import re
>>>>
>>>> description = """\
>>>> Blah blah blah.
>>>> Blaaahhhh
>>>>
>>>> TEST=none
>>>> BUG=123,456, 798,0
>>>> BUG=888
>>>> BUG=none
>>>>  BUG = none, 2349,2,asdf
>>>> BUG = http://crbug.com/123
>>>> BUG = crbug.com/234 crbug/82
>>>> """
>>>>
>>>> LINK = "<a href='http://code.google.com/p/chromium/issues/detail?id=%s
>>>> '>%s</a>"
>>>> def rewrite_bug_numbers(string):
>>>>   if ',' in string:
>>>>     right, left = string.split(',', 1)
>>>>     return rewrite_bug_numbers(right) + ',' + rewrite_bug_numbers(left)
>>>>   if ' ' in string:
>>>>     right, left = string.split(' ', 1)
>>>>     return rewrite_bug_numbers(right) + ' ' + rewrite_bug_numbers(left)
>>>>
>>>>   # Base cases:
>>>>   if string.isdigit():
>>>>     return LINK % (string, string)
>>>>   match = re.search(r'^(http://|)crbug.com/(\d+)', string)
>>>>   if match:
>>>>     return LINK % (match.group(2), string)
>>>>   return string
>>>>
>>>> output = []
>>>> for line in description.splitlines():
>>>>   match = re.search(r'^(\s*BUG\s*=)(.*)$', line)
>>>>   if match:
>>>>     line = match.group(1) + rewrite_bug_numbers(match.group(2))
>>>>   output.append(line)
>>>> print "<br>\n".join(output)
>>>>
>>>>
>>>>
>>>> Prints out
>>>>
>>>> Blah blah blah.<br>
>>>> Blaaahhhh<br>
>>>> <br>
>>>> TEST=none<br>
>>>> BUG=<a 
>>>> href='http://code.google.com/p/chromium/issues/detail?id=123'>123</a>,<a
>>>> href='http://code.google.com/p/chromium/issues/detail?id=456'>456</a>,
>>>> <a href='http://code.google.com/p/chromium/issues/detail?id=798'>798</a>,<a
>>>> href='http://code.google.com/p/chromium/issues/detail?id=0'>0</a><br>
>>>> BUG=<a href='http://code.google.com/p/chromium/issues/detail?id=888
>>>> '>888</a><br>
>>>> BUG=none<br>
>>>>   BUG = none, <a href='
>>>> http://code.google.com/p/chromium/issues/detail?id=2349'>2349</a>,<a
>>>> href='http://code.google.com/p/chromium/issues/detail?id=2
>>>> '>2</a>,asdf<br>
>>>> BUG = <a href='http://code.google.com/p/chromium/issues/detail?id=123'>
>>>> http://crbug.com/123</a><br>
>>>> BUG = <a href='http://code.google.com/p/chromium/issues/detail?id=234'>
>>>> crbug.com/234</a> crbug/82
>>>>
>>>>
>>>> If we weren't concerned about preserving formatting, you could do it
>>>> with replace and split:
>>>>
>>>> line = "1234, 23 , 2"
>>>> bugs = line.replace(",", " ").split()
>>>>
>>>>
>>>> But it's not toooo much more work to keep in all the formatting.
>>>>
>>>>
>>>> On Thu, Sep 10, 2009 at 11:01 AM, John Abd-El-Malek 
>>>> <[email protected]>wrote:
>>>>
>>>>> Thanks, glad you enjoy it :)
>>>>> This was a side distraction to fix the annoying issue of having to
>>>>> manually copying and pasting the bug ids.  It severely tested my regex-fu
>>>>> and since the multiple bugs case should be rare, I'll hide behind the 
>>>>> excuse
>>>>> that if they're duplicates they should be marked as such and only end up
>>>>> with one, and if they're different bugs there should be separate 
>>>>> changelists
>>>>> ;)  The rietveld change is at
>>>>> http://code.google.com/p/rietveld/source/detail?r=455, if anyone sends
>>>>> me a patch to make it work with multiple bug ids, I'd be happy to push it.
>>>>>
>>>>>
>>>>> On Wed, Sep 9, 2009 at 6:15 PM, Mohamed Mansour <[email protected]>wrote:
>>>>>
>>>>>> Very nice, no longer I have to put crbug.com/#.  Whoever did that
>>>>>> autolink, can you support multiple bugs as well? The format bugdroid 
>>>>>> uses is
>>>>>> BUG=1, 2, 3
>>>>>> - Mohamed Mansour
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Sep 9, 2009 at 8:58 PM, Paweł Hajdan Jr. <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> I just noticed that BUG=1234 lines are autolinked to the correct bug
>>>>>>> when viewed in Rietveld (codereview.chromium.org). This is very
>>>>>>> useful, thanks!
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> >>>>>
>>>>>
>>>>
>>>
>>
>

--~--~---------~--~----~------------~-------~--~----~
Chromium Developers mailing list: [email protected] 
View archives, change email options, or unsubscribe: 
    http://groups.google.com/group/chromium-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to