##// END OF EJS Templates
use untrusted settings in hgweb...
use untrusted settings in hgweb The only exceptions are web.static and web.templates, since they can be used to get any file that is readable by the user running the CGI script. Other options can be (ab)used to increase the use of the cpu (allow_bz2) or of the bandwidth (server.uncompressed), but they're trusted anyway.

File last commit:

r3219:9a478efc default
r3555:88106400 default
Show More
filelog.py
86 lines | 2.6 KiB | text/x-python | PythonLexer
mpm@selenic.com
Break apart hg.py...
r1089 # filelog.py - file history class for mercurial
#
Vadim Gelfer
update copyrights.
r2859 # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
mpm@selenic.com
Break apart hg.py...
r1089 #
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
from revlog import *
from demandload import *
Brendan Cully
filelog.annotate is now obsolete
r3219 demandload(globals(), "os")
mpm@selenic.com
Break apart hg.py...
r1089
class filelog(revlog):
mason@suse.com
Use revlogng and inlined data files by default...
r2222 def __init__(self, opener, path, defversion=REVLOG_DEFAULT_VERSION):
mpm@selenic.com
Break apart hg.py...
r1089 revlog.__init__(self, opener,
os.path.join("data", self.encodedir(path + ".i")),
mason@suse.com
Implement revlogng....
r2072 os.path.join("data", self.encodedir(path + ".d")),
defversion)
mpm@selenic.com
Break apart hg.py...
r1089
# This avoids a collision between a file named foo and a dir named
# foo.i or foo.d
def encodedir(self, path):
return (path
.replace(".hg/", ".hg.hg/")
.replace(".i/", ".i.hg/")
.replace(".d/", ".d.hg/"))
def decodedir(self, path):
return (path
.replace(".d.hg/", ".d/")
.replace(".i.hg/", ".i/")
.replace(".hg.hg/", ".hg/"))
def read(self, node):
t = self.revision(node)
if not t.startswith('\1\n'):
return t
Benoit Boissinot
use __contains__, index or split instead of str.find...
r2579 s = t.index('\1\n', 2)
mpm@selenic.com
Break apart hg.py...
r1089 return t[s+2:]
Matt Mackall
filelog: make metadata method private
r3123 def _readmeta(self, node):
mpm@selenic.com
Break apart hg.py...
r1089 t = self.revision(node)
if not t.startswith('\1\n'):
mpm@selenic.com
Add some rename debugging support
r1116 return {}
Benoit Boissinot
use __contains__, index or split instead of str.find...
r2579 s = t.index('\1\n', 2)
mpm@selenic.com
Break apart hg.py...
r1089 mt = t[2:s]
mpm@selenic.com
Add some rename debugging support
r1116 m = {}
mpm@selenic.com
Break apart hg.py...
r1089 for l in mt.splitlines():
k, v = l.split(": ", 1)
m[k] = v
return m
def add(self, text, meta, transaction, link, p1=None, p2=None):
if meta or text.startswith('\1\n'):
mt = ""
if meta:
mt = [ "%s: %s\n" % (k, v) for k,v in meta.items() ]
twaldmann@thinkmo.de
minor optimization: save some string trash
r1540 text = "\1\n%s\1\n%s" % ("".join(mt), text)
mpm@selenic.com
Break apart hg.py...
r1089 return self.addrevision(text, transaction, link, p1, p2)
mpm@selenic.com
Add some rename debugging support
r1116 def renamed(self, node):
Matt Mackall
Re-enable the renamed check fastpath
r1595 if self.parents(node)[0] != nullid:
mpm@selenic.com
Add some rename debugging support
r1116 return False
Matt Mackall
filelog: make metadata method private
r3123 m = self._readmeta(node)
mpm@selenic.com
Add some rename debugging support
r1116 if m and m.has_key("copy"):
return (m["copy"], bin(m["copyrev"]))
return False
Matt Mackall
merge: use file size stored in revlog index...
r2898 def size(self, rev):
"""return the size of a given revision"""
# for revisions with renames, we have to go the slow way
node = self.node(rev)
if self.renamed(node):
return len(self.read(node))
return revlog.size(self, rev)
Matt Mackall
filelog: add hash-based comparisons...
r2887 def cmp(self, node, text):
"""compare text with a given file revision"""
# for renames, we have to go the slow way
if self.renamed(node):
t2 = self.read(node)
Matt Mackall
filelog.cmp: return 0 for equality...
r2895 return t2 != text
Matt Mackall
filelog: add hash-based comparisons...
r2887
Matt Mackall
Move cmp bits from filelog to revlog
r2890 return revlog.cmp(self, node, text)