Repository: ClickHouse/ClickHouse
File: ci/praktika/utils.py (Python)

Code before:
            retries = 2
            if isinstance(retry_errors, str):
                retry_errors = [retry_errors]

        # Dry-run
        if dry_run:
            print(f"Dry-run. Would run command [{command}]")
            return 0  # Return success for dry-run

        if verbose:
            wrapped = textwrap.fill(f"Run command: [{command}]", width=80)
            print(wrapped)

        log_file = log_file or "/dev/null"
        proc = None
        err_output = []
        delay = 1

        for retry in range(retries):

            if retry > 0:
                delay = min(2 * delay, 60)
                print(f"Retrying in {delay}s...")
                time.sleep(delay)

            try:
                with open(log_file, "w") as log_fp:
                    proc = subprocess.Popen(
                        command,
                        shell=True,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        stdin=subprocess.PIPE if stdin_str else None,
                        universal_newlines=True,
                        start_new_session=True,  # Start a new process group for signal handling
                        bufsize=1,  # Line-buffered
                        errors="backslashreplace",
                        executable="/bin/bash",
                        **kwargs,
                    )

                    # Start the timeout thread if specified
                    if timeout:
                        t = Thread(target=cls._check_timeout, args=(timeout, proc))
                        t.daemon = True
                        t.start()

                    # Write stdin if provided
                    if stdin_str:
                        proc.stdin.write(stdin_str)
                        proc.stdin.close()

Review comment (suggestion):
`Shell.run()` prints retry backoff messages unconditionally (`print("Retrying in...")`), so callers passing `verbose=False` will still get output. This defeats the purpose of `verbose` and can pollute CI/test logs. Gate these retry/backoff prints behind `verbose` (or introduce a separate `print_retries` flag) so `verbose=False` is truly quiet.

Code after:
            retries = 2
            if isinstance(retry_errors, str):
                retry_errors = [retry_errors]

        # Dry-run
        if dry_run:
            print(f"Dry-run. Would run command [{command}]")
            return 0  # Return success for dry-run

        if verbose:
            wrapped = textwrap.fill(f"Run command: [{command}]", width=80)
            print(wrapped)

        log_file = log_file or "/dev/null"
        proc = None
        err_output = []
        delay = 1

        for retry in range(retries):

            if retry > 0:
                delay = min(2 * delay, 60)
                if verbose:
                    print(f"Retrying in {delay}s...")
                time.sleep(delay)

            try:
                with open(log_file, "w") as log_fp:
                    proc = subprocess.Popen(
                        command,
                        shell=True,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        stdin=subprocess.PIPE if stdin_str else None,
                        universal_newlines=True,
                        start_new_session=True,  # Start a new process group for signal handling
                        bufsize=1,  # Line-buffered
                        errors="backslashreplace",
                        executable="/bin/bash",
                        **kwargs,
                    )

                    # Start the timeout thread if specified
                    if timeout:
                        t = Thread(target=cls._check_timeout, args=(timeout, proc))
                        t.daemon = True
                        t.start()

                    # Write stdin if provided
                    if stdin_str:
                        proc.stdin.write(stdin_str)