author | Vadim Gelfer <vadim.gelfer@gmail.com> |
Wed, 03 May 2006 11:00:24 -0700 | |
changeset 2190 | b67fcd91dd1b |
parent 2142 | 8a1e2a9c7013 |
child 2522 | 85f796baab10 |
permissions | -rw-r--r-- |
1095 | 1 |
# changelog.py - changelog class for mercurial |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
2 |
# |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
3 |
# Copyright 2005 Matt Mackall <mpm@selenic.com> |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
4 |
# |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
5 |
# This software may be used and distributed according to the terms |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
6 |
# of the GNU General Public License, incorporated herein by reference. |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
7 |
|
262 | 8 |
from revlog import * |
1400
cf9a1233738a
i18n first part: make '_' available for files who need it
Benoit Boissinot <benoit.boissinot@ens-lyon.org
parents:
1364
diff
changeset
|
9 |
from i18n import gettext as _ |
1321
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
10 |
from demandload import demandload |
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
11 |
demandload(globals(), "os time util") |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
12 |
|
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
13 |
class changelog(revlog): |
2142
8a1e2a9c7013
Replaced 0 with REVLOGV0 where this meaning is used.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2137
diff
changeset
|
14 |
def __init__(self, opener, defversion=REVLOGV0): |
2072 | 15 |
revlog.__init__(self, opener, "00changelog.i", "00changelog.d", |
16 |
defversion) |
|
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
17 |
|
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
18 |
def extract(self, text): |
37 | 19 |
if not text: |
1364
0f25830f6bc3
Fix data reported for the nullid changeset
Matt Mackall <mpm@selenic.com>
parents:
1327
diff
changeset
|
20 |
return (nullid, "", (0, 0), [], "") |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
21 |
last = text.index("\n\n") |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
22 |
desc = text[last + 2:] |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
23 |
l = text[:last].splitlines() |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
24 |
manifest = bin(l[0]) |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
25 |
user = l[1] |
1321
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
26 |
date = l[2].split(' ') |
1327
085e3fc189b6
Some repos represent a date as a float.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1321
diff
changeset
|
27 |
time = float(date.pop(0)) |
1321
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
28 |
try: |
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
29 |
# various tools did silly things with the time zone field. |
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
30 |
timezone = int(date[0]) |
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
31 |
except: |
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
32 |
timezone = 0 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
33 |
files = l[3:] |
1321
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
34 |
return (manifest, user, (time, timezone), files, desc) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
35 |
|
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
36 |
def read(self, node): |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
37 |
return self.extract(self.revision(node)) |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
38 |
|
203 | 39 |
def add(self, manifest, list, desc, transaction, p1=None, p2=None, |
40 |
user=None, date=None): |
|
1195
f92af8d53330
Validate user input of dates when adding a changelog entry.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1095
diff
changeset
|
41 |
if date: |
1196
3738e85ead07
Make date/timezone validation in changelog.add more robust. Add test.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1195
diff
changeset
|
42 |
# validate explicit (probably user-specified) date and |
1197
8deb69818e4b
Date validation must check for 32-bit width. Don't use assert to check.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1196
diff
changeset
|
43 |
# time zone offset. values must fit in signed 32 bits for |
2137
5fefab118f7e
Fix timezone check.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2072
diff
changeset
|
44 |
# current 32-bit linux runtimes. timezones go from UTC-12 |
5fefab118f7e
Fix timezone check.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2072
diff
changeset
|
45 |
# to UTC+14 |
1202
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1197
diff
changeset
|
46 |
try: |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1197
diff
changeset
|
47 |
when, offset = map(int, date.split(' ')) |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1197
diff
changeset
|
48 |
except ValueError: |
1402
9d2c2e6b32b5
i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1400
diff
changeset
|
49 |
raise ValueError(_('invalid date: %r') % date) |
1197
8deb69818e4b
Date validation must check for 32-bit width. Don't use assert to check.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1196
diff
changeset
|
50 |
if abs(when) > 0x7fffffff: |
1402
9d2c2e6b32b5
i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1400
diff
changeset
|
51 |
raise ValueError(_('date exceeds 32 bits: %d') % when) |
2137
5fefab118f7e
Fix timezone check.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2072
diff
changeset
|
52 |
if offset < -50400 or offset > 43200: |
1402
9d2c2e6b32b5
i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1400
diff
changeset
|
53 |
raise ValueError(_('impossible time zone offset: %d') % offset) |
1195
f92af8d53330
Validate user input of dates when adding a changelog entry.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1095
diff
changeset
|
54 |
else: |
1321
b47f96a178a3
Clean up date and timezone handling.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1202
diff
changeset
|
55 |
date = "%d %d" % util.makedate() |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
56 |
list.sort() |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
57 |
l = [hex(manifest), user, date] + list + ["", desc] |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
58 |
text = "\n".join(l) |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
59 |
return self.addrevision(text, transaction, self.count(), p1, p2) |