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))