summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/changelog.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-06-23 20:44:49 +0000
committerZac Medico <zmedico@gentoo.org>2009-06-23 20:44:49 +0000
commitfcb5bebaf8eff2025cb8a40642f1e912dff5c5e0 (patch)
tree161212e9b0ccdb5c4d236eb392f2da5b42088e8f /pym/_emerge/changelog.py
parent5cf76a21799e38d58f029efa93f40864b13448d1 (diff)
downloadportage-fcb5bebaf8eff2025cb8a40642f1e912dff5c5e0.tar.gz
portage-fcb5bebaf8eff2025cb8a40642f1e912dff5c5e0.tar.bz2
portage-fcb5bebaf8eff2025cb8a40642f1e912dff5c5e0.zip
Bug #275217 - Part 2 - Move changelog stuff stuff out of depgraph.
Thanks to Sebastian Mingramm (few) <s.mingramm@gmx.de> for this patch. svn path=/main/trunk/; revision=13677
Diffstat (limited to 'pym/_emerge/changelog.py')
-rw-r--r--pym/_emerge/changelog.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/pym/_emerge/changelog.py b/pym/_emerge/changelog.py
new file mode 100644
index 000000000..8084ecb9f
--- /dev/null
+++ b/pym/_emerge/changelog.py
@@ -0,0 +1,62 @@
+import os
+import re
+
+try:
+ import portage
+except ImportError:
+ from os import path as osp
+ import sys
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ import portage
+
+def calc_changelog(ebuildpath,current,next):
+ if ebuildpath == None or not os.path.exists(ebuildpath):
+ return []
+ current = '-'.join(portage.catpkgsplit(current)[1:])
+ if current.endswith('-r0'):
+ current = current[:-3]
+ next = '-'.join(portage.catpkgsplit(next)[1:])
+ if next.endswith('-r0'):
+ next = next[:-3]
+ changelogpath = os.path.join(os.path.split(ebuildpath)[0],'ChangeLog')
+ try:
+ changelog = open(changelogpath).read()
+ except SystemExit, e:
+ raise # Needed else can't exit
+ except:
+ return []
+ divisions = _find_changelog_tags(changelog)
+ #print 'XX from',current,'to',next
+ #for div,text in divisions: print 'XX',div
+ # skip entries for all revisions above the one we are about to emerge
+ for i in range(len(divisions)):
+ if divisions[i][0]==next:
+ divisions = divisions[i:]
+ break
+ # find out how many entries we are going to display
+ for i in range(len(divisions)):
+ if divisions[i][0]==current:
+ divisions = divisions[:i]
+ break
+ else:
+ # couldnt find the current revision in the list. display nothing
+ return []
+ return divisions
+
+def _find_changelog_tags(changelog):
+ divs = []
+ release = None
+ while 1:
+ match = re.search(r'^\*\ ?([-a-zA-Z0-9_.+]*)(?:\ .*)?\n',changelog,re.M)
+ if match is None:
+ if release is not None:
+ divs.append((release,changelog))
+ return divs
+ if release is not None:
+ divs.append((release,changelog[:match.start()]))
+ changelog = changelog[match.end():]
+ release = match.group(1)
+ if release.endswith('.ebuild'):
+ release = release[:-7]
+ if release.endswith('-r0'):
+ release = release[:-3]