We convert a few messages output by the various commands to use
the capitalized "Git" project name instead of the lowercase variant,
which will make them consistent with how the Git project name appears
in other messages elsewhere.
Note that some of these messages are not yet passed as translation
strings, but we will address that issue in a subsequent commit.
Git specifies that relative hook paths are specified relative to the
working tree in a non-bare repository. However, we were interpreting it
relative to the working directory, which meant that we could install
hooks in an undesired place if the user was in a subdirectory of the
repository. Fix this by installing relative to the root of the working
tree as Git does.
In order to expand strings of the form "~/path/to/hooks" into something
like "/home/ttaylorr/path/to/hooks", let's introduce the
tools.ExpandPath() function to do just that.
tools.ExpandPath() inspects the first character of the given string to
see if it begins with a "~" (indicating the presence of a home
directory.
If there is, see also if it refers to a specific "~user", and expand
appropriately.
To ensure that we can run the tests in tools/filetool_test.go in a
platform-independent manner, let's ensure that the results are
_semantically_ equal by first passing them through filepath.ToSlash().
We'll use this in the following commit in order to perform path
expansion on the value of core.hooksPath.