एपिसोड 15: मॉन्ट्रियल में जो मेसन का पीक्यू (नवंबर 2020)
पिछले एपिसोड
Chrome एक बड़ा प्रोजेक्ट है, जिसमें कई सब-सिस्टम हैं. कोड ढूंढना आम बात है किसी ऐसे कॉम्पोनेंट के लिए लिखा गया हो जो कहीं और काम का हो, लेकिन छिपा हो प्रतिबंध. सुरक्षा के लिए, खतरनाक सुविधाओं का बाहरी ऐक्सेस सीमित करें. उदाहरण के लिए, खास परफ़ॉर्मेंस ज़रूरतों के लिए ट्यून किया गया कस्टम फ़ंक्शन:
// Blazing fast for 2-char strings, O(n^3) otherwise.
std::string ConcatShortStringsFast(const std::string& a, const std::string& b);
ऐक्सेस पर पाबंदी लगाने के कई तरीके हैं. GN के दिखने से जुड़े नियम, कोड को रोकते हैं जो टारगेट के आधार पर आपके कॉम्पोनेंट के बाहर है. डिफ़ॉल्ट रूप से टारगेट ये होते हैं सभी को दिखाई दे सकती है, लेकिन आप उसे संशोधित कर सकते हैं:
# In components/restricted_component/BUILD.gn
visibility = [
# Applies to all targets in this file.
# Only the given targets can depend on them.
"//components/restricted_component:*",
"//components/authorized_other_component:a_single_target",
]
source_set("internal") {
# This dangerous target should be locked down even more.
visibility = [ "//components/restricted_component:privileged_target" ]
}
प्रॉडक्ट के दिखने से जुड़े एलानों की पुष्टि, gn check
की मदद से की जाती है. यह प्रोसेस एक हिस्से के तौर पर चलती है
GN के हर बिल्ड के लिए इस्तेमाल हो रहा है.
डीईपीएस include_rules
एक और तरीका है, जो हेडर फ़ाइलों का ऐक्सेस सीमित करता है.
हर डायरेक्ट्री include_rules
को अपने पैरंट से इनहेरिट करती है और उनमें बदलाव कर सकती है
अपनी DEPS
फ़ाइल में नियम सेट करना चाहिए. बाहर से शामिल की गई सभी हेडर फ़ाइलें
डायरेक्ट्री के लिए, include_rules
को अनुमति होनी चाहिए.
# In //components/authorized_other_component/DEPS
include_rules = [
# Common directories like //base are inherited from
# //components/DEPS or //DEPS. Also allow includes from
# restricted_component, but not restricted_component/internal.
"+components/restricted_component",
"-components/restricted_component/internal",
# But do allow a single header from internal, for testing.
"+components/restricted_component/internal/test_support.h",
]
इन डिपेंडेंसी को सही तरीके से लागू करने के लिए, डायरेक्ट्री को जोड़ने वाले बदलाव किए जाते हैं
include_rules
के लिए, उस डायरेक्ट्री के OWNERS
से अनुमति लेनी होगी. नहीं
include_rules
का इस्तेमाल करने वाली डायरेक्ट्री पर पाबंदी लगाने के लिए, अनुमति ज़रूरी है! आप
पक्का करें कि कॉम्पोनेंट को बदलने वाला हर व्यक्ति, यह याद रखे कि
हेडर जोड़ने के लिए include_rule
जोड़ें.
पहले से सबमिट करने से include_rules
की जांच की जाती है. इसलिए, आपको
जब तक आप कोई परिवर्तन अपलोड करने का प्रयास न करें. इसके बिना include_rules
को टेस्ट करने के लिए
अपलोड हो रहा है, buildtools/checkdeps/checkdeps.py <directory>
चलाएं.