Mercurial > public > mercurial-scm > hg
comparison mercurial/debugcommands.py @ 39081:195ed920653e
debugrevlog: track empty revlog entries
A revlog entry can be "empty" for two reasons:
* the stored text is empty
* we found another entry with the exact same content
Tracking them separately make revlog content clearer.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 27 Jul 2018 19:19:52 +0200 |
parents | 5c99486fcfe1 |
children | a456c603a83d |
comparison
equal
deleted
inserted
replaced
39080:5c99486fcfe1 | 39081:195ed920653e |
---|---|
2087 | 2087 |
2088 ### tracks merge vs single parent | 2088 ### tracks merge vs single parent |
2089 nummerges = 0 | 2089 nummerges = 0 |
2090 | 2090 |
2091 ### tracks ways the "delta" are build | 2091 ### tracks ways the "delta" are build |
2092 # nodelta | |
2093 numempty = 0 | |
2092 # full file content | 2094 # full file content |
2093 numfull = 0 | 2095 numfull = 0 |
2094 # delta against previous revision | 2096 # delta against previous revision |
2095 numprev = 0 | 2097 numprev = 0 |
2096 # delta against first or second parent (not prev) | 2098 # delta against first or second parent (not prev) |
2133 size = r.length(rev) | 2135 size = r.length(rev) |
2134 if delta == nullrev: | 2136 if delta == nullrev: |
2135 chainlengths.append(0) | 2137 chainlengths.append(0) |
2136 chainbases.append(r.start(rev)) | 2138 chainbases.append(r.start(rev)) |
2137 chainspans.append(size) | 2139 chainspans.append(size) |
2138 numfull += 1 | 2140 if size == 0: |
2139 addsize(size, fullsize) | 2141 numempty += 1 |
2142 else: | |
2143 numfull += 1 | |
2144 addsize(size, fullsize) | |
2140 else: | 2145 else: |
2141 chainlengths.append(chainlengths[delta] + 1) | 2146 chainlengths.append(chainlengths[delta] + 1) |
2142 baseaddr = chainbases[delta] | 2147 baseaddr = chainbases[delta] |
2143 revaddr = r.start(rev) | 2148 revaddr = r.start(rev) |
2144 chainbases.append(baseaddr) | 2149 chainbases.append(baseaddr) |
2145 chainspans.append((revaddr - baseaddr) + size) | 2150 chainspans.append((revaddr - baseaddr) + size) |
2146 addsize(size, deltasize) | 2151 if size == 0: |
2147 if delta == rev - 1: | 2152 numempty += 1 |
2148 numprev += 1 | 2153 else: |
2149 if delta == p1: | 2154 addsize(size, deltasize) |
2150 nump1prev += 1 | 2155 if delta == rev - 1: |
2156 numprev += 1 | |
2157 if delta == p1: | |
2158 nump1prev += 1 | |
2159 elif delta == p2: | |
2160 nump2prev += 1 | |
2161 elif delta == p1: | |
2162 nump1 += 1 | |
2151 elif delta == p2: | 2163 elif delta == p2: |
2152 nump2prev += 1 | 2164 nump2 += 1 |
2153 elif delta == p1: | 2165 elif delta != nullrev: |
2154 nump1 += 1 | 2166 numother += 1 |
2155 elif delta == p2: | |
2156 nump2 += 1 | |
2157 elif delta != nullrev: | |
2158 numother += 1 | |
2159 | 2167 |
2160 # Obtain data on the raw chunks in the revlog. | 2168 # Obtain data on the raw chunks in the revlog. |
2161 segment = r._getsegmentforrevs(rev, rev)[1] | 2169 segment = r._getsegmentforrevs(rev, rev)[1] |
2162 if segment: | 2170 if segment: |
2163 chunktype = bytes(segment[0:1]) | 2171 chunktype = bytes(segment[0:1]) |
2174 # Adjust size min value for empty cases | 2182 # Adjust size min value for empty cases |
2175 for size in (datasize, fullsize, deltasize): | 2183 for size in (datasize, fullsize, deltasize): |
2176 if size[0] is None: | 2184 if size[0] is None: |
2177 size[0] = 0 | 2185 size[0] = 0 |
2178 | 2186 |
2179 numdeltas = numrevs - numfull | 2187 numdeltas = numrevs - numfull - numempty |
2180 numoprev = numprev - nump1prev - nump2prev | 2188 numoprev = numprev - nump1prev - nump2prev |
2181 totalrawsize = datasize[2] | 2189 totalrawsize = datasize[2] |
2182 datasize[2] /= numrevs | 2190 datasize[2] /= numrevs |
2183 fulltotal = fullsize[2] | 2191 fulltotal = fullsize[2] |
2184 fullsize[2] /= numfull | 2192 fullsize[2] /= numfull |
2185 deltatotal = deltasize[2] | 2193 deltatotal = deltasize[2] |
2186 if numrevs - numfull > 0: | 2194 if numdeltas > 0: |
2187 deltasize[2] /= numrevs - numfull | 2195 deltasize[2] /= numdeltas |
2188 totalsize = fulltotal + deltatotal | 2196 totalsize = fulltotal + deltatotal |
2189 avgchainlen = sum(chainlengths) / numrevs | 2197 avgchainlen = sum(chainlengths) / numrevs |
2190 maxchainlen = max(chainlengths) | 2198 maxchainlen = max(chainlengths) |
2191 maxchainspan = max(chainspans) | 2199 maxchainspan = max(chainspans) |
2192 compratio = 1 | 2200 compratio = 1 |
2215 fmt2 = dfmtstr(totalsize) | 2223 fmt2 = dfmtstr(totalsize) |
2216 ui.write(('revisions : ') + fmt2 % numrevs) | 2224 ui.write(('revisions : ') + fmt2 % numrevs) |
2217 ui.write((' merges : ') + fmt % pcfmt(nummerges, numrevs)) | 2225 ui.write((' merges : ') + fmt % pcfmt(nummerges, numrevs)) |
2218 ui.write((' normal : ') + fmt % pcfmt(numrevs - nummerges, numrevs)) | 2226 ui.write((' normal : ') + fmt % pcfmt(numrevs - nummerges, numrevs)) |
2219 ui.write(('revisions : ') + fmt2 % numrevs) | 2227 ui.write(('revisions : ') + fmt2 % numrevs) |
2228 ui.write((' empty : ') + fmt % pcfmt(numempty, numrevs)) | |
2220 ui.write((' full : ') + fmt % pcfmt(numfull, numrevs)) | 2229 ui.write((' full : ') + fmt % pcfmt(numfull, numrevs)) |
2221 ui.write((' deltas : ') + fmt % pcfmt(numdeltas, numrevs)) | 2230 ui.write((' deltas : ') + fmt % pcfmt(numdeltas, numrevs)) |
2222 ui.write(('revision size : ') + fmt2 % totalsize) | 2231 ui.write(('revision size : ') + fmt2 % totalsize) |
2223 ui.write((' full : ') + fmt % pcfmt(fulltotal, totalsize)) | 2232 ui.write((' full : ') + fmt % pcfmt(fulltotal, totalsize)) |
2224 ui.write((' deltas : ') + fmt % pcfmt(deltatotal, totalsize)) | 2233 ui.write((' deltas : ') + fmt % pcfmt(deltatotal, totalsize)) |