Cargo: لا يقوم "اختبار الشحن" بالكتابة فوق عنصر البناء في الهدف / التصحيح في سلاسل الأدوات الحديثة

تم إنشاؤها على ١١ أكتوبر ٢٠١٨  ·  3تعليقات  ·  مصدر: rust-lang/cargo

يرجى التحقق من المشروع المصغر لإعادة الإنتاج: https://github.com/skletsun/cargo_feature_dylib_issue.
توجد مساحة عمل تحتوي على مكتبة ديناميكية ومشروع يعتمد عليها. المكتبة لديها ميزة. تكمن المشكلة في أن نفس سيناريو البناء والاختبار لا يعمل مع سلاسل الأدوات الحديثة:

سيناريو العمل:
1) cargo +1.26.2 build --features feature
2) cargo +1.26.2 test --all -- --nocapture

لا يعمل:
1) cargo +1.28.0 build --features feature
2) cargo +1.28.0 test --all -- --nocapture

ملاحظاتي الحالية (تم اختبارها على OSX): سيناريو العمل - في الخطوة (1) يتم إنشاء المكتبة libcargo_check.dylib داخل الدليل target/debug/deps ثم نسخها إلى target/debug . في الخطوة (2) يتم إعادة بنائه (بسبب الميزة المفقودة) ، يتم نسخه أيضًا (الكتابة فوق الميزة القديمة) إلى target/debug ومن ثم يتم تنفيذ التطبيق التجريبي المرتبط بالمكتبة المشتركة في target/debug . عندما أحاول فعل الشيء نفسه مع أحدث toolchain (سيناريو لا يعمل) ، فإنه يتصرف بنفس الطريقة تقريبًا باستثناء أنه في الخطوة (2) يتم إعادة بناء المكتبة إلى target/debug/deps ولكن لم يتم نسخها إلى target/debug و يتم تنفيذ التطبيق التجريبي على الإصدار القديم من المكتبة الديناميكية في target/debug . وإذا حذفت يدويًا libcargo_check.dylib القديم في target/debug فإن cargo +1.28.0 test --all -- --nocapture سيعمل كما هو متوقع لأن التطبيق التجريبي يتم تنفيذه على المكتبة الديناميكية الموجودة في target/debug/deps .

يعد مشروع Rust الأصلي جزءًا من مشروع معقد يتضمن Java ، لذلك يتم بناء المشروع بالكامل باستخدام Maven ، والذي يقوم بدوره بتنفيذ البضائع للبناء والاختبار في بعض الترتيب. أتوقع أن يتصرف cargo test بنفس الطريقة كما في الإصدارات السابقة من سلاسل الأدوات.

لقد اختبرته مقابل إصدارات قليلة من toolchain ويمكنني القول أنه يعمل مع 1.26.2 و 1.27.2 ، لكنه لا يعمل مع 1.28.0 و 1.29.1.

شكرا لك مقدما!

التعليق الأكثر فائدة

شكرًا للتحقيق في هذاehuss! الخيار (2) يبدو أنه طريقة رائعة لإصلاح هذا الأمر بالنسبة لي ، لا أعتقد بالتأكيد أنه يجب أن يكون لدينا الكثير من التداعيات من تبديل الأسبقية هناك ويمكننا دائمًا المتابعة (3) بشكل مستقل لاحقًا إذا لزم الأمر

ال 3 كومينتر

ccehuss ، أعتقد أننا كنا نناقش هذا مؤخرًا على خلاف ، أليس كذلك؟ في هذا هو السلوك المتوقع حاليًا ، لكنه سلوك يمكننا بالفعل إصلاحه! (وربما ينبغي لمخرجات dylib على الأقل)

أعتقد أنه كان في # 6131 حيث ناقشنا أنه تم تغيير الارتقاء.

هناك عدة أشياء هنا:

  • أوامر البناء / الاختبار / التشغيل لا تنظف الدليل الهدف. لا تهم القطع الأثرية من عمليات التشغيل السابقة عادةً ، ولكنها مهمة في بعض الأحيان بالنسبة إلى الإرادات المشتركة.
  • يشتمل مسار بحث dylib على الجذر الهدف dir و deps target dir ، والجذر الأول له الأسبقية (تبديلهما هنا يعمل على إصلاح هذه المشكلة)

عندما غيّرنا الارتقاء ، كان هناك قلق من أنه قد يكون هناك مشاكل ، لكن في ذلك الوقت لم نتمكن من التفكير في أي شيء محدد. يبدو أننا وجدنا واحدة! 😄

أرى ثلاثة حلول ممكنة:

  1. قم بتنظيف الدليل الهدف الأساسي قبل تشغيل كل أمر. الآن هي أرض نفايات. ومع ذلك ، لا أحب صوت هذه الفكرة.
  2. اقلب ترتيب مسار dylib المذكور أعلاه.
  3. انسخ جميع المكتبات القابلة للمشاركة (dylib / cdylib) من التبعيات إلى الهدف.

ليس لدي أي تفضيل. 2 سهل للغاية ، لكني لا أعرف الآثار المترتبة. 3 أصعب قليلاً ، لكنه ممكن.

شكرًا للتحقيق في هذاehuss! الخيار (2) يبدو أنه طريقة رائعة لإصلاح هذا الأمر بالنسبة لي ، لا أعتقد بالتأكيد أنه يجب أن يكون لدينا الكثير من التداعيات من تبديل الأسبقية هناك ويمكننا دائمًا المتابعة (3) بشكل مستقل لاحقًا إذا لزم الأمر

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات