Fix up checks in Makefile and make them portable by EliahKagan · Pull Request #1661 · gitpython-developers/GitPython

added 8 commits

September 13, 2023 05:13
This fixes "fatal: ambiguous argument 'head'", which occurs on some
systems, inclding GNU/Linux systems, with "git rev-parse head".
This sorts numerically for each of major, minor, and patch,
rather than, e.g., rating 2.1.15 as a higher version than 2.1.2.

It also rates things like X-beta and X-rc as lower versions than X,
but X-patched (not SemVer, but present in this project) as higher
versions than X.
The avoids showing the message when the build command was already
run in a virtual environment.

It also keeps the command failing, so the subsequent twine command
is not attempted. (Just adding "|| echo ..." caused the command to
succeed, because "echo ..." itself succeeds except in the rare case
it cannot write to standard output.)
This changes the build command to run with "python" when in a
virtual environment, since all virtual environments support this
even when "python" outside it is absent or refers to the wrong
version.

On Windows, virtual environments don't contain a python3 command,
but a global python3 command may be present, so the errors are
confusing. This fixes that by avoiding such errors altogether.
This fixes how init-tests-after-clone.sh appears in .gitattributes
so it gets LF (Unix-style) line endings on all systems as intended,
and adds Makefile to be treated the same way.
As documented in the release instructions in README.md.
cc202cc put an end to the problem where, when run outside a virtual
environment, it would always "succeed", because all "|| echo ..."
required to succeed was for the echo command reporting the error to
succeed. Unfortunately, that commit created the oppposite problem,
causing that case to always fail! This commit fixes it, so it fails
when there is an error, and succeeds when there is no error.
This extracts the check logic from the release target in Makefile
to a new script, check-version.sh. The code is also modified,
mainly to account for different ways output is displayed and errors
are reported and treated in a Makefile versus a standalone shell
script. (The .sh suffix is for consistency with the naming of
init-tests-after-clone.sh and is *not* intended to suggest sourcing
the script; this script should be executed, not sourced.)
This moves the conditional build dependency installation logic and
build logic from the force_release Makefile target to a shell
script build-release.sh, which force_release calls. The code is
changed to clean it up, and also to account for differences between
how output is displayed and errors reported in Makefiles and shell
scripts. (As in check-version.sh, the .sh suffix does not signify
anything about how the script is to be used: like the other shell
scripts in the project, this should be executed, no sourced.)
This changes the hashbangs in Makefile helper scripts to be static.

Often, "#!/usr/bin/env bash" is a better hashbang for bash scripts
than "#!/bin/bash", because it automatically works on Unix-like
systems that are not GNU/Linux and do not have bash in /bin, but
on which it has been installed in another $PATH directory, such as
/usr/local/bin. (It can also be helpful on macOS, where /bin/bash
is usually an old version of bash, while a package manager such as
brew may have been used to install a newer version elsewhere.)

Windows systems with WSL installed often have a deprecated bash.exe
in the System32 directory that runs commands and scripts inside an
installed WSL system. (wsl.exe should be used instead.) Anytime
that bash is used due to a "#!/usr/bin/env bash" hashbang, it is
wrong, because that only happens if the caller is some Unix-style
script running natively or otherwise outside WSL.

Normally this is not a reason to prefer a "#!/bin/bash" hashbang,
because normally any environment in which one can run a script in a
way that determines its interpreter from its hashbang is an
environment in which a native (or otherwise appropriate) bash
precedes the System32 bash in a PATH search. However, MinGW make,
a popular make implementation used on Windows, is an exception.

The goal of this change is not to sacrifice support for some
Unix-like systems to better support Windows, which wouldn't
necessarily be justified. Rather, this is to avoid extremely
confusing wrong behavior that in some cases would have bizarre
effects that are very hard to detect. I discovered this problem
because the VIRTUAL_ENV variable was not inheried by the bash
interpreter (because it was, fortunately, not passed through to
WSL). But if "python3 -m build" finds a global "build" package,
things might get much further before any problem is noticed.
This also makes a correct but confusing comment clearer.
Like ".venv" and "venv", ".env" and "env" are common, plus "env"
appears in the example command shown for making a virtual
environment for the purpose of building a release, under some
circumstances when "make release" or "make force_release" fail.
That way shell scripts will be handled correctly by default, anywhere.

@Byron

@Byron

@Byron

- use `echo` where feasible to avoid explicit newlines
- use `function` syntax out of habit
- deduplicate release invocation
- make `venv` based invocation less verbose
- make help-text in non-venv more prominent

renovate bot referenced this pull request in allenporter/flux-local

Sep 23, 2023

@renovate

otc-zuul bot pushed a commit to opentelekomcloud-infra/eyes_on_docs that referenced this pull request

Oct 25, 2023
Bump gitpython from 3.1.35 to 3.1.37

Bumps gitpython from 3.1.35 to 3.1.37.

Release notes
Sourced from gitpython's releases.

3.1.37 - a proper fix CVE-2023-41040
What's Changed

Improve Python version and OS compatibility, fixing deprecations by @​EliahKagan in gitpython-developers/GitPython#1654
Better document env_case test/fixture and cwd by @​EliahKagan in gitpython-developers/GitPython#1657
Remove spurious executable permissions by @​EliahKagan in gitpython-developers/GitPython#1658
Fix up checks in Makefile and make them portable by @​EliahKagan in gitpython-developers/GitPython#1661
Fix URLs that were redirecting to another license by @​EliahKagan in gitpython-developers/GitPython#1662
Assorted small fixes/improvements to root dir docs by @​EliahKagan in gitpython-developers/GitPython#1663
Use venv instead of virtualenv in test_installation by @​EliahKagan in gitpython-developers/GitPython#1664
Omit py_modules in setup by @​EliahKagan in gitpython-developers/GitPython#1665
Don't track code coverage temporary files by @​EliahKagan in gitpython-developers/GitPython#1666
Configure tox by @​EliahKagan in gitpython-developers/GitPython#1667
Format tests with black and auto-exclude untracked paths by @​EliahKagan in gitpython-developers/GitPython#1668
Upgrade and broaden flake8, fixing style problems and bugs by @​EliahKagan in gitpython-developers/GitPython#1673
Fix rollback bug in SymbolicReference.set_reference by @​EliahKagan in gitpython-developers/GitPython#1675
Remove @NoEffect annotations by @​EliahKagan in gitpython-developers/GitPython#1677
Add more checks for the validity of refnames by @​facutuesca in gitpython-developers/GitPython#1672

Full Changelog: gitpython-developers/GitPython@3.1.36...3.1.37



Commits

b27a89f fix makefile to compare commit hashes only
0bd2890 prepare next release
832b6ee remove unnecessary list comprehension to fix CI
e98f57b Merge pull request #1672 from trail-of-forks/robust-refname-checks
1774f1e Merge pull request #1677 from EliahKagan/no-noeffect
a4701a0 Remove @NoEffect annotations
d40320b Merge pull request #1675 from EliahKagan/rollback
d1c1f31 Merge pull request #1673 from EliahKagan/flake8
e480985 Tweak rollback logic in log.to_file
ff84b26 Refactor try-finally cleanup in git/
Additional commits viewable in compare view




Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

@dependabot rebase will rebase this PR
@dependabot recreate will recreate this PR, overwriting any edits that have been made to it
@dependabot merge will merge this PR after your CI passes on it
@dependabot squash and merge will squash and merge this PR after your CI passes on it
@dependabot cancel merge will cancel a previously requested merge and block automerging
@dependabot reopen will reopen this PR if it is closed
@dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
@dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
@dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the Security Alerts page.

Reviewed-by: Vladimir Vshivkov