This is an automated email from the ASF dual-hosted git repository.

utkarsharma pushed a commit to branch sync_2-10-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit ae03ab4081c6b58df2e2ff3dc2a4d922cda3babe
Author: Jarek Potiuk <[email protected]>
AuthorDate: Tue Nov 5 15:45:50 2024 +0100

    Detect situation where Breeze is installed with both pipx and uv (#43694) 
(#43695)
    
    When breeze is installed with both - pipx and uv, we do not know
    which version is available first on the path and self-upgrading
    breeze might not upgrade the one that is first. Therefore we
    detect that situation and fail self upgrade with appropriate
    instructions what to do (recommending leaving uv as faster)
    
    (cherry picked from commit ccd65867387117cd4503715195a877a1ac2892a2)
---
 dev/breeze/src/airflow_breeze/utils/reinstall.py | 38 +++++++++++++++++++-----
 1 file changed, 31 insertions(+), 7 deletions(-)

diff --git a/dev/breeze/src/airflow_breeze/utils/reinstall.py 
b/dev/breeze/src/airflow_breeze/utils/reinstall.py
index 6165c8a3072..6fdf994c6e9 100644
--- a/dev/breeze/src/airflow_breeze/utils/reinstall.py
+++ b/dev/breeze/src/airflow_breeze/utils/reinstall.py
@@ -37,14 +37,38 @@ def reinstall_breeze(breeze_sources: Path, re_run: bool = 
True):
     # Breeze from different sources than originally installed (i.e. when we 
reinstall airflow
     # From the current directory.
     get_console().print(f"\n[info]Reinstalling Breeze from {breeze_sources}\n")
-    result = subprocess.run(["uv", "tool", "list"], text=True, 
capture_output=True, check=False)
-    if result.returncode == 0:
-        if "apache-airflow-breeze" in result.stdout:
-            subprocess.check_call(
-                ["uv", "tool", "install", "--force", "--reinstall", "-e", 
breeze_sources.as_posix()]
-            )
-    else:
+    breeze_installed_with_uv = False
+    breeze_installed_with_pipx = False
+    result_uv = subprocess.run(["uv", "tool", "list"], text=True, 
capture_output=True, check=False)
+    if result_uv.returncode == 0:
+        if "apache-airflow-breeze" in result_uv.stdout:
+            breeze_installed_with_uv = True
+    result_pipx = subprocess.run(["pipx", "list"], text=True, 
capture_output=True, check=False)
+    if result_pipx.returncode == 0:
+        if "apache-airflow-breeze" in result_pipx.stdout:
+            breeze_installed_with_pipx = True
+    if breeze_installed_with_uv and breeze_installed_with_pipx:
+        get_console().print(
+            "[error]Breeze is installed both with `uv` and `pipx`. This is not 
supported.[/]\n"
+        )
+        get_console().print(
+            "[info]Please uninstall Breeze and install it only with one of the 
methods[/]\n"
+            "[info]The `uv` installation method is recommended as it is much 
faster[/]\n"
+        )
+        get_console().print(
+            "To uninstall Breeze installed with pipx run:\n     pipx uninstall 
apache-airflow-breeze\n"
+        )
+        get_console().print(
+            "To uninstall Breeze installed with uv run:\n     uv tool 
uninstall apache-airflow-breeze\n"
+        )
+        sys.exit(1)
+    elif breeze_installed_with_uv:
+        subprocess.check_call(
+            ["uv", "tool", "install", "--force", "--reinstall", "-e", 
breeze_sources.as_posix()]
+        )
+    elif breeze_installed_with_pipx:
         subprocess.check_call(["pipx", "install", "-e", 
breeze_sources.as_posix(), "--force"])
+
     if re_run:
         # Make sure we don't loop forever if the metadata hash hasn't been 
updated yet (else it is tricky to
         # run pre-commit checks via breeze!)

Reply via email to