comparison mercurial/hg.py @ 360:10519e4cbd02

filelog: add metadata support -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 filelog: add metadata support To add metadata, we add an escape sequence "\1\n" to indicate that some key:value metadata pairs follow. manifest hash: 9a019d50f8d389b2c16cb46f4eab62c136b70fd7 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCsJfFywK+sNU5EO8RAl1AAJ9BJPgDWnot5MUdPnzPiNxlyhG0rACfVo10 6q9fGaPUpf8mxefz7G8D0Z0= =1BL6 -----END PGP SIGNATURE-----
author mpm@selenic.com
date Wed, 15 Jun 2005 13:04:05 -0800
parents 9f4077d7ef6f
children ae96b7e1318d
comparison
equal deleted inserted replaced
359:0c4688e9ee5c 360:10519e4cbd02
32 revlog.__init__(self, opener, 32 revlog.__init__(self, opener,
33 os.path.join("data", path + ".i"), 33 os.path.join("data", path + ".i"),
34 os.path.join("data", path + ".d")) 34 os.path.join("data", path + ".d"))
35 35
36 def read(self, node): 36 def read(self, node):
37 return self.revision(node) 37 t = self.revision(node)
38 def add(self, text, transaction, link, p1=None, p2=None): 38 if t[:2] != '\1\n':
39 return t
40 s = t.find('\1\n', 2)
41 return t[s+2:]
42
43 def readmeta(self, node):
44 t = self.revision(node)
45 if t[:2] != '\1\n':
46 return t
47 s = t.find('\1\n', 2)
48 mt = t[2:s]
49 for l in mt.splitlines():
50 k, v = l.split(": ", 1)
51 m[k] = v
52 return m
53
54 def add(self, text, meta, transaction, link, p1=None, p2=None):
55 if meta or text[:2] == '\1\n':
56 mt = ""
57 if meta:
58 mt = [ "%s: %s\n" % (k, v) for k,v in meta.items() ]
59 text = "\1\n" + "".join(mt) + "\1\n" + text
39 return self.addrevision(text, transaction, link, p1, p2) 60 return self.addrevision(text, transaction, link, p1, p2)
40 61
41 def annotate(self, node): 62 def annotate(self, node):
42 63
43 def decorate(text, rev): 64 def decorate(text, rev):
473 try: 494 try:
474 t = self.wfile(f).read() 495 t = self.wfile(f).read()
475 tm = is_exec(self.wjoin(f)) 496 tm = is_exec(self.wjoin(f))
476 r = self.file(f) 497 r = self.file(f)
477 mfm[f] = tm 498 mfm[f] = tm
478 mm[f] = r.add(t, tr, linkrev, 499 mm[f] = r.add(t, {}, tr, linkrev,
479 m1.get(f, nullid), m2.get(f, nullid)) 500 m1.get(f, nullid), m2.get(f, nullid))
480 self.dirstate.update([f], "n") 501 self.dirstate.update([f], "n")
481 except IOError: 502 except IOError:
482 try: 503 try:
483 del mm[f] 504 del mm[f]
536 raise 557 raise
537 558
538 r = self.file(f) 559 r = self.file(f)
539 fp1 = m1.get(f, nullid) 560 fp1 = m1.get(f, nullid)
540 fp2 = m2.get(f, nullid) 561 fp2 = m2.get(f, nullid)
541 new[f] = r.add(t, tr, linkrev, fp1, fp2) 562 new[f] = r.add(t, {}, tr, linkrev, fp1, fp2)
542 563
543 # update manifest 564 # update manifest
544 m1.update(new) 565 m1.update(new)
545 for f in remove: del m1[f] 566 for f in remove: del m1[f]
546 mn = self.manifest.add(m1, mf1, tr, linkrev, c1[0], c2[0]) 567 mn = self.manifest.add(m1, mf1, tr, linkrev, c1[0], c2[0])