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 |