changelog.py
59 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
/ mercurial / changelog.py
mpm@selenic.com
|
r1095 | # changelog.py - changelog class for mercurial | ||
mpm@selenic.com
|
r1089 | # | ||
# Copyright 2005 Matt Mackall <mpm@selenic.com> | ||||
# | ||||
# This software may be used and distributed according to the terms | ||||
# of the GNU General Public License, incorporated herein by reference. | ||||
from revlog import * | ||||
Benoit Boissinot
|
r1400 | from i18n import gettext as _ | ||
Bryan O'Sullivan
|
r1321 | from demandload import demandload | ||
demandload(globals(), "os time util") | ||||
mpm@selenic.com
|
r1089 | |||
class changelog(revlog): | ||||
Thomas Arendsen Hein
|
r2142 | def __init__(self, opener, defversion=REVLOGV0): | ||
mason@suse.com
|
r2072 | revlog.__init__(self, opener, "00changelog.i", "00changelog.d", | ||
defversion) | ||||
mpm@selenic.com
|
r1089 | |||
def extract(self, text): | ||||
if not text: | ||||
Matt Mackall
|
r1364 | return (nullid, "", (0, 0), [], "") | ||
mpm@selenic.com
|
r1089 | last = text.index("\n\n") | ||
desc = text[last + 2:] | ||||
l = text[:last].splitlines() | ||||
manifest = bin(l[0]) | ||||
user = l[1] | ||||
Bryan O'Sullivan
|
r1321 | date = l[2].split(' ') | ||
Bryan O'Sullivan
|
r1327 | time = float(date.pop(0)) | ||
Bryan O'Sullivan
|
r1321 | try: | ||
# various tools did silly things with the time zone field. | ||||
timezone = int(date[0]) | ||||
except: | ||||
timezone = 0 | ||||
mpm@selenic.com
|
r1089 | files = l[3:] | ||
Bryan O'Sullivan
|
r1321 | return (manifest, user, (time, timezone), files, desc) | ||
mpm@selenic.com
|
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): | ||||
Bryan O'Sullivan
|
r1195 | if date: | ||
Bryan O'Sullivan
|
r1196 | # validate explicit (probably user-specified) date and | ||
Bryan O'Sullivan
|
r1197 | # time zone offset. values must fit in signed 32 bits for | ||
Alexis S. L. Carvalho
|
r2137 | # current 32-bit linux runtimes. timezones go from UTC-12 | ||
# to UTC+14 | ||||
Bryan O'Sullivan
|
r1202 | try: | ||
when, offset = map(int, date.split(' ')) | ||||
except ValueError: | ||||
Benoit Boissinot
|
r1402 | raise ValueError(_('invalid date: %r') % date) | ||
Bryan O'Sullivan
|
r1197 | if abs(when) > 0x7fffffff: | ||
Benoit Boissinot
|
r1402 | raise ValueError(_('date exceeds 32 bits: %d') % when) | ||
Alexis S. L. Carvalho
|
r2137 | if offset < -50400 or offset > 43200: | ||
Benoit Boissinot
|
r1402 | raise ValueError(_('impossible time zone offset: %d') % offset) | ||
Bryan O'Sullivan
|
r1195 | else: | ||
Bryan O'Sullivan
|
r1321 | date = "%d %d" % util.makedate() | ||
mpm@selenic.com
|
r1089 | list.sort() | ||
l = [hex(manifest), user, date] + list + ["", desc] | ||||
text = "\n".join(l) | ||||
return self.addrevision(text, transaction, self.count(), p1, p2) | ||||