changelog.py
56 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
/ mercurial / changelog.py
|
r1095 | # changelog.py - changelog class for mercurial | ||
|
r1089 | # | ||
|
r2859 | # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com> | ||
|
r1089 | # | ||
# This software may be used and distributed according to the terms | ||||
# of the GNU General Public License, incorporated herein by reference. | ||||
from revlog import * | ||||
|
r1400 | from i18n import gettext as _ | ||
|
r1321 | from demandload import demandload | ||
demandload(globals(), "os time util") | ||||
|
r1089 | |||
class changelog(revlog): | ||||
|
r2142 | def __init__(self, opener, defversion=REVLOGV0): | ||
|
r2072 | revlog.__init__(self, opener, "00changelog.i", "00changelog.d", | ||
defversion) | ||||
|
r1089 | |||
def extract(self, text): | ||||
|
r3077 | """ | ||
format used: | ||||
nodeid\n : manifest node in ascii | ||||
user\n : user, no \n or \r allowed | ||||
time tz\n : date (time is int or float, timezone is int) | ||||
files\n\n : files modified by the cset, no \n or \r allowed | ||||
(.*) : comment (free text, ideally utf-8) | ||||
""" | ||||
|
r1089 | if not text: | ||
|
r1364 | return (nullid, "", (0, 0), [], "") | ||
|
r1089 | last = text.index("\n\n") | ||
desc = text[last + 2:] | ||||
l = text[:last].splitlines() | ||||
manifest = bin(l[0]) | ||||
user = l[1] | ||||
|
r1321 | date = l[2].split(' ') | ||
|
r1327 | time = float(date.pop(0)) | ||
|
r1321 | try: | ||
# various tools did silly things with the time zone field. | ||||
timezone = int(date[0]) | ||||
except: | ||||
timezone = 0 | ||||
|
r1089 | files = l[3:] | ||
|
r1321 | return (manifest, user, (time, timezone), files, desc) | ||
|
r1089 | |||
def read(self, node): | ||||
return self.extract(self.revision(node)) | ||||
def add(self, manifest, list, desc, transaction, p1=None, p2=None, | ||||
user=None, date=None): | ||||
|
r1195 | if date: | ||
|
r2523 | parseddate = "%d %d" % util.parsedate(date) | ||
|
r1195 | else: | ||
|
r2522 | parseddate = "%d %d" % util.makedate() | ||
|
r1089 | list.sort() | ||
|
r2522 | l = [hex(manifest), user, parseddate] + list + ["", desc] | ||
|
r1089 | text = "\n".join(l) | ||
return self.addrevision(text, transaction, self.count(), p1, p2) | ||||