bazel-contrib / bazel-contrib/rules_python

Runfiles API fails when code and output_user_root are on different Windows drives.

未关闭
#2,141 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Starlark
星标
688
派生
721
平均合并
15 小时 7 分钟
30 天内合并 PR
76

描述

# 🐞 bug report

### Affected Rule

`python.runfiles`

### Is this a regression?

I'm not sure, I've never seen it but I rarely use windows.

### Description

It seems if a repo is checked out to a different drive than the bazel output_base then the runfiles API breaks.

https://github.com/UebelAndre/rules_pytest/actions/runs/10495890608/job/29075336459

## 🔬 Minimal Reproduction

On https://github.com/UebelAndre/rules_pytest/tree/abb7f0e6598cb267a704e189237a14b5d777532d run:
```
bazel test //python/pytest/private/tests/version_test
```

## 🔥 Exception or Error

```
__________________________________________ test_versions __________________________________________
(19:07:33) INFO: Found 28 targets and 20 test targets...

def test_versions() -> None:
"""Test that the version.bzl and MOUDLE.bazel versions are synced."""
runfiles = Runfiles.Create()
if not runfiles:
raise EnvironmentError("Failed to locate runfiles.")

> version_bzl = rlocation(runfiles, "rules_pytest/version.bzl")

D:\a\rules_pytest\rules_pytest\python\pytest\private\tests\version_test\version_test.py:35:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
D:\a\rules_pytest\rules_pytest\python\pytest\private\tests\version_test\version_test.py:20: in rlocation
runfile = runfiles.Rlocation(rlocationpath)
..\rules_python\python\runfiles\runfiles.py:175: in Rlocation
source_repo = self.CurrentRepository(frame=2)
..\rules_python\python\runfiles\runfiles.py:248: in CurrentRepository
caller_runfiles_path = os.path.relpath(caller_path, self._python_runfiles_root)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

path = 'D:\\a\\rules_pytest\\rules_pytest\\python\\pytest\\private\\tests\\version_test\\version_test.py'
start = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\Bazel.runfiles_ycjtfwtt\\runfiles'

> ???
E ValueError: path is on mount 'D:', start on mount 'C:'

:766: ValueError
```

## 🌍 Your Environment

**Operating System:**

  

windows

**Output of `bazel version`:**

  

Bazelisk version: 1.20.0
Build label: 7.3.1
Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
Build time: Mon Aug 19 16:41:27 2024 (1724085687)
Build timestamp: 1724085687
Build timestamp as int: 1724085687

**Rules_python version:**

  

0.34.0

**Anything else relevant?**

贡献指南

打开贡献指南

调研方向

从 python/runfiles/runfiles.py 开始,重点查看 Rlocation 和 CurrentRepository,然后在 repository 和 output root 位于不同驱动器时,于 Windows 上运行 bazel test //python/pytest/private/tests/version_test 来复现该失败。version_test.py 的 traceback 显示了失败的路径操作;当复现过程不再出现跨驱动器的 ValueError,并且该行为由适当的测试覆盖时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
build-system, tooling
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
45/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。