Mercurial > public > mercurial-scm > hg
comparison contrib/perf.py @ 50671:b10c786b0145
perf: add a function to find a stream version generator
The logic is clearer and can be reused for other commands in the future.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 06 Jun 2023 01:43:48 +0200 |
parents | 714b63a707b7 |
children | 3ce370a00225 |
comparison
equal
deleted
inserted
replaced
50670:5d84b1385f7f | 50671:b10c786b0145 |
---|---|
1898 | 1898 |
1899 timer(d) | 1899 timer(d) |
1900 fm.end() | 1900 fm.end() |
1901 | 1901 |
1902 | 1902 |
1903 def _find_stream_generator(version): | |
1904 """find the proper generator function for this stream version""" | |
1905 import mercurial.streamclone | |
1906 | |
1907 available = {} | |
1908 | |
1909 # try to fetch a v1 generator | |
1910 generatev1 = getattr(mercurial.streamclone, "generatev1", None) | |
1911 if generatev1 is not None: | |
1912 | |
1913 def generate(repo): | |
1914 entries, bytes, data = generatev2(repo, None, None, True) | |
1915 return data | |
1916 | |
1917 available[b'v1'] = generatev1 | |
1918 # try to fetch a v2 generator | |
1919 generatev2 = getattr(mercurial.streamclone, "generatev2", None) | |
1920 if generatev2 is not None: | |
1921 | |
1922 def generate(repo): | |
1923 entries, bytes, data = generatev2(repo, None, None, True) | |
1924 return data | |
1925 | |
1926 available[b'v2'] = generate | |
1927 # resolve the request | |
1928 if version == b"latest": | |
1929 latest_key = max(available) | |
1930 return available[latest_key] | |
1931 elif version in available: | |
1932 return available[version] | |
1933 else: | |
1934 msg = b"unkown or unavailable version: %s" | |
1935 msg %= version | |
1936 hint = b"available versions: %s" | |
1937 hint %= b', '.join(sorted(available)) | |
1938 raise error.Abort(msg, hint=hint) | |
1939 | |
1940 | |
1903 @command( | 1941 @command( |
1904 b'perf::stream-locked-section', | 1942 b'perf::stream-locked-section', |
1905 [ | 1943 [ |
1906 ( | 1944 ( |
1907 b'', | 1945 b'', |
1912 ] | 1950 ] |
1913 + formatteropts, | 1951 + formatteropts, |
1914 ) | 1952 ) |
1915 def perf_stream_clone_scan(ui, repo, stream_version, **opts): | 1953 def perf_stream_clone_scan(ui, repo, stream_version, **opts): |
1916 """benchmark the initial, repo-locked, section of a stream-clone""" | 1954 """benchmark the initial, repo-locked, section of a stream-clone""" |
1917 import mercurial.streamclone | |
1918 | |
1919 generatev1 = mercurial.streamclone.generatev1 | |
1920 generatev2 = mercurial.streamclone.generatev2 | |
1921 | 1955 |
1922 opts = _byteskwargs(opts) | 1956 opts = _byteskwargs(opts) |
1923 timer, fm = gettimer(ui, opts) | 1957 timer, fm = gettimer(ui, opts) |
1924 | 1958 |
1925 # deletion of the generator may trigger some cleanup that we do not want to | 1959 # deletion of the generator may trigger some cleanup that we do not want to |
1927 result_holder = [None] | 1961 result_holder = [None] |
1928 | 1962 |
1929 def setupone(): | 1963 def setupone(): |
1930 result_holder[0] = None | 1964 result_holder[0] = None |
1931 | 1965 |
1932 def runone_v1(): | 1966 generate = _find_stream_generator(stream_version) |
1967 | |
1968 def runone(): | |
1933 # the lock is held for the duration the initialisation | 1969 # the lock is held for the duration the initialisation |
1934 result_holder[0] = generatev1(repo) | 1970 result_holder[0] = generate(repo) |
1935 | |
1936 def runone_v2(): | |
1937 # the lock is held for the duration the initialisation | |
1938 result_holder[0] = generatev2(repo, None, None, True) | |
1939 | |
1940 if stream_version == b'latest': | |
1941 runone = runone_v2 | |
1942 elif stream_version == b'v2': | |
1943 runone = runone_v2 | |
1944 elif stream_version == b'v1': | |
1945 runone = runone_v1 | |
1946 else: | |
1947 msg = b'unknown stream version: "%s"' % stream_version | |
1948 raise error.Abort(msg) | |
1949 | 1971 |
1950 timer(runone, setup=setupone, title=b"load") | 1972 timer(runone, setup=setupone, title=b"load") |
1951 fm.end() | 1973 fm.end() |
1952 | 1974 |
1953 | 1975 |