diff --git a/functions/poup.fish b/functions/poup.fish index 16cef21..00d8746 100644 --- a/functions/poup.fish +++ b/functions/poup.fish @@ -1,6 +1,21 @@ function poup - set toml_state (git status --porcelain pyproject.toml | head -c 2) + set -l toml_state (git status --porcelain pyproject.toml | head -c 2) + set -l project_type unknown + set -l lockfile unknown + if test -e poetry.lock + set project_type poetry + set lockfile poetry.lock + else if test -e uv.lock + set project_type uv + set lockfile uv.lock + else + echo "Unknown project type (neither poetry.lock nor uv.lock exists)" >/dev/stderr + + return 1 + end + + # Make sure pyproject.toml doesn’t have conflicts if test "$toml_state" = UU echo "pyproject.toml has conflicts, resolve those first" git mergetool pyproject.toml; or return @@ -8,9 +23,15 @@ function poup end if test "$toml_state" = "M " -o "$toml_state" = MM -o "$toml_state" = " M" - git checkout --ours poetry.lock - poetry lock --no-update - and git add poetry.lock + git checkout --ours $lockfile + + if test $project_type = poetry + poetry lock --no-update + else if test $project_type = uv + uv lock + end + + and git add $lockfile end set toml_state (git status --porcelain poetry.lock | head -c 2)