modularml / stack-pr

A tool for working with stacked PRs on github.
Other
301 stars 11 forks source link

Resilience if git command fails #15

Closed mwichmann closed 3 months ago

mwichmann commented 3 months ago

I'm working on an experimental setup (following on from the thread in #12), and have made some fumble-finger mistakes on the local repo (typo when changing the git remote from https to git@). So the first generated git command line fails with an exception (as it should), and then the rollback/cleanup fails too. Here's part of the trace:

    return subprocess.run(list(map(str, cmd)), **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['git', 'push', '-f', 'origin', 'mwichmann/stack/1:mwichmann/stack/1', 'mwichmann/stack/2:mwichmann/stack/2', 'mwichmann/stack/3:mwichmann/stack/3']' returned non-zero exit status 128.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mats/.pyenv/versions/venv-system312/bin/stack-pr", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/mats/.pyenv/versions/venv-system312/lib64/python3.12/site-packages/stack_pr/cli.py", line 1222, in main
    print_cmd_failure_details(exc)
  File "/home/mats/.pyenv/versions/venv-system312/lib64/python3.12/site-packages/stack_pr/cli.py", line 568, in print_cmd_failure_details
    cmd_stdout = exc.stdout.decode("utf-8").replace("\\n", "\n").replace("\\t", "\t")
                 ^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'decode'

Seems like a check for None there might be in order.

I've got the setup working now so probably won't see this again.

ZolotukhinM commented 3 months ago

Ack, thanks for the report! I'll add an error check there, but if you'd like to contribute, we accept PRs too :)