mercurial/changelog.py
changeset 1321 b47f96a178a3
parent 1202 71111d796e40
child 1327 085e3fc189b6
equal deleted inserted replaced
1320:5f277e73778f 1321:b47f96a178a3
     3 # Copyright 2005 Matt Mackall <mpm@selenic.com>
     3 # Copyright 2005 Matt Mackall <mpm@selenic.com>
     4 #
     4 #
     5 # This software may be used and distributed according to the terms
     5 # This software may be used and distributed according to the terms
     6 # of the GNU General Public License, incorporated herein by reference.
     6 # of the GNU General Public License, incorporated herein by reference.
     7 
     7 
     8 import os, time
       
     9 from revlog import *
     8 from revlog import *
       
     9 from demandload import demandload
       
    10 demandload(globals(), "os time util")
    10 
    11 
    11 class changelog(revlog):
    12 class changelog(revlog):
    12     def __init__(self, opener):
    13     def __init__(self, opener):
    13         revlog.__init__(self, opener, "00changelog.i", "00changelog.d")
    14         revlog.__init__(self, opener, "00changelog.i", "00changelog.d")
    14 
    15 
    18         last = text.index("\n\n")
    19         last = text.index("\n\n")
    19         desc = text[last + 2:]
    20         desc = text[last + 2:]
    20         l = text[:last].splitlines()
    21         l = text[:last].splitlines()
    21         manifest = bin(l[0])
    22         manifest = bin(l[0])
    22         user = l[1]
    23         user = l[1]
    23         date = l[2]
    24         date = l[2].split(' ')
    24         if " " not in date:
    25         time = int(date.pop(0))
    25             date += " 0" # some tools used -d without a timezone
    26         try:
       
    27             # various tools did silly things with the time zone field.
       
    28             timezone = int(date[0])
       
    29         except:
       
    30             timezone = 0
    26         files = l[3:]
    31         files = l[3:]
    27         return (manifest, user, date, files, desc)
    32         return (manifest, user, (time, timezone), files, desc)
    28 
    33 
    29     def read(self, node):
    34     def read(self, node):
    30         return self.extract(self.revision(node))
    35         return self.extract(self.revision(node))
    31 
    36 
    32     def add(self, manifest, list, desc, transaction, p1=None, p2=None,
    37     def add(self, manifest, list, desc, transaction, p1=None, p2=None,
    42             if abs(when) > 0x7fffffff:
    47             if abs(when) > 0x7fffffff:
    43                 raise ValueError('date exceeds 32 bits: %d' % when)
    48                 raise ValueError('date exceeds 32 bits: %d' % when)
    44             if abs(offset) >= 43200:
    49             if abs(offset) >= 43200:
    45                 raise ValueError('impossible time zone offset: %d' % offset)
    50                 raise ValueError('impossible time zone offset: %d' % offset)
    46         else:
    51         else:
    47             if time.daylight: offset = time.altzone
    52             date = "%d %d" % util.makedate()
    48             else: offset = time.timezone
       
    49             date = "%d %d" % (time.time(), offset)
       
    50         list.sort()
    53         list.sort()
    51         l = [hex(manifest), user, date] + list + ["", desc]
    54         l = [hex(manifest), user, date] + list + ["", desc]
    52         text = "\n".join(l)
    55         text = "\n".join(l)
    53         return self.addrevision(text, transaction, self.count(), p1, p2)
    56         return self.addrevision(text, transaction, self.count(), p1, p2)