Mercurial > hg
view contrib/packaging/packaging.py @ 44370:edaae3616ba3
bookmarks: avoid traceback when two pushes race to delete the same bookmark
`hg push -f -B remote-only-bookmark` can raise server-side in
`bookmarks._del` (specifically in `self._refmap.pop(mark)`), if the
remote-only bookmark got deleted concurrently.
Fix this by simply not deleting the non-existent bookmark in that
case.
For avoidance of doubt, refusing to delete a bookmark that doesn't
exist when the push starts is taking care of elsewhere; no change of
behavior there.
Differential Revision: https://phab.mercurial-scm.org/D8124
author | Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> |
---|---|
date | Sat, 15 Feb 2020 14:51:33 -0500 |
parents | 303bf312d5ed |
children |
line wrap: on
line source
#!/usr/bin/env python3 # # packaging.py - Mercurial packaging functionality # # Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. import os import pathlib import subprocess import sys import venv HERE = pathlib.Path(os.path.abspath(__file__)).parent REQUIREMENTS_TXT = HERE / "requirements.txt" SOURCE_DIR = HERE.parent.parent VENV = SOURCE_DIR / "build" / "venv-packaging" def bootstrap(): venv_created = not VENV.exists() VENV.parent.mkdir(exist_ok=True) venv.create(VENV, with_pip=True) if os.name == "nt": venv_bin = VENV / "Scripts" pip = venv_bin / "pip.exe" python = venv_bin / "python.exe" else: venv_bin = VENV / "bin" pip = venv_bin / "pip" python = venv_bin / "python" args = [ str(pip), "install", "-r", str(REQUIREMENTS_TXT), "--disable-pip-version-check", ] if not venv_created: args.append("-q") subprocess.run(args, check=True) os.environ["HGPACKAGING_BOOTSTRAPPED"] = "1" os.environ["PATH"] = "%s%s%s" % (venv_bin, os.pathsep, os.environ["PATH"]) subprocess.run([str(python), __file__] + sys.argv[1:], check=True) def run(): import hgpackaging.cli as cli # Need to strip off main Python executable. cli.main() if __name__ == "__main__": try: if "HGPACKAGING_BOOTSTRAPPED" not in os.environ: bootstrap() else: run() except subprocess.CalledProcessError as e: sys.exit(e.returncode) except KeyboardInterrupt: sys.exit(1)