source: soft/build_system/build_system/repsys/tags/V1_5_5/RepSys/log.py @ 1

Last change on this file since 1 was 1, checked in by fasma, 12 years ago

Initial Import from Mandriva's soft revision 224062 and package revision 45733

File size: 3.2 KB
Line 
1#!/usr/bin/python
2from RepSys import Error, config
3from RepSys.svn import SVN
4import tempfile
5import shutil
6import time
7import os
8
9def svn2rpm(pkgdirurl, rev=None, size=None):
10    concat = config.get("log", "concat", "").split()
11    svn = SVN()
12    log = svn.log(os.path.join(pkgdirurl, "current"), start=rev)
13    if (size is not None):
14        log = log[:size]
15    rpmlog = []
16    lastauthor = None
17    for logentry in log:
18        entryheader = []
19        if lastauthor != logentry.author or \
20           not (logentry.author in concat or "*" in concat):
21            entryheader.append(time.strftime("* %a %b %d %Y ", logentry.date))
22            entryheader.append(config.get("users", logentry.author,
23                               logentry.author))
24            entryheader.append("\n")
25            entryheader.append(time.strftime("+ %Y-%m-%d %H:%M:%S",
26                               logentry.date))
27            entryheader.append(" (%d)" % logentry.revision)
28            if lastauthor:
29                rpmlog.append("")
30            lastauthor = logentry.author
31            entrylines = []
32        first = 1
33        for line in logentry.lines:
34            if line:
35                line = line.replace("%", "%%")
36                if first:
37                    first = 0
38                    if entryheader:
39                        rpmlog.append("".join(entryheader))
40                    line = line.lstrip()
41                    if line[0] != "-":
42                        nextline = "- " + line
43                    else:
44                        nextline = line
45                elif line[0] != " " and line[0] != "-":
46                    nextline = "  " + line
47                else:
48                    nextline = line
49                if nextline not in entrylines:
50                    rpmlog.append(nextline)
51                    entrylines.append(nextline)
52    return "\n".join(rpmlog)+"\n"
53
54def specfile_svn2rpm(pkgdirurl, specfile, rev=None, size=None):
55    file = open(specfile)
56    lines = file.readlines()
57    file.close()
58    newlines = []
59    found = 0
60   
61    # Strip old changelogs
62    for line in lines:
63        if line.startswith("%changelog"):
64            found = 1
65        elif not found:
66            newlines.append(line)
67        elif line.startswith("%"):
68            found = 0
69            newlines.append(line)
70
71    # Create new changelog
72    newlines.append("\n\n%changelog\n")
73    newlines.append(svn2rpm(pkgdirurl, rev, size))
74
75    # Merge old changelog, if available
76    oldurl = config.get("log", "oldurl")
77    if oldurl:
78        svn = SVN()
79        tmpdir = tempfile.mktemp()
80        try:
81            pkgname = os.path.basename(pkgdirurl)
82            pkgoldurl = os.path.join(oldurl, pkgname)
83            if svn.ls(pkgoldurl, noerror=1):
84                svn.checkout(pkgoldurl, tmpdir, rev=rev)
85                logfile = os.path.join(tmpdir, "log")
86                if os.path.isfile(logfile):
87                    file = open(logfile)
88                    newlines.append("\n")
89                    newlines.append(file.read())
90                    file.close()
91        finally:
92            if os.path.isdir(tmpdir):
93                shutil.rmtree(tmpdir)
94
95    # Write new specfile
96    file = open(specfile, "w")
97    file.writelines(newlines)
98    file.close()
99
100# vim:et:ts=4:sw=4
Note: See TracBrowser for help on using the repository browser.