fix(protractor): update rules_webtesting patch to include additional windows fixes (#1140)
Cannot update to latest rules_webtesting commit as we need to depend on the release package which does not have a rules_go dependency. This patch can be removed once we update to the next rules_webtesting release.
diff --git a/rules_webtesting.patch b/rules_webtesting.patch
index 1eef31a..d19cdc6 100644
--- a/rules_webtesting.patch
+++ b/rules_webtesting.patch
@@ -11,3 +11,161 @@
},
}),
visibility = ["//browsers:__subpackages__"],
+--
+2.20.1
+
+From a7c1f6b825640a95e687adc884a442fde23ccd95 Mon Sep 17 00:00:00 2001
+From: Yun Peng <pcloudy@google.com>
+Date: Tue, 3 Sep 2019 19:24:02 +0200
+Subject: [PATCH] Update rlocation funciton in windows_utils.bzl (#387)
+
+---
+ web/internal/windows_utils.bzl | 76 ++++++++++++++++++++++++++--------
+ 1 file changed, 59 insertions(+), 17 deletions(-)
+
+diff --git a/web/internal/windows_utils.bzl b/web/internal/windows_utils.bzl
+index 429a01a..576053a 100644
+--- a/web/internal/windows_utils.bzl
++++ b/web/internal/windows_utils.bzl
+@@ -17,6 +17,49 @@
+ These functions help making rules work on Windows.
+ """
+
++BATCH_RLOCATION_FUNCTION = r"""
++rem Usage of rlocation function:
++rem call :rlocation <runfile_path> <abs_path>
++rem The rlocation function maps the given <runfile_path> to its absolute
++rem path and stores the result in a variable named <abs_path>.
++rem This function fails if the <runfile_path> doesn't exist in mainifest
++rem file.
++:: Start of rlocation
++goto :rlocation_end
++:rlocation
++if "%~2" equ "" (
++ echo>&2 ERROR: Expected two arguments for rlocation function.
++ exit 1
++)
++if "%RUNFILES_MANIFEST_ONLY%" neq "1" (
++ set %~2=%~1
++ exit /b 0
++)
++if "%RUNFILES_MANIFEST_FILE%" equ "" (
++ set RUNFILES_MANIFEST_FILE=%~f0.runfiles\MANIFEST
++)
++if not exist "%RUNFILES_MANIFEST_FILE%" (
++ set RUNFILES_MANIFEST_FILE=%~f0.runfiles_manifest
++)
++set MF=%RUNFILES_MANIFEST_FILE:/=\%
++if not exist "%MF%" (
++ echo>&2 ERROR: Manifest file %MF% does not exist.
++ exit 1
++)
++set runfile_path=%~1
++for /F "tokens=2* usebackq" %%i in (`%SYSTEMROOT%\system32\findstr.exe /l /c:"!runfile_path! " "%MF%"`) do (
++ set abs_path=%%i
++)
++if "!abs_path!" equ "" (
++ echo>&2 ERROR: !runfile_path! not found in runfiles manifest
++ exit 1
++)
++set %~2=!abs_path!
++exit /b 0
++:rlocation_end
++:: End of rlocation
++"""
++
+ def is_windows(ctx):
+ """
+ Check if we are building for Windows.
+@@ -27,6 +70,14 @@ def is_windows(ctx):
+ # https://github.com/bazelbuild/bazel/issues/9209 is resolved.
+ return ctx.configuration.host_path_separator == ";"
+
++# Helper function to convert a file to a path in the MANIFEST file
++def _file_to_manifest_path(ctx, f):
++ p = f.short_path
++ if p.startswith("../"):
++ return p[3:]
++ else:
++ return ctx.workspace_name + "/" + p
++
+ def create_windows_native_launcher_script(ctx, shell_script):
+ """
+ Create a Windows Batch file to launch the given shell script.
+@@ -41,25 +92,16 @@ def create_windows_native_launcher_script(ctx, shell_script):
+ content = r"""@echo off
+ SETLOCAL ENABLEEXTENSIONS
+ SETLOCAL ENABLEDELAYEDEXPANSION
+-if "%RUNFILES_MANIFEST_ONLY%" neq "1" (
+- set run_script={sh_script}
+- goto :run
+-)
+-set MF=%RUNFILES_MANIFEST_FILE:/=\%
+-set script={sh_script}
+-if "!script:~0,9!" equ "external/" (set script=!script:~9!) else (set script=!TEST_WORKSPACE!/!script!)
+-for /F "tokens=2* usebackq" %%i in (`findstr.exe /l /c:"!script! " "%MF%"`) do (
+- set run_script=%%i
+-)
+-if "!run_script!" equ "" (
+- echo>&2 ERROR: !script! not found in runfiles manifest
+- exit /b 1
+-)
+-:run
+-{bash_bin} -c "!run_script!"
++set RUNFILES_MANIFEST_ONLY=1
++{rlocation_function}
++call :rlocation "{sh_script}" run_script
++for %%a in ("{bash_bin}") do set "bash_bin_dir=%%~dpa"
++set PATH=%bash_bin_dir%;%PATH%
++{bash_bin} -c "!run_script! %*"
+ """.format(
+ bash_bin = ctx.toolchains["@bazel_tools//tools/sh:toolchain_type"].path,
+- sh_script = shell_script.short_path,
++ sh_script = _file_to_manifest_path(ctx, shell_script),
++ rlocation_function = BATCH_RLOCATION_FUNCTION,
+ ),
+ is_executable = True,
+ )
+--
+2.20.1
+
+From 9c1e6ce41e458f41654fe609d76220770562c9b4 Mon Sep 17 00:00:00 2001
+From: Paul Gschwendtner <paulgschwendtner@gmail.com>
+Date: Mon, 9 Sep 2019 20:43:49 +0200
+Subject: [PATCH] web test not launching on windows if shell toolchain path
+ contains whitespace (#389)
+
+The windows launcher code does currently break if the path to the bash binary contains
+a whitespace. This is common on windows where programs are stored under `C:\Program Files`.
+
+e.g.
+
+```
+:run
+C:/Program Files/msys2/usr/bin/bash.exe -c "!run_script!"
+```
+
+The path needs to be quoted so that it won't be incorrectly picked up as two separate commands. Resulting in an
+exception like:
+
+```
+'C:/Program' is not recognized as an internal or external command,
+operable program or batch file.
+```
+---
+ web/internal/windows_utils.bzl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/web/internal/windows_utils.bzl b/web/internal/windows_utils.bzl
+index 576053a..4bec20e 100644
+--- a/web/internal/windows_utils.bzl
++++ b/web/internal/windows_utils.bzl
+@@ -97,7 +97,7 @@ set RUNFILES_MANIFEST_ONLY=1
+ call :rlocation "{sh_script}" run_script
+ for %%a in ("{bash_bin}") do set "bash_bin_dir=%%~dpa"
+ set PATH=%bash_bin_dir%;%PATH%
+-{bash_bin} -c "!run_script! %*"
++"{bash_bin}" -c "!run_script! %*"
+ """.format(
+ bash_bin = ctx.toolchains["@bazel_tools//tools/sh:toolchain_type"].path,
+ sh_script = _file_to_manifest_path(ctx, shell_script),