كيف يمكنني مطابقة إخراج Svnlook في بيرل؟
سؤال
أقوم بتشغيل SVN على خادم Windows، وأنا أستخدم البرامج النصية PERL لتنفيذ بعض السنانير المسبقة. أرى رسالة الخطأ التالية من TortoisesVN:
خطأ !! scripterror !! لا يمكن تحليل الخط: _U المسار / إلى / الملفات / الجذع
وهذا هو البرنامج النصي:
foreach my $line (`$svnlook changed -t "$txn" "$repos"`)
{
chomp($line);
if ($line !~ /([AUD]).\s\s(.+)$/)
{
print STDERR "!!Script Error!! Can't parse line: $line\n";
exit(1);
}
else
{
# perform some actions
}
}
exit(0);
حاولت استبدال Regex مع أشياء مثل /_([AUD]).\s\s(.+)$/
مع عدم وجود نجح - حاولت حتى /.*([AUD]).\s\s(.+)$/
.
أفكار؟ اقتراحات؟
المحلول
بدون إلقاء نظرة على وثائق SVN، أظن التخمين فقط: في الإخراج فوق مساحة واحدة فقط تظهر بينك والمسار الفعلي، ولكن لديك \s\s
في كل ما تبذلونه من regexes.
عدل] حسنا، الآن كان لدي نظرة في مرجع svnlook. وبعد أولا، فشل Regex الخاص بك في الإصدارات الحالية من svnlook، حيث يتم تحديد الإخراج على النحو التالي:
- أول عمودين يحتويان على الحالة
- يبدأ المسار في العمود الخامس
- قد تكون الحالة واحدة من (تمت إضافتها)، U (المحتوى الذي تم تغيير المحتوى)، D (المحذوف)، _u (تغييرات الخصائص)، و UU (تم تغيير خصائص المحتوى +)
لذلك، يجب أن تكون قادرا على التطابق مع شيء مثل ^([_AUD]+)\s+(.+)$
. وبعد يمكن للمرء الحصول على مزيد من المحدد، ولكن هذا ليس ضروريا.
إذا لم يتطابق هذا، يرجى توجيه إخراج الأمر إلى ملف، ونشر الجزء ذي الصلة هنا.
نصائح أخرى
if ($line !~ /^_?([AUD])\s+(.+)$/
يجب أن تعمل بشكل جيد.