ما هو خطاف التغيير المسبق في SVN، وكيف أقوم بإنشائه؟

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

  •  10-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

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

وهناك نماذج في توزيع الطاق SVN لمختلف السنانير، وتقع في الدليل الفرعي / السنانير (* .tmpl التي لديك لتحرير وإعادة تسمية اعتمادا على نظام التشغيل الخاص بك، لتنشيط).

نصائح أخرى

لويندوز، وهنا تصل إلى مثال ملف دفعة الذي يسمح فقط تغييرات على رسالة السجل (لا خصائص أخرى):

http://ayria.livejournal.com/33438.html

وأساسا نسخ رمز أدناه في ملف نصي وتسميته pre-revprop-change.bat وحفظه في دليل فرعي \hooks عن المخزون الخاص بك.

@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5

:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME

:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION

:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY

goto :eof

:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT

:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1

لكي يسمح Linux بإصدار تعليق السجل،

  • حدد موقع الملف pre-revprop-change.tmpl في ال hooks دليل المستودع الخاص بك
  • انسخ الملف إلى نفس الدليل، وأعد تسميته إلى pre-revprop-change
  • منح إذن التنفيذ للملف (لمستخدم الخادم، على سبيل المثال. www-data)

تم التعديل: (بفضل ليند)

  • بعد ذلك قد تضطر إلى تعديل البرنامج النصي لإرجاع قيمة الخروج 0 لنوع التعديلات التي تريد السماح بها.

وهنا هو الرابط إلى مسألة تجاوز سعة مكدس مع العديد من السنانير المشتركة الأنواع الشائعة من التخريب خطاف ، بما في ذلك المصدر الأصلي للربط pre-revprop-change ويندوز عبر نشرها هنا.

ويجب عليك الرجوع هناك لأنها قد تحصل على تحسين مرور الوقت.

وبفضل #patmortech

وأضاف I التعليمات البرمجية التي "لا يمكن إلا أن نفس المستخدم تغيير كود له".

:: Only allow editing of the same user.
for /f "tokens=*" %%a in ( 
'"%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %revision% %repository%') do ( 
set orgAuthor=%%a
)
if /I not "%userName%" == "%orgAuthor%" goto ERROR_SAME_USER

اسم البرنامج النصي للربط ليس مخيفًا جدًا إذا تمكنت من فك تشفيره:إنه ربط تغيير خاصية المراجعة المسبقة.باختصار الهدف pre-revprop-change البرنامج النصي للخطاف هو التحكم في تغييرات الخصائص (المراجعة) التي لم يتم إصدارها وإرسال الإشعارات (على سبيل المثال.لإرسال بريد إلكتروني عند تغيير خاصية المراجعة).

هناك نوعان من الخصائص في Subversion:

  • خصائص الإصدار (على سبيل المثال svn:needs-lock و svn:mime-type) التي يمكن تعيينها على الملفات والدلائل،
  • خصائص (مراجعة) غير معدلة (على سبيل المثال. svn:log و svn:date) التي تم تعيينها على المستودع التنقيحات.

الخصائص التي تم إصدارها لها تاريخ ويمكن معالجتها بواسطة المستخدمين العاديين الذين لديهم حق الوصول للقراءة/الكتابة إلى المستودع.ومن ناحية أخرى، فإن الخصائص التي لم يتم تحويلها ليس لها أي تاريخ وتخدم في الغالب أغراض الصيانة.على سبيل المثال، إذا قمت بإجراء مراجعة، فسيتم الحصول عليها على الفور svn:date مع التوقيت العالمي المنسق (UTC) لالتزامك، svn:author مع اسم المستخدم الخاص بك و svn:log مع رسالة سجل الالتزام الخاصة بك (إذا قمت بتحديد أي منها).

كما حددت بالفعل، والغرض من pre-revprop-change البرنامج النصي الخطاف هو التحكم في تغييرات خصائص المراجعة.لا تريد أن يتمكن كل من لديه حق الوصول إلى المستودع من تعديل جميع خصائص المراجعة، لذا فإن تغيير خصائص المراجعة محظور بشكل افتراضي.للسماح للمستخدمين بتغيير الخصائص، عليك إنشاء pre-revprop-change خطاف.

يمكن أن يحتوي الخطاف الأبسط على سطر واحد فقط: exit 0.سيسمح لأي مستخدم تمت مصادقته بتغيير أي خاصية مراجعة ولا ينبغي استخدامه في بيئة حقيقية.في نظام التشغيل Windows، يمكنك استخدام البرنامج النصي الدفعي أو البرنامج النصي المستند إلى PowerShell لتنفيذ بعض المنطق بداخله pre-revprop-change خطاف.

يسمح برنامج PowerShell النصي هذا بالتغيير svn:log الخاصية فقط وترفض رسائل السجل الفارغة.

# Store hook arguments into variables with mnemonic names
$repos    = $args[0]
$rev      = $args[1]
$user     = $args[2]
$propname = $args[3]
$action   = $args[4]

# Only allow changes to svn:log. The author, date and other revision
# properties cannot be changed
if ($propname -ne "svn:log")
{
  [Console]::Error.WriteLine("Only changes to 'svn:log' revision properties are allowed.")
  exit 1
}

# Only allow modifications to svn:log (no addition/overwrite or deletion)
if ($action -ne "M")
{
  [Console]::Error.WriteLine("Only modifications to 'svn:log' revision properties are allowed.")
  exit 2
}

# Read from the standard input while the first non-white-space characters
$datalines = ($input | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
  # Log message is empty. Show the error.
  [Console]::Error.WriteLine("Empty 'svn:log' properties are not allowed.")
  exit 3
}

exit 0

يسمح هذا البرنامج النصي الدفعي لمستخدم "svnmgr" فقط بتغيير خصائص المراجعة:

IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )

exit 1
goto :eof

:label1
exit 0

لمستخدمي أجهزة الكمبيوتر الشخصية: لم تمديد الخفافيش لا تعمل بالنسبة لي عند استخدامها على Windows Server ماتشينج. كنت VisualSvn كما اقترح جانغو راينهارت، وأنه خلق ربط مع ملحق .CMD.

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