Lệnh Nào Sau Đây Xóa Toàn Bộ Danh Sách? Tìm Hiểu Về Các Hàm Quản Lý Gói Trong Bazel

Trong Bazel, việc quản lý gói (package) và các phần tử bên trong chúng là vô cùng quan trọng để đảm bảo cấu trúc dự án rõ ràng và khả năng kiểm soát chế độ hiển thị (visibility). Bài viết này sẽ đi sâu vào các hàm liên quan đến gói trong Bazel, đặc biệt tập trung vào cách xóa hoặc loại bỏ các phần tử khỏi danh sách, dù trực tiếp hay gián tiếp.

Hàm package

Hàm package() được sử dụng để khai báo siêu dữ liệu áp dụng cho tất cả các quy tắc trong một gói. Bạn chỉ có thể sử dụng nó một lần duy nhất trong mỗi tệp BUILD.

package(default_deprecation, default_package_metadata, default_testonly, default_visibility, features)

Các đối số chính bao gồm:

  • default_visibility: Xác định khả năng hiển thị mặc định của các mục tiêu trong gói.
  • default_deprecation: Đặt thông báo về việc không dùng nữa mặc định.
  • default_testonly: Xác định liệu các quy tắc trong gói có phải chỉ dành cho thử nghiệm hay không.

Mặc dù hàm package() không trực tiếp xóa các phần tử khỏi danh sách, nhưng nó ảnh hưởng đến cách các quy tắc trong gói được xử lý, bao gồm cả chế độ hiển thị của chúng.

Hàm package_group

Hàm package_group() định nghĩa một tập hợp các gói và gán một nhãn cho tập hợp đó. Nhãn này có thể được sử dụng trong thuộc tính visibility.

package_group(name, packages, includes)

Các đối số:

  • name: Tên duy nhất cho nhóm gói.
  • packages: Danh sách các gói thuộc nhóm.
  • includes: Danh sách các nhóm gói khác được bao gồm trong nhóm này.

Tương tự như package(), package_group() không trực tiếp xóa các phần tử, nhưng cho phép bạn định nghĩa tập hợp các gói để quản lý chế độ hiển thị một cách hiệu quả. Bạn có thể loại trừ các gói cụ thể bằng cách sử dụng tiền tố - trong danh sách packages, ví dụ: packages = ["//foo/...", "-//foo/tests/..."].

Hàm exports_files

Hàm exports_files() chỉ định danh sách các tệp trong gói có thể được truy cập từ các gói khác.

exports_files([<i>label</i>, ...], visibility, licenses)

Nếu không sử dụng exports_files() hoặc khi cờ --incompatible_no_implicit_file_export được bật, thì tệp sẽ không được xuất. Mặc dù không xóa tệp vật lý, nhưng nó ngăn các gói khác tham chiếu đến tệp đó, có thể coi là một hình thức “xóa” khỏi phạm vi công khai.

Hàm glob

Hàm glob() tìm tất cả các tệp khớp với một hoặc nhiều mẫu đường dẫn và trả về một danh sách các đường dẫn đã sắp xếp.

glob(include, exclude=[], exclude_directories=1, allow_empty=True)

glob() cung cấp cơ chế để loại trừ các tệp khỏi danh sách. Đối số exclude cho phép bạn chỉ định một danh sách các mẫu mà các tệp khớp với chúng sẽ không được đưa vào kết quả. Đây là cách phổ biến nhất để “xóa” các tệp cụ thể khỏi danh sách các tệp nguồn được sử dụng trong một quy tắc.

Alt text: Ví dụ minh họa cách hàm glob() được sử dụng để chọn các tệp .java, loại trừ thư mục thử nghiệm và sau đó xây dựng một thư viện java từ các tệp đã chọn.

Ví dụ, để chọn tất cả các tệp .txt trong thư mục testdata trừ experimental.txt, bạn có thể sử dụng:

data = glob( ["testdata/*.txt"], exclude = ["testdata/experimental.txt"], )

Hàm subpackages

Hàm subpackages() liệt kê các gói con trực tiếp của gói hiện tại.

subpackages(include, exclude=[], allow_empty=True)

Tương tự như glob(), subpackages() cũng có đối số exclude để loại trừ các gói con cụ thể khỏi kết quả.

Hàm select

Hàm select() cho phép bạn chọn các giá trị thuộc tính khác nhau dựa trên các điều kiện cấu hình.

select( {conditionA: valuesA, conditionB: valuesB, ...}, no_match_error = "custom message" )

Mặc dù select() không trực tiếp xóa các phần tử khỏi danh sách, nhưng nó cho phép bạn tạo các danh sách khác nhau dựa trên các điều kiện, có nghĩa là một số phần tử có thể bị “xóa” một cách có điều kiện khỏi một số cấu hình nhất định.

Kết luận

Trong Bazel, không có một hàm duy nhất nào trực tiếp “xóa toàn bộ danh sách” theo nghĩa đen. Tuy nhiên, các hàm như glob()subpackages() cung cấp cơ chế exclude mạnh mẽ để lọc và loại bỏ các phần tử không mong muốn khỏi danh sách. Ngoài ra, exports_files() có thể hạn chế khả năng hiển thị của các tệp, trong khi select() cho phép tạo các danh sách có điều kiện dựa trên cấu hình xây dựng. Việc hiểu và sử dụng kết hợp các hàm này là chìa khóa để quản lý hiệu quả các gói và các phần tử của chúng trong Bazel.

Để “xóa” một danh sách, bạn có thể sử dụng glob với một mẫu rỗng và không bao gồm bất cứ thứ gì:

files = glob(include = [])

Điều này sẽ tạo ra một danh sách trống, tương đương với việc xóa tất cả các phần tử khỏi danh sách.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *