ملخص سطر الأوامر
كجزء من العمل مع مساحات العمل، تقوم البضائع بتوحيد الميزات: https://doc.rust-lang.org/cargo/reference/features.html#feature-unification
ماذا يعني هذا؟
لنفترض أن لديك مساحة عمل
[ workspace ]
members = [ " mega " , " potato " ]
مع عضوين: mega
[ package ]
name = " mega "
[ dependencies ]
potatoer = { version = " 0.2.1 " , features = [ " mega " ] }
potato
[ package ]
name = " potato "
[ dependencies ]
potatoer = { version = " 0.2.1 " , features = [ " potato " ] }
يعتمد كلاهما على potatoer
مشتركة تابعة لجهة خارجية ولكن بميزات مختلفة: mega
مهتمة بميزة "mega"
، potato
مهتمة بميزة "potato"
.
عند تشغيل أوامر مختلفة، ينتهي بك الأمر إلى طلب عدة إصدارات مختلفة من صندوق potatoer
.
ستستخدم أوامر مساحة العمل بأكملها الإصدار ذو الميزات الموحدة:
cargo check # this will use potatoer with both "mega" and "potato"
الأوامر التي تعمل على صندوق واحد ستستخدم إصدارات بدون توحيد:
cargo check -p mega # this will use potatoer with "mega" feature
cargo check -p potatoer # this will use potatoer with "potato" feature
cargo check -p mega -p potato # this will require both "mega" and "potato"
إذا لم تكن التبعية مع المجموعة المطلوبة موجودة، فسوف تقوم البضائع بتجميعها.
إحدى الطرق لتجنب هذه المشكلة هي التأكد من أنه إذا كان أعضاء مساحة العمل يعتمدون على صندوق، فإنهم يعتمدون عليه بنفس مجموعة الميزات. إن صيانتها يدويًا عرضة للخطأ، وذلك عندما يأتي hackerman hack
و hackerman restore
.
عند استخدامه مع خيار --lock
، سيأخذ hackerman
مجموعًا اختباريًا لجميع التبعيات وسيحفظه داخل ملف Cargo.toml
ضمن ["package.metadata.hackerman.lock"]
وستؤكد الاستدعاءات اللاحقة للتحقق أن هذا المجموع الاختباري لا يزال صالحًا .
يعد هذا مطلوبًا للتأكد من حفظ التبعيات الأصلية (التي لم يتم اختراقها) وإمكانية استعادتها في وقت لاحق.
من الممكن استخدام خيار hardcode --lock
في ملف Cargo.toml
الذي يحدد مساحة العمل:
[ workspace . metadata . hackerman ]
lock = true
في الوقت الحالي يتم تنفيذ التوحيد للهدف الحالي فقط وبدون دعم الترجمة المتداخلة. قد لا يعمل التحديث التلقائي لملفات toml لمساحة العمل إذا كنت تحدد تبعيات باستخدام بناء جملة مختلف عن الإصدار أو {}
:
potato = " 3.14 " # this is okay
banana = { version = " 3.14 " } # this is also okay
يعمل على حل تعارضات الدمج وإعادة الأساس لملفات Cargo.toml
التي تم تغييرها بواسطة hackerman
لاستخدامه تريد شيئا من هذا القبيل
عالمي .gitconfig
أو .git/config
المحلي.
[merge "hackerman"]
name = merge restored files with hackerman
driver = cargo hackerman merge %O %A %B %P
يمكن أن يكون ملف gitattributes
محليًا لكل مشروع أو عالميًا
Cargo.toml merge=hackerman
لإنشاء ملف gitattributes
عام، يلزمك تحديد مسار إليه داخل تكوين git العمومي:
[core]
attributesfile = ~/.gitattributes
أقوم هنا بمقارنة تأثيرات الأساليب المختلفة للتوحيد في مساحة العمل. بدون أي تغييرات، يستغرق الفحص النظيف لمساحة العمل بأكملها والذي يتضمن تجميع كافة التبعيات الخارجية 672 ثانية.
تحتوي مساحة العمل على مجموعة من الصناديق، والتي حددت منها الصناديق a
و b
و c
وما إلى ذلك، بحيث يستورد الصندوق b
الصندوق a
ويستورد الصندوق c
الصندوق b
وما إلى ذلك. لا يحتوي الصندوق a
على تبعيات خارجية، أما الصناديق الأخرى فتحتوي على.
cargo hackerman hack
ويتم إضافة تبعيات جديدة إلى كل صندوققبل تشغيل الأمر، أقوم بتنظيف نتائج التجميع ثم الأوامر لكل عمود بالتسلسل
يأمر | لا الاختراق | hackerman | الإختراق اليدوي |
---|---|---|---|
check -pa | 0.86 ثانية | 0.80 ثانية | 215.39 ثانية |
check -pb | 211.30 ثانية | 240.15 ثانية | 113.56 ث |
check -pc | 362.69 ث | 233.38 ث | 176.73 ث |
check -pd | 36.16 ثانية | 0.24 ثانية | 0.25 ثانية |
check -pe | 385.35 ثانية | 66.34 ثانية | 375.22 ثانية |
check | 267.06 ث | 93.29 ثانية | 81.50 ثانية |
المجموع | 1263.42 | 634.20 | 962.65 |
cargo hackerman
↴cargo hackerman hack
↴cargo hackerman restore
↴cargo hackerman check
↴cargo hackerman merge
↴cargo hackerman explain
↴cargo hackerman dupes
↴cargo hackerman tree
↴cargo hackerman show
↴ مجموعة من الأدوات التي تساعد مساحة العمل الخاصة بك على التجميع بسرعة
الاستخدام : أمر cargo hackerman
COMMAND ...
الخيارات المتاحة:
-h
, --help
— لطباعة معلومات المساعدة-V
, --version
— يطبع معلومات الإصدارالأوامر المتاحة:
hack
- توحيد تبعيات الصناديق عبر الصناديق الفردية في مساحة العملrestore
- إزالة توحيد تبعية الصندوق الذي تمت إضافته بواسطة أمر hack
check
- تحقق مما إذا كان التوحيد مطلوبًا وما إذا كانت المجاميع الاختبارية صحيحةmerge
- استعادة الملفات ودمجها مع برنامج تشغيل الدمج الافتراضيexplain
- اشرح سبب وجود بعض التبعية. كل من الميزة والإصدار اختياريانdupes
- يسرد كافة التكرارات في مساحة العملtree
- اصنع شجرة من التبعياتshow
— إظهار بيان الصندوق أو الملف التمهيدي أو المستودع أو الوثائق يمكنك تمرير --help
مرتين للحصول على مساعدة أكثر تفصيلاً
توحيد تبعيات الصناديق عبر الصناديق الفردية في مساحة العمل
الاستخدام : hack
cargo hackerman
CARGO_OPTS
[ --dry
] [ --lock
] [ -D
]
يمكنك التراجع عن هذه التغييرات باستخدام cargo hackerman restore
.
خيارات الشحن:
--manifest-path
= PATH
— المسار إلى ملف Cargo.toml--frozen
- يتطلب تحديث Cargo.lock وذاكرة التخزين المؤقت--locked
- يتطلب تحديث Cargo.lock--offline
— تشغيل دون الوصول إلى الشبكة-v
, --verbose
- زيادة الإسهاب، يمكن استخدامها عدة مراتالخيارات المتاحة:
--dry
— لا تقم بتنفيذ أي إجراء، بل اعرضه فقط
--lock
- تضمين المجموع الاختباري للتبعيات في المخزن
يساعد هذا على ضمان قدرتك على العودة إلى التبعيات الأصلية (التي لم يتم اختراقها): لكي تتمكن من استعادة التبعيات الأصلية، يحتاج المتسلل إلى تخزينها في ملف Cargo.toml
. إذا اكتشف CI عدم تطابق المجموع الاختباري، فهذا يعني أنه تم تحديث التبعيات على المصادر المخترقة. يجب عليك بدلاً من ذلك استعادتها وتحديثها واختراقها مرة أخرى.
يمكنك جعل قفل السلوك الافتراضي عن طريق إضافة هذا إلى Cargo.toml
في مساحة العمل
[workspace.metadata.hackerman]
lock = true
-D
, --no-dev
— لا توحد تبعيات التطوير
-h
, --help
— لطباعة معلومات المساعدة
يقوم cargo-hackerman hack
بحساب وإضافة الحد الأدنى من مجموعة التبعيات الإضافية إلى جميع أعضاء مساحة العمل بحيث تظل ميزات جميع التبعيات لهذا الصندوق كما هي عند استخدامه كجزء من مساحة العمل بأكملها أو بمفرده.
بمجرد اختراق التبعيات، يجب عليك استعادتها قبل إجراء أي تغييرات.
قم بإزالة توحيد تبعية الصندوق الذي تمت إضافته بواسطة أمر hack
الاستخدام : يقوم cargo hackerman
restore
CARGO_OPTS
[ TOML
]...
خيارات الشحن:
--manifest-path
= PATH
— المسار إلى ملف Cargo.toml--frozen
- يتطلب تحديث Cargo.lock وذاكرة التخزين المؤقت--locked
- يتطلب تحديث Cargo.lock--offline
— تشغيل دون الوصول إلى الشبكة-v
, --verbose
- زيادة الإسهاب، يمكن استخدامها عدة مراتالعناصر الموضعية المتاحة:
TOML
— استعادة الملفات الفردية بدلاً من مساحة العمل بأكملهاالخيارات المتاحة:
-h
, --help
— لطباعة معلومات المساعدة تحقق مما إذا كان التوحيد مطلوبًا وما إذا كانت المجاميع الاختبارية صحيحة
مشابه لـ cargo-hackerman hack --dry
، ولكنه يضبط أيضًا حالة الخروج على 1 حتى تتمكن من استخدامها كجزء من عملية CI
الاستخدام : يقوم cargo hackerman
check
CARGO_OPTS
[ -D
]
خيارات الشحن:
--manifest-path
= PATH
— المسار إلى ملف Cargo.toml--frozen
- يتطلب تحديث Cargo.lock وذاكرة التخزين المؤقت--locked
- يتطلب تحديث Cargo.lock--offline
— تشغيل دون الوصول إلى الشبكة-v
, --verbose
- زيادة الإسهاب، يمكن استخدامها عدة مراتالخيارات المتاحة:
-D
, --no-dev
— لا توحد تبعيات التطوير-h
, --help
— لطباعة معلومات المساعدة استعادة الملفات ودمجها مع برنامج تشغيل الدمج الافتراضي
الاستخدام : يقوم cargo hackerman
merge
RESULT
BASE
LOCAL
REMOTE
الخيارات المتاحة:
-h
, --help
— لطباعة معلومات المساعدة لاستخدامه، يمكنك إضافة شيء مثل هذا إلى ~/.gitconfig
أو .git/config
[merge "hackerman"]
name = merge restored files with hackerman
driver = cargo hackerman merge %O %A %B %P
وشيء من هذا القبيل ل .git/gitattributes
Cargo.toml merge=hackerman
اشرح سبب وجود بعض التبعية. كل من الميزة والإصدار اختياريان
الاستخدام : explain
cargo hackerman
CARGO_OPTS
[ -T
] [ -P
] [ -s
] CRATE
[ FEATURE
] [ VERSION
]
خيارات الشحن:
--manifest-path
= PATH
— المسار إلى ملف Cargo.toml--frozen
- يتطلب تحديث Cargo.lock وذاكرة التخزين المؤقت--locked
- يتطلب تحديث Cargo.lock--offline
— تشغيل دون الوصول إلى الشبكة-v
, --verbose
- زيادة الإسهاب، يمكن استخدامها عدة مراتالخيارات المتاحة:
-T
, --no-transitive-opt
— لا تقم بإزالة الروابط الزائدة عن الحاجة-P
, --package-nodes
- استخدم عقد الحزمة بدلاً من عقد الميزة-s
, --stdout
- طباعة ملف النقطة إلى stdout بدلاً من نشر xdot
-h
, --help
— لطباعة معلومات المساعدةمع وجود كمية كبيرة من التبعيات، قد يكون من الصعب معرفة سبب تضمين بعض التبعيات الفرعية الفرعية بالضبط. شرح hackerman يحل هذه المشكلة عن طريق تتبع سلسلة التبعية من الهدف إلى مساحة العمل.
يبدأ explain
عند صندوق/ميزة معينة ويتبع روابط التبعية العكسية حتى يصل إلى جميع نقاط العبور مع مساحة العمل ولكن دون الدخول إلى مساحة العمل نفسها.
تمثل العقد البيضاء أعضاء مساحة العمل، وتمثل العقد المستديرة الميزات، وتمثل العقد المثمنة الصناديق الأساسية. يمثل الخط المنقط تبعية المطورين فقط، والخط المتقطع - سواء المطورين أو العاديين ولكن مع ميزات مختلفة عبرهما. عادة ما يتم تسليط الضوء على الهدف. افتراضيًا، يقوم المتسلل بتوسيع عقد ميزات معلومات الحزم التي يمكن إرجاعها باستخدام -P
ويحاول تقليل التبعيات المتعدية لإبقاء الشجرة أكثر قابلية للقراءة - يمكن إرجاع ذلك باستخدام -T
.
إذا كان الصندوق موجودًا في عدة إصدارات، فيمكنك تحديد إصدار الصندوق الذي تهتم به ولكنه اختياري.
يمكنك أيضًا تحديد الميزة التي تريد البحث عنها، وإلا فسوف يبحث المتسلل عنها جميعًا.
يسرد كافة التكرارات في مساحة العمل
الاستخدام : cargo hackerman
dupes
CARGO_OPTS
خيارات الشحن:
--manifest-path
= PATH
— المسار إلى ملف Cargo.toml--frozen
- يتطلب تحديث Cargo.lock وذاكرة التخزين المؤقت--locked
- يتطلب تحديث Cargo.lock--offline
— تشغيل دون الوصول إلى الشبكة-v
, --verbose
- زيادة الإسهاب، يمكن استخدامها عدة مراتالخيارات المتاحة:
-h
, --help
— لطباعة معلومات المساعدة اصنع شجرة من التبعيات
الاستخدام : tree
cargo hackerman
CARGO_OPTS
[ -T
] [ -D
] [ -P
] [ -w
] [ -s
] [ CRATE
] [ FEATURE
] [ VERSION
]
خيارات الشحن:
--manifest-path
= PATH
— المسار إلى ملف Cargo.toml--frozen
- يتطلب تحديث Cargo.lock وذاكرة التخزين المؤقت--locked
- يتطلب تحديث Cargo.lock--offline
— تشغيل دون الوصول إلى الشبكة-v
, --verbose
- زيادة الإسهاب، يمكن استخدامها عدة مراتالخيارات المتاحة:
-T
, --no-transitive-opt
— لا تقم بإزالة الروابط الزائدة عن الحاجة-D
, --no-dev
— لا تقم بتضمين تبعيات التطوير-P
, --package-nodes
- استخدم عقد الحزمة بدلاً من عقد الميزة-w
, --workspace
- احتفظ بها داخل مساحة العمل-s
, --stdout
- طباعة ملف النقطة إلى stdout بدلاً من نشر xdot
-h
, --help
— لطباعة معلومات المساعدةأمثلة:
cargo hackerman tree rand 0.8.4
cargo hackerman tree serde_json preserve_order
إظهار بيان الصندوق أو الملف التمهيدي أو المستودع أو الوثائق
الاستخدام : show
cargo hackerman
CARGO_OPTS
[ -m
| -r
| -d
| -R
] CRATE
[ VERSION
]
خيارات الشحن:
--manifest-path
= PATH
— المسار إلى ملف Cargo.toml--frozen
- يتطلب تحديث Cargo.lock وذاكرة التخزين المؤقت--locked
- يتطلب تحديث Cargo.lock--offline
— تشغيل دون الوصول إلى الشبكة-v
, --verbose
- زيادة الإسهاب، يمكن استخدامها عدة مراتالخيارات المتاحة:
-m
, --manifest
- إظهار بيان الصندوق-r
, --readme
- إظهار الملف التمهيدي للصندوق-d
, --doc
— فتح عنوان URL للوثائق-R
، --repository
- المستودع-h
, --help
— لطباعة معلومات المساعدةأمثلة:
cargo hackerman show --repository syn