1
+ @ echo off
2
+ REM Usage:
3
+ REM _pytest.bat urls.txt
4
+ REM _pytest.bat https://host/a.tar.gz https://host/b.tgz
5
+ REM From ChatGPT
6
+
7
+ setlocal EnableExtensions EnableDelayedExpansion
8
+
9
+ REM ---- temp workspace under %TEMP% ----
10
+ set " TMPROOT = %TEMP% \remote_tests_%RANDOM%%RANDOM% "
11
+ md " %TMPROOT% " || (echo Failed to create TMPROOT & exit /b 1)
12
+
13
+ REM ---- resolve args -> URL list file ----
14
+ if " %~2 " == " " (
15
+ if exist " %~1 " (
16
+ set " URLS_FILE = %~f1 "
17
+ ) else (
18
+ set " URLS_FILE = %TMPROOT% \urls.txt"
19
+ > " %URLS_FILE% " echo %~1
20
+ )
21
+ ) else (
22
+ set " URLS_FILE = %TMPROOT% \urls.txt"
23
+ (for %%U in (%* ) do @ echo %%~U ) > " %URLS_FILE% "
24
+ )
25
+
26
+ pushd " %TMPROOT% " > nul || (echo Failed to enter TMPROOT & exit /b 1)
27
+
28
+ set /a i = 0
29
+ set /a overall_ec = 0
30
+
31
+ REM read URL file line-by-line; hand off each line to a subroutine
32
+ for /f " usebackq delims=" %%L in (" %URLS_FILE% " ) do call :process_one " %%L "
33
+
34
+ popd > nul
35
+ rmdir /s /q " %TMPROOT% " > nul 2 >& 1
36
+ exit /b %overall_ec%
37
+
38
+ REM ===================== subroutine =====================
39
+ :process_one
40
+ setlocal EnableExtensions EnableDelayedExpansion
41
+
42
+ REM grab the raw line and trim leading spaces
43
+ set " url = %~1 "
44
+ if " %url% " == " " (endlocal & goto :eof)
45
+ :trim
46
+ if not " %url:~0 ,1 % " == " " goto :trim_done
47
+ set " url = %url:~1 % "
48
+ goto trim
49
+ :trim_done
50
+
51
+ REM skip comments
52
+ if " %url:~0 ,1 % " == " #" (endlocal & goto :eof)
53
+
54
+ REM ----- do the work for this URL -----
55
+ endlocal & set /a i += 1 & set " URL = %url% "
56
+ echo(
57
+ echo ==> [%i% ]
58
+
59
+ set " PKGDIR = %TMPROOT% \pkg_%i% "
60
+ md " %PKGDIR% "
61
+ pushd " %PKGDIR% " > nul || goto :after
62
+
63
+ REM download archive into PKGDIR
64
+ curl -L --fail -o " archive.tar.gz" " %URL% "
65
+ if errorlevel 1 (
66
+ echo curl failed
67
+ set /a overall_ec = 1
68
+ popd > nul & goto :after
69
+ )
70
+
71
+ REM extract (try gzip flags, then plain)
72
+ tar -xzf " archive.tar.gz" > nul 2 >& 1
73
+ if errorlevel 1 tar -xf " archive.tar.gz" > nul 2 >& 1
74
+ if errorlevel 1 (
75
+ echo tar extract failed
76
+ set /a overall_ec = 1
77
+ popd > nul & goto :after
78
+ )
79
+
80
+ REM get first entry (try -tzf, then -tf)
81
+ set " FIRST = "
82
+ for /f " delims=" %%F in ('tar -tzf " archive.tar.gz" 2^ > nul ') do set " FIRST = %%F " & goto got_first
83
+ for /f " delims=" %%F in ('tar -tf " archive.tar.gz" 2^ > nul ') do set " FIRST = %%F " & goto got_first
84
+ :got_first
85
+
86
+ REM choose project root (top dir if present)
87
+ set " PROJROOT = %CD% "
88
+ if defined FIRST for /f " tokens=1 delims=/" %%T in (" %FIRST% " ) do if exist " .\%%T \" set " PROJROOT = %CD% \%%T "
89
+
90
+ REM mirror original: drop src\ if present
91
+ if exist " %PROJROOT% \src\" rmdir /s /q " %PROJROOT% \src" > nul 2 >& 1
92
+
93
+ REM run pytest from repo root (with tests on PYTHONPATH if exists)
94
+ pushd " %PROJROOT% " > nul
95
+ echo Running pytest in: " %CD% "
96
+ set " OLD_PYTHONPATH = %PYTHONPATH% "
97
+ if exist " tests\" (
98
+ if defined OLD_PYTHONPATH (
99
+ set " PYTHONPATH = %CD% ;tests;%OLD_PYTHONPATH% "
100
+ ) else (
101
+ set " PYTHONPATH = %CD% ;tests"
102
+ )
103
+ ) else (
104
+ if defined OLD_PYTHONPATH (
105
+ set " PYTHONPATH = %CD% ;%OLD_PYTHONPATH% "
106
+ ) else (
107
+ set " PYTHONPATH = %CD% "
108
+ )
109
+ )
110
+ pytest
111
+ if errorlevel 1 set /a overall_ec = 1
112
+ set " PYTHONPATH = %OLD_PYTHONPATH% "
113
+ popd > nul
114
+
115
+ popd > nul
116
+ :after
117
+ rmdir /s /q " %PKGDIR% " > nul 2 >& 1
118
+ goto :eof
0 commit comments