हर Label इंस्टेंस l के लिए, स्ट्रिंग के तौर पर दिखाए जाने वाले str(l) में यह प्रॉपर्टी होती है कि Label(str(l)) == l, भले ही Label() कॉल कहीं भी हो.
print() या fail() को पोज़िशनल आर्ग्युमेंट के तौर पर पास किए जाने पर, Label इसके बजाय, स्ट्रिंग के तौर पर दिखाए जाने वाले ऐसे फ़ॉर्मैट का इस्तेमाल करता है जिसे आसानी से पढ़ा जा सके. अगर ऐसा किया जा सकता है, तो इस फ़ॉर्मैट में मुख्य डेटाबेस के नज़रिए से, डेटाबेस का कोई नाम इस्तेमाल किया जाता है.
सदस्य
लेबल
Label Label(input)
Label ऑब्जेक्ट में बदलता है. यह बदलाव, उस पैकेज के संदर्भ में होता है जिसमें कॉल करने वाली .bzl सोर्स फ़ाइल मौजूद होती है. अगर दी गई वैल्यू पहले से ही Label है, तो उसे बिना किसी बदलाव के लौटा दिया जाता है.मैक्रो के लिए, इससे जुड़ा एक फ़ंक्शन, native.package_relative_label(), इनपुट को फ़िलहाल बनाए जा रहे पैकेज के संदर्भ में Label में बदलता है. नियम और आसपेक्ट को लागू करने वाले फ़ंक्शन के लिए, ctx.package_relative_label() का इस्तेमाल भी इसी मकसद से किया जा सकता है. स्ट्रिंग-टू-लेबल कन्वर्ज़न की नकल करने के लिए, इन फ़ंक्शन का इस्तेमाल करें. यह कन्वर्ज़न, लेबल-वैल्यू वाले नियम एट्रिब्यूट की मदद से अपने-आप होता है.
पैरामीटर
| पैरामीटर | ब्यौरा |
|---|---|
input
|
स्ट्रिंग; या लेबल;
ज़रूरी है इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई लेबल ऑब्जेक्ट पास किया जाता है, तो उसे बिना किसी बदलाव के लौटा दिया जाता है. |
name
string Label.name
Label("@@foo//pkg/foo:abc").name == "abc"पैकेज
string Label.package
Label("@@repo//pkg/foo:abc").package == "pkg/foo"संबंधित
Label Label.relative(relName)
--+incompatible_enable_deprecated_label_apis अब इसका इस्तेमाल नहीं किया जाता. को सेट करना होगा जब इस तरीके का इस्तेमाल, डेटाबेस का नाम शामिल करने वाले आर्ग्युमेंट के साथ किया जाता है, तो यह अजीब तरीके से काम करता है. इसके बजाय,
Label.same_package_label(), native.package_relative_label(), ctx.package_relative_label() या Label() का इस्तेमाल करें.यह किसी ऐसे लेबल को हल करता है जो या तो ऐब्सलूट है (जिसकी शुरुआत // से होती है) या मौजूदा पैकेज के हिसाब से रिलेटिव है. अगर यह लेबल किसी रिमोट डेटाबेस में है, तो आर्ग्युमेंट को उस डेटाबेस के हिसाब से हल किया जाएगा. अगर आर्ग्युमेंट में डेटाबेस का नाम शामिल है, तो मौजूदा लेबल को अनदेखा कर दिया जाता है और आर्ग्युमेंट को बिना किसी बदलाव के लौटा दिया जाता है. हालांकि, अगर डेटाबेस का नाम मौजूदा डेटाबेस मैपिंग में है, तो उसे फिर से लिखा जाता है. रिज़र्व किए गए लेबल भी बिना किसी बदलाव के लौटाए जाएंगे.
उदाहरण के लिए:
Label("//foo/bar:baz").relative(":quux") == Label("//foo/bar:quux")
Label("//foo/bar:baz").relative("//wiz:quux") == Label("//wiz:quux")
Label("@repo//foo/bar:baz").relative("//wiz:quux") == Label("@repo//wiz:quux")
Label("@repo//foo/bar:baz").relative("//visibility:public") == Label("//visibility:public")
Label("@repo//foo/bar:baz").relative("@other//wiz:quux") == Label("@other//wiz:quux")
अगर पास की गई डेटाबेस मैपिंग {'@other' : '@remapped'} है, तो यह रीमैपिंग होगी:
Label("@repo//foo/bar:baz").relative("@other//wiz:quux") == Label("@remapped//wiz:quux")
पैरामीटर
| पैरामीटर | ब्यौरा |
|---|---|
relName
|
स्ट्रिंग;
ज़रूरी है वह लेबल जिसे इसके हिसाब से हल किया जाएगा. |
repo_name
string Label.repo_name
@) शामिल नहीं होते. उदाहरण के लिए, Label("@@foo//bar:baz").repo_name == "foo"same_package_label
Label Label.same_package_label(target_name)
पैरामीटर
| पैरामीटर | ब्यौरा |
|---|---|
target_name
|
स्ट्रिंग;
ज़रूरी है नए लेबल का टारगेट नाम. |
workspace_name
string Label.workspace_name
--+incompatible_enable_deprecated_label_apis अब इसका इस्तेमाल नहीं किया जाता. को सेट करना होगा यहां फ़ील्ड का नाम "workspace name" गलत है. इसके बजाय,
Label.repo_name का इस्तेमाल करें, जो एक जैसा काम करता है.यह लेबल, जिस टारगेट के बारे में बताता है वह जिस डेटाबेस में मौजूद है उसका कैननिकल नाम. इसमें शुरुआती ऐट-साइन (@) शामिल नहीं होते. उदाहरण के लिए,
Label("@@foo//bar:baz").workspace_name == "foo"workspace_root
string Label.workspace_root
Label("@repo//pkg/foo:abc").workspace_root == "external/repo"