लेबल

यह BUILD टारगेट आइडेंटिफ़ायर है.

Label के हर इंस्टेंस l के लिए, स्ट्रिंग के तौर पर दिखाए जाने वाले str(l) में यह प्रॉपर्टी होती है कि Label(str(l)) == l. भले ही, Label() कॉल कहीं भी हो.

print() या fail() को पोज़िशनल आर्ग्युमेंट के तौर पर पास किए जाने पर, Label स्ट्रिंग के तौर पर दिखाए जाने वाले ऐसे फ़ॉर्मैट का इस्तेमाल करता है जिसे आसानी से पढ़ा जा सकता है. अगर ऐसा किया जा सकता है, तो इस फ़ॉर्मैट में मुख्य डेटाबेस के नज़रिए से, डेटाबेस का असली नाम इस्तेमाल किया जाता है.

सदस्य

लेबल

Label Label(input)

यह लेबल स्ट्रिंग को Label ऑब्जेक्ट में बदलता है. यह बदलाव, उस पैकेज के संदर्भ में होता है जिसमें कॉल करने वाली .bzl सोर्स फ़ाइल मौजूद होती है. अगर दी गई वैल्यू पहले से ही Label है, तो उसे बिना किसी बदलाव के लौटा दिया जाता है.

मैक्रो के लिए, इससे जुड़ा एक फ़ंक्शन, native.package_relative_label(), इनपुट को फ़िलहाल बनाए जा रहे पैकेज के संदर्भ में 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(), या 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

यह उस डेटाबेस के लिए एक्ज़ीक्यूशन रूट दिखाता है जिसमें इस लेबल से रेफ़र किया गया टारगेट मौजूद है. यह रूट, execroot के हिसाब से होता है. उदाहरण के लिए:
Label("@repo//pkg/foo:abc").workspace_root == "external/repo"