Mercurial > public > mercurial-scm > hg
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]) |