سؤال

أقوم بتشغيل 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+(.+)$/ يجب أن تعمل بشكل جيد.

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