annotate mercurial/manifest.py @ 1677:11d12bd6e1dc

cleanup of revlog.group when repository is local revlog.group cached every chunk from the revlog, the behaviour was needed to minimize the roundtrip with old-http. The patch export the information that the repository is local or not from the repository object down to the revlog. Then it uses the workaround for old-http only if the repository is non-local. The memory used server side when pulling goes down to less than 30Mo maximum whereas without the patch more than 160Mo was used when cloning the linux kernel repository. The time used by cloning is roughly the same (although some caching could be implemented if needed): before 110.25user 20.90system 2:52.00elapsed 76%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+708707minor)pagefaults 0swaps after 112.85user 22.98system 2:50.66elapsed 79%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+862862minor)pagefaults 0swaps
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Thu, 08 Dec 2005 15:12:02 +0100
parents bf4e7ef08741
children b345cc4c22c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1089
142b5d5ec9cc Break apart hg.py
mpm@selenic.com
parents: 1072
diff changeset
1 # manifest.py - manifest revision 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
1541
bf4e7ef08741 fixed some stuff pychecker shows, marked unclear/wrong stuff with XXX
twaldmann@thinkmo.de
parents: 1534
diff changeset
8 import struct
262
3db700146536 implement demand loading hack
mpm@selenic.com
parents: 256
diff changeset
9 from revlog import *
1400
cf9a1233738a i18n first part: make '_' available for files who need it
Benoit Boissinot <benoit.boissinot@ens-lyon.org
parents: 1098
diff changeset
10 from i18n import gettext as _
262
3db700146536 implement demand loading hack
mpm@selenic.com
parents: 256
diff changeset
11 from demandload import *
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
12 demandload(globals(), "bisect array")
79
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 78
diff changeset
13
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
14 class manifest(revlog):
1677
11d12bd6e1dc cleanup of revlog.group when repository is local
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1541
diff changeset
15 def __init__(self, opener, local=True):
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
16 self.mapcache = None
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
17 self.listcache = None
1677
11d12bd6e1dc cleanup of revlog.group when repository is local
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1541
diff changeset
18 revlog.__init__(self, opener, "00manifest.i", "00manifest.d",
11d12bd6e1dc cleanup of revlog.group when repository is local
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1541
diff changeset
19 local=local)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
20
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
21 def read(self, node):
313
e75ea4662d81 Minor caching improvement for manifest
mpm@selenic.com
parents: 312
diff changeset
22 if node == nullid: return {} # don't upset local cache
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
23 if self.mapcache and self.mapcache[0] == node:
561
cdddf4652aec Fix dodiff/changes
mpm@selenic.com
parents: 557
diff changeset
24 return self.mapcache[1]
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
25 text = self.revision(node)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
26 map = {}
276
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
27 flag = {}
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
28 self.listcache = array.array('c', text)
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
29 lines = text.splitlines(1)
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
30 for l in lines:
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
31 (f, n) = l.split('\0')
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
32 map[f] = bin(n[:40])
276
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
33 flag[f] = (n[40:-1] == "x")
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
34 self.mapcache = (node, map, flag)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
35 return map
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
36
276
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
37 def readflags(self, node):
313
e75ea4662d81 Minor caching improvement for manifest
mpm@selenic.com
parents: 312
diff changeset
38 if node == nullid: return {} # don't upset local cache
358
9f4077d7ef6f [PATCH] manifest.readflags performance buglet
mpm@selenic.com
parents: 350
diff changeset
39 if not self.mapcache or self.mapcache[0] != node:
276
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
40 self.read(node)
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
41 return self.mapcache[2]
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
42
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
43 def diff(self, a, b):
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
44 return mdiff.textdiff(str(a), str(b))
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
45
741
156dc2f3be7f Fix some line wrapping
mpm@selenic.com
parents: 740
diff changeset
46 def add(self, map, flags, transaction, link, p1=None, p2=None,
156dc2f3be7f Fix some line wrapping
mpm@selenic.com
parents: 740
diff changeset
47 changed=None):
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
48
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
49 # returns a tuple (start, end). If the string is found
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
50 # m[start:end] are the line containing that string. If start == end
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
51 # the string was not found and they indicate the proper sorted
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
52 # insertion point. This was taken from bisect_left, and modified
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
53 # to find line start/end as it goes along.
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
54 #
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
55 # m should be a buffer or a string
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
56 # s is a string
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
57 #
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
58 def manifestsearch(m, s, lo=0, hi=None):
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
59 def advance(i, c):
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
60 while i < lenm and m[i] != c:
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
61 i += 1
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
62 return i
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
63 lenm = len(m)
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
64 if not hi:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
65 hi = lenm
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
66 while lo < hi:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
67 mid = (lo + hi) // 2
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
68 start = mid
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
69 while start > 0 and m[start-1] != '\n':
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
70 start -= 1
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
71 end = advance(start, '\0')
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
72 if m[start:end] < s:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
73 # we know that after the null there are 40 bytes of sha1
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
74 # this translates to the bisect lo = mid + 1
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
75 lo = advance(end + 40, '\n') + 1
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
76 else:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
77 # this translates to the bisect hi = mid
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
78 hi = start
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
79 end = advance(lo, '\0')
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
80 found = m[lo:end]
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
81 if cmp(s, found) == 0:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
82 # we know that after the null there are 40 bytes of sha1
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
83 end = advance(end + 40, '\n')
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
84 return (lo, end+1)
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
85 else:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
86 return (lo, lo)
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
87
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
88 # apply the changes collected during the bisect loop to our addlist
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
89 # return a delta suitable for addrevision
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
90 def addlistdelta(addlist, x):
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
91 # start from the bottom up
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
92 # so changes to the offsets don't mess things up.
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
93 i = len(x)
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
94 while i > 0:
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
95 i -= 1
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
96 start = x[i][0]
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
97 end = x[i][1]
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
98 if x[i][2]:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
99 addlist[start:end] = array.array('c', x[i][2])
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
100 else:
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
101 del addlist[start:end]
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
102 return "".join([struct.pack(">lll", d[0], d[1], len(d[2])) + d[2] \
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
103 for d in x ])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
104
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
105 # if we're using the listcache, make sure it is valid and
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
106 # parented by the same node we're diffing against
741
156dc2f3be7f Fix some line wrapping
mpm@selenic.com
parents: 740
diff changeset
107 if not changed or not self.listcache or not p1 or \
156dc2f3be7f Fix some line wrapping
mpm@selenic.com
parents: 740
diff changeset
108 self.mapcache[0] != p1:
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
109 files = map.keys()
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
110 files.sort()
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
111
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
112 text = ["%s\000%s%s\n" %
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
113 (f, hex(map[f]), flags[f] and "x" or '')
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
114 for f in files]
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
115 self.listcache = array.array('c', "".join(text))
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
116 cachedelta = None
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
117 else:
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
118 addlist = self.listcache
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
119
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
120 # combine the changed lists into one list for sorting
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
121 work = [[x, 0] for x in changed[0]]
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
122 work[len(work):] = [[x, 1] for x in changed[1]]
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
123 work.sort()
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
124
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
125 delta = []
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
126 dstart = None
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
127 dend = None
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
128 dline = [""]
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
129 start = 0
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
130 # zero copy representation of addlist as a buffer
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
131 addbuf = buffer(addlist)
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
132
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
133 # start with a readonly loop that finds the offset of
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
134 # each line and creates the deltas
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
135 for w in work:
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
136 f = w[0]
741
156dc2f3be7f Fix some line wrapping
mpm@selenic.com
parents: 740
diff changeset
137 # bs will either be the index of the item or the insert point
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
138 start, end = manifestsearch(addbuf, f, start)
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
139 if w[1] == 0:
741
156dc2f3be7f Fix some line wrapping
mpm@selenic.com
parents: 740
diff changeset
140 l = "%s\000%s%s\n" % (f, hex(map[f]),
156dc2f3be7f Fix some line wrapping
mpm@selenic.com
parents: 740
diff changeset
141 flags[f] and "x" or '')
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
142 else:
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
143 l = ""
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
144 if start == end and w[1] == 1:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
145 # item we want to delete was not found, error out
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
146 raise AssertionError(
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
147 _("failed to remove %s from manifest\n") % f)
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
148 if dstart != None and dstart <= start and dend >= start:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
149 if dend < end:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
150 dend = end
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
151 if l:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
152 dline.append(l)
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
153 else:
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
154 if dstart != None:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
155 delta.append([dstart, dend, "".join(dline)])
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
156 dstart = start
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
157 dend = end
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
158 dline = [l]
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
159
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
160 if dstart != None:
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
161 delta.append([dstart, dend, "".join(dline)])
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
162 # apply the delta to the addlist, and get a delta for addrevision
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
163 cachedelta = addlistdelta(addlist, delta)
644
6ebe118280bd Performance enhancements for manifest.add()
mason@suse.com
parents: 639
diff changeset
164
1534
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
165 # the delta is only valid if we've been processing the tip revision
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
166 if self.mapcache[0] != self.tip():
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
167 cachedelta = None
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
168 self.listcache = addlist
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
169
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
170 n = self.addrevision(buffer(self.listcache), transaction, link, p1, \
80a3d6a0af71 Optimize manifest.add
mason@suse.com
parents: 1451
diff changeset
171 p2, cachedelta)
302
498fb0fa2795 various fixups for git import
mpm@selenic.com
parents: 299
diff changeset
172 self.mapcache = (n, map, flags)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
173
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
174 return n