logname may not produce a login name
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 45/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- ruby
- Lĩnh vực
- testing-qa
Hướng nghiên cứu
Bắt đầu với spec/ruby/library/etc/getlogin_spec.rb:22 và tái hiện ví dụ Etc.getlogin bị lỗi trên JRuby trong môi trường GitHub Actions. So sánh các lệnh lấy tên đăng nhập hiện có và giá trị môi trường được mô tả trong issue, sau đó làm cho spec xử lý các môi trường không có terminal điều khiển. Hoàn tất khi spec chạy qua trên JRuby đồng thời vẫn giữ fallback khi các lệnh không khả dụng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Running the specs on JRuby on Github Actions, we see the following message and failing spec:
...
logname: no login name
...
1)
Etc.getlogin returns the name associated with the current login activity FAILED
Expected "runner" == ""
to be truthy but was false
/home/runner/work/jruby/jruby/spec/ruby/library/etc/getlogin_spec.rb:22:in `block in <main>'
...
This can occur when logname is run without a controlling terminal. I'm unsure whether this GHA env is not setting up a tty, or if there's an issue launching the command in JRuby that prevents it inheriting the parent terminal, but it seems like id would be a more reliable command to use:
diff --git a/spec/ruby/library/etc/getlogin_spec.rb b/spec/ruby/library/etc/getlogin_spec.rb
index 7a4fd79ae2..f0dde84ccb 100644
--- a/spec/ruby/library/etc/getlogin_spec.rb
+++ b/spec/ruby/library/etc/getlogin_spec.rb
@@ -18,11 +18,13 @@ describe "Etc.getlogin" do
else
# Etc.getlogin returns the same result of logname(2)
# if it returns non NULL
- if system("which logname", out: File::NULL, err: File::NULL)
+ if system("which id", out: File::NULL, err: File::NULL)
+ Etc.getlogin.should == `id -un`.chomp
+ elsif system("which logname", out: File::NULL, err: File::NULL)
+ # fallback to `logname` command since `id` is not available
Etc.getlogin.should == `logname`.chomp
else
- # fallback to `id` command since `logname` is not available
- Etc.getlogin.should == `id -un`.chomp
+ Etc.getlogin.should == ENV['LOGNAME']
end
end
else
However I think we are also stacking too many conditions here. I'm unsure of the "best" way to get the current login, but clearly logname has issues that make it undesirable.
FWIW some forums suggest logname -t which will ensure a tty is created, but this flag is not present on BSD-likes.
- Ngôn ngữ chính
- Ruby
- Star
- 622
- Fork
- 402
- Merge trung bình
- 14 giờ 51 phút
- Pull request đã merge (30 ngày)
- 6
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của ruby/spec
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 52/100
-
Improving Marshal specs Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 38/100
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
-
ruby/spec#1350 · 3 bình luận · 3 reaction · 1 người được giao ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 38/100
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
riscv/riscv-unified-db#2626 ·
-
Component: GLib
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
ds-drift
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
we-promise/sure#3693 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
simp/pupmod-simp-simp#395 ·