/[gentoo]/src/packages/changelogs.py
Gentoo

Diff of /src/packages/changelogs.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.2 Revision 1.2.2.2
1#!/usr/bin/python -OO 1#
2# Copyright (C) 2003-2005, marduk <marduk@python.net>
3#
4# This copyrighted material is made available to anyone wishing to use,
5# modify, copy, or redistribute it subject to the terms and conditions
6# of the GNU General Public License v.2.
7#
8# You should have received a copy of the GNU General Public License
9# along with this program; if not, write to the Free Software Foundation,
10# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
11#
12"""Module to deal with Changelog files in the portage tree"""
2 13
3import mstring 14from packages import mstring
4import re 15import re
16from cgi import escape
5 17
18#BUG_REGEX = re.compile(r'\B#[0-9]+|\bbug [0-9]+', re.I)
19BUG_REGEX = re.compile(r'((\B#|\bbug )([0-9]+))', re.I)
20DATE_REGEX = re.compile(
21 r'[0-9]{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4}[;:]',
22 re.M)
23GENTOO_DEV = re.compile(r'&lt;((.+))@gentoo.org&gt;', re.I)
6 24
7BUG_REGEX = re.compile(r'\b#[0-9]+|\bbug [0-9]+',re.I)
8BUG_URL = 'http://bugs.gentoo.org/show_bug.cgi?id='
9
10def bugs_to_html(s): 25def bugs_to_html(string):
26 """Convert bug #'s to html, escape other html text"""
27 string = string.strip()
28 string = escape(string)
11 index = 1 29## index = 1
12 while 1: 30## while 1:
13 match = BUG_REGEX.search(s,index) 31## match = BUG_REGEX.search(string, index)
14 if not match: 32## if not match:
15 break 33## break
34## start = match.start()
35## end = match.end()
36## substring = string[start:end]
37## if substring[0] == '#': # this of the form "#1234"
38## bugid = substring[1:]
39## else: # this is of the form "bug 1234"
40## bugid = substring[4:]
41## url = '<a href="/bugs/%s">%s</a>' % (bugid, substring)
42## (string, index) = mstring.replace_sub(string, url, start , end-1)
43 index = 0
44 string = BUG_REGEX.sub(r'<a href="/bugs/\3">\1</a>', string)
45 match = DATE_REGEX.search(string, index)
46 if match:
16 start = match.start() 47 start = match.start()
17 end = match.end() 48 next = DATE_REGEX.search(string, match.end() + 1)
49 if next:
50 end = next.start() - 1
51 else:
52 end = len(string)
18 substring = s[start:end] 53 substring = string[start:end]
19 if substring[0] == '#': # this of the form "#1234" 54 html = '<span class="change"><span class="date">%s</span>%s</span>' % \
20 bugid = substring[1:] 55 (substring[:11], substring[11:])
21 else: # this is of the form "bug 1234"
22 bugid = substring[4:]
23 url = '<a href="%s%s">%s</a>' % (BUG_URL,bugid,substring)
24 (s,index) = mstring.replace_sub(s,url,start,end-1) 56 (string, index) = mstring.replace_sub(string[:end+1], html, start, end)
57 #s = '<ul>' + s + '</ul>\n'
58 # convert email address to links to CIA stats
59 string = GENTOO_DEV.sub(r'(<a href="/stats/\2">\1</a>)', string)
25 return s 60 return string
26 61
27def changelog(filename): 62def changelog(filename):
63 """(Try to) Extract only the most recent bits from a changelog file"""
28 try: 64 try:
29 #print filename 65 #print filename
30 fp = open(filename,'r') 66 _file = file(filename, 'r')
31 except IOError: 67 except IOError:
32 return "" 68 return ""
33 69
34 70
35 s = "" 71 string = ""
36 # find first line that isn't blank or a comment 72 # find first line that isn't blank or a comment
37 while True: 73 while True:
38 line = fp.readline() 74 line = _file.readline()
39 if not line: break 75 if not line:
76 break
40 #print line 77 #print line
41 if line[0] not in ['#','','\n']: 78 if line[0] not in ['#', '', '\n']:
42 s = s + line 79 string = string + line
43 break 80 break
44 81
45 # append next strings until you reach next "*" 82 # append next strings until you reach next "*"
46 while True: 83 while True:
47 line = fp.readline() 84 line = _file.readline()
48 #print repr(line) 85 #print repr(line)
49 if not line or line[0] == '*': break 86 if not line or line[0] == '*':
87 break
50 else: s= s + line 88 else: string = string + line
51 89
52 return s 90 return string

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.2.2.2

  ViewVC Help
Powered by ViewVC 1.1.20