يعمل البرنامج النصي بعد الالتزام SVN من سطر الأوامر ، ولكن ليس عند الارتباط بالملفات (الملفات) إلى SVN

StackOverflow https://stackoverflow.com/questions/2555098

سؤال

لديّ خطاف ما بعد الالتزام في SVN يعمل بشكل جيد من سطر الأوامر عندما أركض

env - ./foo.sh /path/to/svn/repos/ 12345

ولكن عندما يتم استدعاء البرنامج النصي من SVN ، لا يبدو أنه يعمل.

ما أقوم به بشكل أساسي هو التحقق من الملفات الملتزمة وإذا تم تعديل ملف معين ، فأنا أقوم بتصدير SVN إلى مشاركة الشبكة. يعمل بشكل جيد من سطر الأوامر.

البرنامج النصي بعد الالتزام هو كما يلي:

#!/bin/sh

REPOS="$1"
REV="$2"

CHANGED=`/usr/bin/svnlook changed -r "$REV" "$REPOS"`
SOURCE="svn+ssh://localhost/path/to/svn/repos/somefile.zip"
DEST="/mnt/build/somefile-r$REV.zip"

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        `/usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST`
fi

exit 0

هل هناك طريقة لإخراج أي رسائل خطأ إلى ملف عند تشغيل البرنامج النصي ، أو على وجه التحديد خط تصدير SVN (حيث أعتقد أنه قد تكون هناك مشكلة)؟

هل كانت مفيدة؟

المحلول

يتم التخلص من الإخراج القياسي من البرنامج النصي الخطاف ، ولكن يعود الخطأ القياسي إلى العميل ، على الأقل في الإصدارات الحديثة من التخريب. اعتقدت أن الأمر كان هكذا لفترة من الوقت ، لكن كتاب SVN 1.4 يقول أن الإخراج يتم تجاهله ، لذلك قد ترغب في التحقق من أنك تقوم بتشغيل إصدار محدث من الخادم-رؤية الخطأ القياسي الدفق هو وسيلة جيدة للحصول على الإنذار المبكر من أنواع الخطأ الشائعة.

لإرسال الإخراج من أمر إلى ملف ، وتضمين إخراج الخطأ القياسي في الملف أيضًا للحفاظ على كل شيء في مكان واحد ، قم بعمله

command >/path/to/logfile 2>&1

يستخدم >> عوضا عن > لإلحاق الملف:

command >>/path/to/logfile 2>&1

نظرًا لأن إخراج الخطأ القياسي يتم إرساله مرة أخرى إلى عميل SVN ، يمكنك أيضًا تمرير المعلومات من الإخراج القياسي على هذا النحو ، إما لأمر واحد ،

command 1>&2

أو للنص بأكمله ، عن طريق وضع

exec 1>&2

في الجزء العلوي من البرنامج النصي.

في لمحة ، أرى مشكلة واحدة في البرنامج النصي الخاص بك: على افتراض أن الخلفية على خط تصدير SVN ليست قطعة أثرية للعلامة ، يجب عليك إزالتها. (سيقومون بتنفيذ أمر التصدير الذي كتبته ، ثم يأخذون إخراجه ، وتنفيذ هذا الإخراج كأمر آخر - بالتأكيد ليس ما تقصده.)

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        /usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST 1>&2
fi

(لم أكن أعرف عن بناء جملة اختبار الطوابع المزدوجة في باش ، هذا اكتشاف جديد لطيف بالنسبة لي!)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top