mirror of
https://github.com/git/git.git
synced 2026-01-31 13:03:13 +00:00
Merge branch 'unc-paths'
A bug fix for pushing to shared folders (fixing a regression introduced into v2.11.0). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
23
path.c
23
path.c
@@ -996,7 +996,7 @@ const char *remove_leading_path(const char *in, const char *prefix)
|
||||
*
|
||||
* Performs the following normalizations on src, storing the result in dst:
|
||||
* - Ensures that components are separated by '/' (Windows only)
|
||||
* - Squashes sequences of '/'.
|
||||
* - Squashes sequences of '/' except "//server/share" on Windows
|
||||
* - Removes "." components.
|
||||
* - Removes ".." components, and the components the precede them.
|
||||
* Returns failure (non-zero) if a ".." component appears as first path
|
||||
@@ -1019,17 +1019,22 @@ const char *remove_leading_path(const char *in, const char *prefix)
|
||||
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
|
||||
{
|
||||
char *dst0;
|
||||
int i = has_unc_prefix(src);
|
||||
const char *end;
|
||||
|
||||
for (i = i ? i : has_dos_drive_prefix(src); i > 0; i--)
|
||||
*dst++ = *src++;
|
||||
/*
|
||||
* Copy initial part of absolute path: "/", "C:/", "//server/share/".
|
||||
*/
|
||||
end = src + offset_1st_component(src);
|
||||
while (src < end) {
|
||||
char c = *src++;
|
||||
if (is_dir_sep(c))
|
||||
c = '/';
|
||||
*dst++ = c;
|
||||
}
|
||||
dst0 = dst;
|
||||
|
||||
if (is_dir_sep(*src)) {
|
||||
*dst++ = '/';
|
||||
while (is_dir_sep(*src))
|
||||
src++;
|
||||
}
|
||||
while (is_dir_sep(*src))
|
||||
src++;
|
||||
|
||||
for (;;) {
|
||||
char c = *src;
|
||||
|
||||
46
t/t5580-clone-push-unc.sh
Executable file
46
t/t5580-clone-push-unc.sh
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='various UNC path tests (Windows-only)'
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq MINGW; then
|
||||
skip_all='skipping UNC path tests, requires Windows'
|
||||
test_done
|
||||
fi
|
||||
|
||||
UNCPATH="$(pwd)"
|
||||
case "$UNCPATH" in
|
||||
[A-Z]:*)
|
||||
# Use administrative share e.g. \\localhost\C$\git-sdk-64\usr\src\git
|
||||
# (we use forward slashes here because MSYS2 and Git accept them, and
|
||||
# they are easier on the eyes)
|
||||
UNCPATH="//localhost/${UNCPATH%%:*}\$/${UNCPATH#?:}"
|
||||
test -d "$UNCPATH" || {
|
||||
skip_all='could not access administrative share; skipping'
|
||||
test_done
|
||||
}
|
||||
;;
|
||||
*)
|
||||
skip_all='skipping UNC path tests, cannot determine current path as UNC'
|
||||
test_done
|
||||
;;
|
||||
esac
|
||||
|
||||
test_expect_success setup '
|
||||
test_commit initial
|
||||
'
|
||||
|
||||
test_expect_success clone '
|
||||
git clone "file://$UNCPATH" clone
|
||||
'
|
||||
|
||||
test_expect_success push '
|
||||
(
|
||||
cd clone &&
|
||||
git checkout -b to-push &&
|
||||
test_commit to-push &&
|
||||
git push origin HEAD
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
Reference in New Issue
Block a user