Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding setup for git executable #640

Merged

Conversation

kenodegard
Copy link
Contributor

Added a convenience function called refresh. This functions accomplishes 2 things.

The first is that now the user can dynamically set the git path AFTER importing GitPython. In the following example git is neither on the user's $PATH nor is $GIT_PYTHON_GIT_EXECUTABLE defined:

>>> import git
WARNING: Bad git executable. The git executable must be specified in one of the following ways:
    (1) be included in your $PATH, or
    (2) be set via $GIT_PYTHON_GIT_EXECUTABLE, or
    (3) explicitly set via git.setup (or git.refresh).

All git commands will error until this is rectified.

>>> git.refresh("/usr/bin/git")
>>> git.Git().version()
'git version 2.11.0 (Apple Git-81)'
>>> 

The second is that this also means that the git executable can be dynamically refreshed at any time by simply calling refresh:

>>> import git
>>> git.Git.GIT_PYTHON_GIT_EXECUTABLE
'git'
>>> git.refresh("/usr/bin/git")
>>> git.Git.GIT_PYTHON_GIT_EXECUTABLE
'/usr/bin/git'

Added one function (setup) and an alias (refresh simply calls setup).
These functions give the developer one more way to configure the git
executable path. This also allows the user to interactively adjust the
git executable configured during runtime as these functions dynamically
update the executable path for the entire git module.
Discovered that the remote module also relies on the git executable as
such it also needs to be “refreshed” anytime the git executable is
updated or changed. This was best solved by moving the setup function
into the top level __init__ where the setup simply calls
git.cmd.Git.refresh and git.remote.FetchInfo.refresh.
Renamed to simplify and avoid issue with nose tests trying to use
`setup` as a setup for testing. Unittest implements basic test for
refreshing with a bad git path versus a good git path.
Added my name to list.
Added the ability to silence the first refresh warning upon import by
setting an environment variable.
@codecov-io
Copy link

codecov-io commented Jul 9, 2017

Codecov Report

❗ No coverage uploaded for pull request base (master@2af601d). Click here to learn what that means.
The diff coverage is 68.88%.

Impacted file tree graph

@@            Coverage Diff            @@
##             master     #640   +/-   ##
=========================================
  Coverage          ?   92.65%           
=========================================
  Files             ?       61           
  Lines             ?    10029           
  Branches          ?        0           
=========================================
  Hits              ?     9292           
  Misses            ?      737           
  Partials          ?        0
Impacted Files Coverage Δ
git/test/test_git.py 98.73% <100%> (ø)
git/cmd.py 83.29% <65.85%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 2af601d...a56136f. Read the comment docs.

Renamed GIT_PYTHON_NOWARN to GIT_PYTHON_INITERR and added values for
quiet import, warning import, and raise import. These respectively mean
that no message or error is printed if git is non-existent, a plain
warning is printed but the import succeeds, and an ImportError
exception is raised.
Removed few remaining references to git.setup function (as it was
renamed to refresh).
Renamed and cleaned up variable names.
Added additional information in the import warning/error that tells the
user how to silence the warning/error. Also added a GIT_OK variable
that allows for a quick check whether the refresh has succeeded instead
of needing to test an actual git command.
@kenodegard
Copy link
Contributor Author

@Byron what else would you need from me for this to be considered?

Added tilde expansion as part of the refresh function. Added python
version check such that we properly capture PermissionError in Python
>=3 and OSError in Python <3.
@Byron Byron merged commit 2eb6cf0 into gitpython-developers:master Sep 28, 2017
@Byron
Copy link
Member

Byron commented Sep 28, 2017

Thanks a ton for your contribution, and my apologies for getting to this PR that late!

riley-martine pushed a commit to riley-martine/GitPython that referenced this pull request Dec 7, 2023
…etup_for_git_executable

Adding setup for git executable
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants