changelog.py
56 lines
| 2.0 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 * | ||||
Bryan O'Sullivan
|
r1321 | from demandload import demandload | ||
demandload(globals(), "os time util") | ||||
mpm@selenic.com
|
r1089 | |||
class changelog(revlog): | ||||
def __init__(self, opener): | ||||
revlog.__init__(self, opener, "00changelog.i", "00changelog.d") | ||||
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 | ||
# current 32-bit linux runtimes. | ||||
Bryan O'Sullivan
|
r1202 | try: | ||
when, offset = map(int, date.split(' ')) | ||||
except ValueError: | ||||
raise ValueError('invalid date: %r' % date) | ||||
Bryan O'Sullivan
|
r1197 | if abs(when) > 0x7fffffff: | ||
raise ValueError('date exceeds 32 bits: %d' % when) | ||||
if abs(offset) >= 43200: | ||||
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) | ||||