Genellikle bir işlem, geçişli bağımlılıklardan toplanan değerleri içeren büyük bir komut satırı gerektirir. Örneğin, bir bağlayıcı komut satırı, bağlanmakta olan tüm kitaplıkların ihtiyaç duyduğu her nesne dosyasını listeleyebilir. Bu tür geçişli verileri birden fazla hedefle paylaşabilmek için depset'lerde depolamanız önerilir. Ancak kuralı yazan kişi, bir işlem komut satırı oluşturmak için bu bağımlılık kümelerini dize listelerine dönüştürmek zorunda kalırsa bu bellek paylaşımı optimizasyonu bozulur.
Bu nedenle, işlem oluşturma işlevleri dizelerin yanı sıra Args nesnelerini de kabul eder. Her Args nesnesi, dizelerin ve bağımlılık kümelerinin birleştirilmesini temsil eder. Verileri işlemek için isteğe bağlı dönüşümler kullanılabilir. Args nesneleri, komut satırını hesaplama zamanı geldiğinde yürütme aşamasına kadar kapsadıkları bağımlılık kümelerini işlemez. Bu sayede, analiz aşaması tamamlanana kadar maliyetli kopyalama işlemleri ertelenir. Daha fazla bilgi için Performansı Optimize Etme sayfasına bakın.
Args, ctx.actions.args() aranarak oluşturulur. Bunlar, ctx.actions.run() veya ctx.actions.run_shell() parametresi olarak iletilebilir.arguments Args nesnesinin her mutasyonu, değerleri nihai komut satırına ekler.
map_each özelliği, öğelerin dizelere nasıl dönüştürüleceğini özelleştirmenize olanak tanır. map_each işlevi sağlamazsanız standart dönüşüm şu şekilde olur:
- Zaten dize olan değerler olduğu gibi bırakılır.
Filenesneleri,File.pathdeğerlerine dönüştürülür.Labelnesneleri, ana depo bağlamında çözümlendiğinde aynı nesneye geri dönen bir dize gösterimine dönüştürülür. Mümkünse dize gösterimi, BUILD dosyalarında kullanıma uygun hale getirmek için, deponun kanonik adı yerine deponun görünen adını kullanır. Temsilin tam şekli garanti edilmese de tipik örnekler//foo:bar,@repo//foo:barve@@canonical_name+//foo:bar.bzl'dir.- Diğer tüm türler belirtilmemiş şekilde dizelere dönüştürülür. Bu nedenle,
add()işlevine dize veyaFiletüründe olmayan değerler aktarmaktan kaçınmalısınız. Bu değerleriadd_all()veyaadd_joined()işlevlerine aktarırsanızmap_eachişlevi sağlamanız gerekir.
Dize biçimlendirmesi (format, format_each ve format_joined parametreleri add*() yöntemleri) kullanılırken biçim şablonu, dizelerde % yerine koyma işlemiyle aynı şekilde yorumlanır. Ancak şablonda tam olarak bir yerine koyma yer tutucusu olmalı ve bu yer tutucu %s olmalıdır. Değişmez yüzdeler %% olarak çıkış yapılabilir. Biçimlendirme, değer yukarıdaki gibi bir dizeye dönüştürüldükten sonra uygulanır.
add*() yöntemlerinin her birinin, ek bir konumsal parametre kabul eden alternatif bir biçimi vardır. Bu biçimde, bağımsız değişkenlerin geri kalanından önce eklenecek bir "arg name" dizesi bulunur. add_all ve add_joined için dizi boş çıkarsa ek dize eklenmez. Örneğin, aynı kullanım, verilen dizinin val1..val3 içerip içermemesine veya boş olup olmamasına bağlı olarak komut satırına --foo val1 val2 val3 --bar ya da yalnızca --bar ekleyebilir.
Komut satırının boyutu, sistemin izin verdiği maksimum boyuttan daha uzun olabilirse bağımsız değişkenler parametre dosyalarına taşabilir. use_param_file() ve set_param_file_format() hükümlerini inceleyin.
Örnek: Şu komut satırını oluşturmak istediğimizi varsayalım:
--foo foo1.txt foo2.txt ... fooN.txt --bar bar1.txt,bar2.txt,...,barM.txt --baz
Args nesnesini kullanabiliriz:
# foo_deps and bar_deps are depsets containing
# File objects for the foo and bar .txt files.
args = ctx.actions.args()
args.add_all("--foo", foo_deps)
args.add_joined("--bar", bar_deps, join_with=",")
args.add("--baz")
ctx.actions.run(
...
arguments = [args],
...
)
Üyeler
add
Args Args.add(arg_name_or_value, value=unbound, *, format=None)
Parametreler
| Parametre | Açıklama |
|---|---|
arg_name_or_value
|
zorunlu İki konumsal parametre iletilirse bu, argüman adı olarak yorumlanır. Arg adı, değerden önce herhangi bir işlem yapılmadan eklenir. Yalnızca bir konumsal parametre iletilirse bu parametre value olarak yorumlanır (aşağıya bakın).
|
value
|
Varsayılan değer unbound'dir. Eklenecek nesne. Yukarıda bahsedilen standart dönüştürme kullanılarak dizeye dönüştürülür. Bu işlev için map_each parametresi olmadığından value, dize veya File olmalıdır. Bu yöntem yerine add_all() veya add_joined() öğesine liste, demet, depset veya dizin File iletilmelidir.
|
format
|
dize veya None;
varsayılan değer Nonevalue öğesinin dizeleştirilmiş sürümüne uygulanacak bir biçim dizesi kalıbı.
|
add_all
Args Args.add_all(arg_name_or_values, values=unbound, *, map_each=None, format_each=None, before_each=None, omit_if_empty=True, uniquify=False, expand_directories=True, terminate_with=None, allow_closure=False)
İşlemin çoğu, aşağıdaki adımlarda belirtildiği gibi eklenecek bir bağımsız değişkenler listesi üzerinden gerçekleşir:
- Her dizin
Fileöğesi, o dizinde yinelemeli olarak bulunan tümFile'lerle değiştirilir. map_eachverilirse her öğeye uygulanır ve ortaya çıkan dizeler listeleri, ilk bağımsız değişken listesini oluşturmak için birleştirilir. Aksi takdirde, ilk bağımsız değişken listesi her öğeye standart dönüştürme uygulanarak elde edilen sonuçtur.- Listede varsa her bağımsız değişken
format_eachile biçimlendirilir. uniquifydoğruysa yinelenen bağımsız değişkenler kaldırılır. İlk oluşum kalır.- Bir
before_eachdizesi verilirse listedeki her mevcut bağımsız değişkenden önce yeni bir bağımsız değişken olarak eklenir. Bu, bu noktaya kadar eklenecek bağımsız değişkenlerin sayısını ikiye katlar. - Liste boş olmadığı ve
omit_if_emptydoğru (varsayılan) olmadığı sürece, arg adı veterminate_with, sırasıyla ilk ve son bağımsız değişken olarak eklenir.
Parametreler
| Parametre | Açıklama |
|---|---|
arg_name_or_values
|
zorunlu İki konumsal parametre iletilirse bu, argüman adı olarak yorumlanır. Arg adı, values öğesinin önüne ayrı bir bağımsız değişken olarak işlenmeden eklenir. omit_if_empty doğruysa (varsayılan) ve başka öğe eklenmemişse (values boşsa veya tüm öğeleri filtrelenmişse olduğu gibi) bu bağımsız değişken adı eklenmez. Yalnızca bir konumsal parametre iletilirse bu parametre values olarak yorumlanır (aşağıya bakın).
|
values
|
sequence veya depset;
varsayılan değer unboundÖğeleri eklenecek liste, demet veya depset. |
map_each
|
callable; veya None;
varsayılan değer NoneHer öğeyi sıfır veya daha fazla dizeye dönüştüren bir işlevdir. Bu dizeler, eklenmeden önce daha fazla işlenebilir. Bu parametre sağlanmazsa standart dönüşüm kullanılır. İşleve bir veya iki konum bağımsız değişkeni iletilir: dönüştürülecek öğe ve ardından isteğe bağlı bir Döndürülen değerin türü, öğe için kaç bağımsız değişken oluşturulacağına bağlıdır:
None döndürmek, sırasıyla uzunluğu 1 veya 0 olan bir liste döndürmekle aynı etkiye sahiptir. Ancak, gerekli olmayan yerlerde liste oluşturmaktan kaçınmak daha verimli ve okunabilir bir yöntemdir.Normalde, Büyük analiz aşaması veri yapılarının yürütme aşamasında istenmeden saklanmasını önlemek için Uyarı: |
format_each
|
dize veya None;
varsayılan değer Nonemap_each işlevi tarafından döndürülen her dizeye uygulanan isteğe bağlı bir biçim dizesi kalıbı. Biçim dizesinde tam olarak bir "%s" yer tutucusu olmalıdır.
|
before_each
|
string; veya None;
varsayılan değer Nonevalues'den türetilen her bağımsız değişkenden önce eklenecek isteğe bağlı bir bağımsız değişken.
|
omit_if_empty
|
bool;
varsayılan değer TrueDoğruysa, values öğesinden türetilen ve eklenecek bağımsız değişken yoksa tüm sonraki işlemler bastırılır ve komut satırı değişmez. Yanlışsa diğer bağımsız değişkenler olup olmadığına bakılmaksızın bağımsız değişken adı ve terminate_with (varsa) eklenmeye devam eder.
|
uniquify
|
bool;
varsayılan değer FalseDoğruysa values öğesinden türetilen yinelenen bağımsız değişkenler atlanır. Yalnızca her bağımsız değişkenin ilk oluşumu kalır. Bu özellik, genellikle depsets zaten yinelenenleri atladığı için gerekli değildir ancak map_each birden fazla öğe için aynı dizeyi yayınlıyorsa yararlı olabilir.
|
expand_directories
|
bool;
varsayılan değer TrueTrue ise values içindeki tüm dizinler düz bir dosya listesi olarak genişletilir. Bu işlem, map_each uygulanmadan önce gerçekleşir.
|
terminate_with
|
dize veya None;
varsayılan değer NoneDiğer tüm bağımsız değişkenlerden sonra eklenecek isteğe bağlı bir bağımsız değişkendir. omit_if_empty doğruysa (varsayılan) ve başka öğe eklenmemişse (values boşsa veya tüm öğeleri filtrelenmişse olduğu gibi) bu bağımsız değişken eklenmez.
|
allow_closure
|
bool;
varsayılan değer FalseDoğruysa map_each gibi işlev parametrelerinde kapanımların kullanılmasına izin verir. Bu genellikle gerekli değildir ve büyük analiz aşaması veri yapılarının yürütme aşamasında tutulması riskini taşır.
|
add_joined
Args Args.add_joined(arg_name_or_values, values=unbound, *, join_with, map_each=None, format_each=None, format_joined=None, omit_if_empty=True, uniquify=False, expand_directories=True, allow_closure=False)
İşleme, add_all() işlevine benzer ancak values işlevinden türetilen bağımsız değişkenler listesi, join_with.join(...) işleviyle birleştirilmiş gibi tek bir bağımsız değişkende birleştirilir ve ardından verilen format_joined dize şablonu kullanılarak biçimlendirilir. add_all()'dan farklı olarak, öğeler tek bir bağımsız değişkende birleştirildiğinde genellikle yararlı olmadıkları için before_each veya terminate_with parametresi yoktur.
Filtrelemeden sonra bir bağımsız değişkene birleştirilecek dize yoksa ve omit_if_empty doğruysa (varsayılan) herhangi bir işlem yapılmaz. Aksi takdirde, birleştirilecek dize yoksa ancak omit_if_empty yanlışsa birleştirilen dize boş bir dize olur.
Parametreler
| Parametre | Açıklama |
|---|---|
arg_name_or_values
|
zorunlu İki konumsal parametre iletilirse bu, argüman adı olarak yorumlanır. Arg adı, herhangi bir işlem yapılmadan values öğesinden önce eklenir. omit_if_empty doğruysa (varsayılan) ve birleştirilecek values'den türetilmiş dize yoksa (values boşsa veya tüm öğeleri filtrelenmişse bu durum oluşabilir) bu argüman eklenmez. Yalnızca bir konumsal parametre iletilirse bu parametre values olarak yorumlanır (aşağıya bakın).
|
values
|
sequence veya depset;
varsayılan değer unboundÖğeleri birleştirilecek liste, demet veya depset. |
join_with
|
string;
gereklimap_each ve format_each işlevlerinin uygulanmasıyla elde edilen dizeleri string.join() işlevinde olduğu gibi birleştirmek için kullanılan bir ayırıcı dize.
|
map_each
|
callable; veya None;
varsayılan değer None'dir. add_all ile aynıdır.
|
format_each
|
string; veya None;
varsayılan değer Noneadd_all ile aynıdır.
|
format_joined
|
dize veya None;
varsayılan değer NoneBirleştirilmiş dizeye uygulanan isteğe bağlı biçim dizesi kalıbı. Biçim dizesinde tam olarak bir "%s" yer tutucusu olmalıdır. |
omit_if_empty
|
bool;
varsayılan değer TrueDoğruysa birleştirilecek dize yoksa ( values boş olduğu veya tüm öğeleri filtrelendiği için) tüm sonraki işlemler bastırılır ve komut satırı değişmez. Yanlışsa birleştirilecek dize olmasa bile iki bağımsız değişken eklenir: bağımsız değişken adı ve ardından boş bir dize (sıfır dizenin mantıksal birleşimi).
|
uniquify
|
bool;
varsayılan değer Falseadd_all ile aynıdır.
|
expand_directories
|
bool;
varsayılan değer Trueadd_all ile aynıdır.
|
allow_closure
|
bool;
varsayılan değer Falseadd_all ile aynıdır.
|
set_param_file_format
Args Args.set_param_file_format(format)
Parametreler
| Parametre | Açıklama |
|---|---|
format
|
string;
required Must be one of:
Biçim, çağrılmadığı takdirde varsayılan olarak "shell" olur. |
use_param_file
Args Args.use_param_file(param_file_arg, *, use_always=False)
Bazel, verimlilik için yürütme sırasında parametreler dosyasını çıkış ağacına yazmayı atlamayı seçebilir. İşlemlerde hata ayıklıyorsanız ve param dosyasını incelemek istiyorsanız derlemenize --materialize_param_files iletin.
Parametreler
| Parametre | Açıklama |
|---|---|
param_file_arg
|
string;
zorunlu Tek bir "%s" içeren bir biçim dizesi. Bağımsız değişkenler bir params dosyasına taşarsa bu dizeyle biçimlendirilmiş bir bağımsız değişkenle değiştirilirler. Örneğin, args bir "params.txt" parametre dosyasına taşırılıyorsa "--file=%s" belirtildiğinde işlem komut satırı "--file=params.txt" içerir. |
use_always
|
bool;
varsayılan değer FalseBağımsız değişkenlerin her zaman bir parametre dosyasına aktarılıp aktarılmayacağı. Yanlışsa Bazel, sisteminize ve argüman uzunluğuna göre argümanların taşırılması gerekip gerekmediğine karar verir. |