लेबल

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

हर 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

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