##// END OF EJS Templates
make repo scheme table driven.
make repo scheme table driven.

File last commit:

r2142:8a1e2a9c default
r2472:e6ec81a8 default
Show More
changelog.py
59 lines | 2.1 KiB | text/x-python | PythonLexer
mpm@selenic.com
changelog: adjust imports, comment
r1095 # changelog.py - changelog class for mercurial
mpm@selenic.com
Break apart hg.py...
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
i18n first part: make '_' available for files who need it
r1400 from i18n import gettext as _
Bryan O'Sullivan
Clean up date and timezone handling....
r1321 from demandload import demandload
demandload(globals(), "os time util")
mpm@selenic.com
Break apart hg.py...
r1089
class changelog(revlog):
Thomas Arendsen Hein
Replaced 0 with REVLOGV0 where this meaning is used.
r2142 def __init__(self, opener, defversion=REVLOGV0):
mason@suse.com
Implement revlogng....
r2072 revlog.__init__(self, opener, "00changelog.i", "00changelog.d",
defversion)
mpm@selenic.com
Break apart hg.py...
r1089
def extract(self, text):
if not text:
Matt Mackall
Fix data reported for the nullid changeset
r1364 return (nullid, "", (0, 0), [], "")
mpm@selenic.com
Break apart hg.py...
r1089 last = text.index("\n\n")
desc = text[last + 2:]
l = text[:last].splitlines()
manifest = bin(l[0])
user = l[1]
Bryan O'Sullivan
Clean up date and timezone handling....
r1321 date = l[2].split(' ')
Bryan O'Sullivan
Some repos represent a date as a float.
r1327 time = float(date.pop(0))
Bryan O'Sullivan
Clean up date and timezone handling....
r1321 try:
# various tools did silly things with the time zone field.
timezone = int(date[0])
except:
timezone = 0
mpm@selenic.com
Break apart hg.py...
r1089 files = l[3:]
Bryan O'Sullivan
Clean up date and timezone handling....
r1321 return (manifest, user, (time, timezone), files, desc)
mpm@selenic.com
Break apart hg.py...
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
Validate user input of dates when adding a changelog entry.
r1195 if date:
Bryan O'Sullivan
Make date/timezone validation in changelog.add more robust. Add test.
r1196 # validate explicit (probably user-specified) date and
Bryan O'Sullivan
Date validation must check for 32-bit width. Don't use assert to check.
r1197 # time zone offset. values must fit in signed 32 bits for
Alexis S. L. Carvalho
Fix timezone check....
r2137 # current 32-bit linux runtimes. timezones go from UTC-12
# to UTC+14
Bryan O'Sullivan
Commit date validation: more stringent checks, more useful error messages.
r1202 try:
when, offset = map(int, date.split(' '))
except ValueError:
Benoit Boissinot
i18n part2: use '_' for all strings who are part of the user interface
r1402 raise ValueError(_('invalid date: %r') % date)
Bryan O'Sullivan
Date validation must check for 32-bit width. Don't use assert to check.
r1197 if abs(when) > 0x7fffffff:
Benoit Boissinot
i18n part2: use '_' for all strings who are part of the user interface
r1402 raise ValueError(_('date exceeds 32 bits: %d') % when)
Alexis S. L. Carvalho
Fix timezone check....
r2137 if offset < -50400 or offset > 43200:
Benoit Boissinot
i18n part2: use '_' for all strings who are part of the user interface
r1402 raise ValueError(_('impossible time zone offset: %d') % offset)
Bryan O'Sullivan
Validate user input of dates when adding a changelog entry.
r1195 else:
Bryan O'Sullivan
Clean up date and timezone handling....
r1321 date = "%d %d" % util.makedate()
mpm@selenic.com
Break apart hg.py...
r1089 list.sort()
l = [hex(manifest), user, date] + list + ["", desc]
text = "\n".join(l)
return self.addrevision(text, transaction, self.count(), p1, p2)