Environment variables are permitted for working_dir, but are not expanded. If working_dir is set to, e.g, %USERPROFILE%\workdir on Windows, menuinst would create a literal %USERPROFILE%\workdir path directory instead of %SYSTEMDRIVE%\Users\%USERNAME%\workdir. Expand these variables to create the correct directory name.
The bug reported by #211. %HOMEPATH% alone does not contain a drive, which can fail if %HOMEDRIVE% is not C:. This PR uses a default directory that contains the drive name.
The second item is up for debate. The menuinst documentation describes that working_dir defaults to the user's home directory. On Windows, there can be two different interpretations: %USERPROFILE% or %HOMEDRIVE%%HOMEPATH%.
I decided to go with a precedent: os.path.expanduser checks if %USERPROFILE% is set and goes with %HOMEDRIVE%%HOMEPATH% otherwise. pathlib.Path.home() uses the same implementation, so I think menuinst should use the same definition as the Python ecosystem.
Instead of using os.path.expanduser("~"), I am using the names of the variables though to make the shortcuts be resolved at runtime instead of hard-coding the directories.
Closes #211
Checklist - did you ...
[X] Add a file to the news directory (using the template) for the next release's release notes?
Description
This PR fixes two bugs:
working_dir
, but are not expanded. Ifworking_dir
is set to, e.g,%USERPROFILE%\workdir
on Windows,menuinst
would create a literal%USERPROFILE%\workdir
path directory instead of%SYSTEMDRIVE%\Users\%USERNAME%\workdir
. Expand these variables to create the correct directory name.%HOMEPATH%
alone does not contain a drive, which can fail if%HOMEDRIVE%
is notC:
. This PR uses a default directory that contains the drive name.The second item is up for debate. The
menuinst
documentation describes thatworking_dir
defaults to the user's home directory. On Windows, there can be two different interpretations:%USERPROFILE%
or%HOMEDRIVE%%HOMEPATH%
.I decided to go with a precedent: os.path.expanduser checks if
%USERPROFILE%
is set and goes with%HOMEDRIVE%%HOMEPATH%
otherwise.pathlib.Path.home()
uses the same implementation, so I thinkmenuinst
should use the same definition as the Python ecosystem.Instead of using
os.path.expanduser("~")
, I am using the names of the variables though to make the shortcuts be resolved at runtime instead of hard-coding the directories.Closes #211
Checklist - did you ...
news
directory (using the template) for the next release's release notes?