এসভিএন-এ প্রাক-রেভপ্রপ-চেঞ্জ হুক কী এবং আমি কীভাবে এটি তৈরি করব?


168

আমি সংগ্রহস্থল ব্রাউজারে একটি লগ মন্তব্য সম্পাদনা করতে চেয়েছিলাম এবং একটি ত্রুটি বার্তা পেয়েছি যে কোনও রেগপ্রপ-পরিবর্তন হুকটি সংগ্রহস্থলের জন্য বিদ্যমান নেই। একটি ভীতিজনক নাম থাকা ছাড়াও প্রাক-রেভপ্রপ-চেঞ্জ হুক কী এবং আমি কীভাবে এটি তৈরি করব?


16
এখন এই লিঙ্কটি দ্বিতীয়টি, ঠিক এই প্রশ্নের লিঙ্কের পরে :)
ইউলিসেস

লিঙ্কটি সম্পর্কে অতি পুরানো এসভিএনবুক ১.০ বাড়ে। বর্তমানেরটি 1.7 এবং 1.8 (রাত্রে): svnbook.red-bean.com/en/1.8
বহরেপ

উত্তর:


52

মূলত এটি একটি স্ক্রিপ্ট যা ভাণ্ডারগুলিতে রূপান্তরিত সম্পত্তিটি সংশোধন করার আগে চালু করা হয়েছিল, যাতে আপনি আপনার ভাণ্ডারটিতে কী ঘটছে তা আরও বিশদভাবে পরিচালনা করতে পারেন।

বিভিন্ন হুকের জন্য এসভিএন ডিস্ট্রিবিউটে টেমপ্লেট রয়েছে যা / হুক সাব-ডিরেক্টরিতে অবস্থিত (* .tmpl যা আপনাকে আপনার ওএসের উপর নির্ভর করে নাম পরিবর্তন করতে হবে, সক্রিয় করতে)।


2
সমস্ত নির্দেশাবলী হুক টেমপ্লেট স্ক্রিপ্টে রয়েছে। আপনার যদি svnsyncমিররটির জন্য হুকের প্রয়োজন হয় , তবে ডিফল্ট স্ক্রিপ্টটি পরিবর্তন করা দরকার, কারণ এটি কেবল এসএনএন: লগ-এ পরিবর্তনের অনুমতি দেয়। এসভিএনসিঙ্ক এর চেয়ে আরও বেশি পরিবর্তন করে, তাই exit 0সমস্ত সম্পত্তি পরিবর্তনের জন্য আমি কেবল সেখানে প্রবেশ করলাম (যেহেতু এটি কেবল আমার জন্য একটি আয়না) is
ম্যাট কনলি

... তারপরে এটিকে pre-revprop-changeএকই ডিরেক্টরি হিসাবে সংরক্ষণ করুন এবং এটি ওয়েব সার্ভার ব্যবহারকারীর জন্য (লিনাক্সে) কার্যকর করতে সক্ষম করুন।
মাতেং

209

উইন্ডোজের জন্য, এখানে একটি ব্যাচ ফাইলে একটি উদাহরণ রয়েছে যা কেবলমাত্র লগ বার্তায় (অন্য বৈশিষ্ট্য নয়) পরিবর্তনের অনুমতি দেয়:

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

37
সেখানে সংস্করণটির সাথে লিঙ্ক করতে পারত stackoverflow.com/questions/6155/… । আমি সেই হুক লিখেছি এবং কিছুক্ষণ আগে এটি এসভিএন ফোরামে পোস্ট করেছি। আমার ধারণা হুক মন্তব্যে আমার কিছু ক্রেডিট রাখা উচিত ছিল।
ফিলিবার্ট পেরুস

1
আমি এই স্ক্রিপ্টটি ভিজ্যুয়ালএসভিএন ২.০.৮ এবং কচ্ছপ এসভিএন ১.6.১১ এর সাথে ব্যবহার করছি এবং এটি দুর্দান্তভাবে কাজ করে।
মার্ক বাইক

27
আপনি ভিজ্যুয়ালএসভিএন সার্ভারে আপনার সংগ্রহস্থলের নামটি ডান ক্লিক করে এবং "সম্পত্তি ..." নির্বাচন করে ভিজুয়ালএসভিএন-এ হুক সম্পাদনা করতে পারেন। আপনি একটি "হুকস" ট্যাবটি দেখতে পাবেন। সেখানে আপনি বিভিন্ন ধরণের হুক উপলব্ধ দেখতে পাবেন। ডানটি নির্বাচন করুন, "সম্পাদনা করুন" এ ক্লিক করুন এবং এতে উপরের কোডটি আটকে দিন। আশা করি ভিজ্যুয়ালএসভিএন ব্যবহারকারীদের সহায়তা করবে!
চক লে বাট

আমার পক্ষে লাইনটি অক্ষম করার জন্য কাজ করেছে: যদি / আমি "% ক্রিয়া%" না করি == "এম" গানে ERROR_ACTION A অন্য উপায়ে, এটি কেবল পরিবর্তনের অনুমতিপ্রাপ্ত বলেছিল।
নাথান

6
উইন্ডোজগুলির জন্য দ্রুত এবং নোংরা পদ্ধতি হুকস নামে একটি খালি ফাইল তৈরি করা \ প্রাক-রেভপ্রপ-চেঞ্জ.ব্যাট
বেন ক্লার

18

লিনাক্স কোনও লগ মন্তব্য সংস্করণের অনুমতি দেওয়ার জন্য,

  • আপনার সংগ্রহস্থলের ডিরেক্টরিতে ফাইলটি pre-revprop-change.tmplসন্ধান করুনhooks
  • ফাইলটিকে একই ডিরেক্টরিতে অনুলিপি করে এর নামকরণ করুন pre-revprop-change
  • ফাইলটিকে কার্যকর করার অনুমতি দিন (সার্ভার ব্যবহারকারীর জন্য, যেমন www-data)

সম্পাদিত: (লিন্ডসকে ধন্যবাদ)

  • এরপরে আপনাকে যে 0ধরণের সম্পাদনার অনুমতি দিতে চান তার প্রস্থান করার জন্য একটি স্ক্রিপ্ট সম্পাদনা করতে হতে পারে।

এটি অপর্যাপ্ত ... একটি এখনও প্রস্থান মান যথাযথভাবে পরিবর্তন করা প্রয়োজন। তবে আমি দেখতে পেলাম যেভাবে সঠিক জায়গাটির পয়েন্টার হিসাবে ... অন্য কয়েকটি উত্তরের অভাব ছিল বা উইন্ডোজ-নির্দিষ্ট উত্তর দিয়েছিল। সুতরাং এই জন্য ধন্যবাদ।
লিন্ডস

1
আমি বেশ নিশ্চিত, আমার উবুন্টু লিনাক্স সংস্করণে অনুলিপি করা এবং অনুমতি দেওয়া যথেষ্ট ছিল। তবে আমি আর নিশ্চিত জানি না। আমি সেই অনুযায়ী উত্তরটি সম্পাদনা করেছি। ধন্যবাদ।
অ্যালোস হিমার

ঠিক আছে, আমি নিশ্চিত 2 দিন আগে চেষ্টা করেছিলাম এবং এই মন্তব্যটি যুক্ত করার পরে এটি আমার পক্ষে যেমনটি হয় তেমন কার্যকর হয়নি। সম্পাদনা সহ, যদিও এই উত্তরটি আমার পক্ষে কাজ করে।
লিন্ডস

11

এখানে উইন্ডোজ ক্রস-পোস্টের হুকের আসল উত্স সহ অনেকগুলি সাধারণ হুকস অফ সাবভার্সন হুকের প্রচলিত হুকের সাথে স্ট্যাক ওভারফ্লো প্রশ্নটির লিঙ্কটি রয়েছে pre-revprop-change

সময়ের সাথে সাথে তারা উন্নত হতে পারে বলে আপনার সেখানে উল্লেখ করা উচিত।


7

ধন্যবাদ # পেটমোরটেক

এবং আমি আপনার কোড যুক্ত করেছি যা "কেবল একই ব্যবহারকারী তার কোড পরিবর্তন করতে পারে"।

:: 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

4

হুক স্ক্রিপ্টের নামটি এতোটাই ভীতিজনক নয় যদি আপনি এটিকে মীমাংসা করে পরিচালনা করেন: এটি পূর্ববর্তী সম্পত্তি পরিবর্তন হুকের পুনর্বিবেচনার । সংক্ষেপে, এর উদ্দেশ্যpre-revprop-change হুক স্ক্রিপ্টের হ'ল রূপান্তরিত (পুনর্বিবেচনা) বৈশিষ্ট্যগুলির পরিবর্তনগুলি নিয়ন্ত্রণ করা এবং বিজ্ঞপ্তিগুলি প্রেরণ করা (উদাহরণস্বরূপ যখন সংশোধন সম্পত্তি পরিবর্তন করা হয় তখন ইমেল প্রেরণ করা)।

সাবভার্সনে 2 ধরণের বৈশিষ্ট্য রয়েছে:

  • সংস্করণযুক্ত বৈশিষ্ট্য (যেমন svn:needs-lockএবংsvn:mime-type ) যা ফাইল এবং ডিরেক্টরিতে সেট করা যেতে পারে,
  • unversioned (সংশোধন) বৈশিষ্ট্য (যেমন svn:logএবং svn:date) যে সংগ্রহস্থলের সেট করা পুনর্বিবেচনা

সংস্করণযুক্ত বৈশিষ্ট্যের ইতিহাস রয়েছে এবং সাধারণ ব্যবহারকারীরা যেগুলি পড়তে / লিখতে কোনও ভাণ্ডার অ্যাক্সেস পেয়ে থাকে তা দ্বারা পরিচালিত হতে পারে। অন্যদিকে, রূপান্তরিত বৈশিষ্ট্যের কোনও ইতিহাস নেই এবং বেশিরভাগ রক্ষণাবেক্ষণের উদ্দেশ্যে পরিবেশন করা হয়। উদাহরণস্বরূপ, আপনি যদি কোনও সংশোধন করেন তবে তা অবিলম্বে svn:dateআপনার প্রতিশ্রুতিবদ্ধতার ইউটিসি সময়, svn:authorআপনার ব্যবহারকারীর নাম এবং svn:logআপনার প্রতিশ্রুতি লগ বার্তা সহ (যদি আপনি কোনও নির্দিষ্ট করে থাকেন) পান।

যেমন আমি ইতিমধ্যে উল্লেখ করেছি, pre-revprop-changeহুক স্ক্রিপ্টের উদ্দেশ্য হ'ল সংশোধন বৈশিষ্ট্যগুলির পরিবর্তনগুলি নিয়ন্ত্রণ করা। আপনি চান না যে যার সংগ্রহস্থলটিতে অ্যাক্সেস রয়েছে এমন প্রত্যেককেই সমস্ত পুনর্বিবেচনা বৈশিষ্ট্য সংশোধন করতে সক্ষম করা উচিত, তাই পুনর্বিবেচনা বৈশিষ্ট্যগুলি পরিবর্তন করা ডিফল্টরূপে নিষিদ্ধ। ব্যবহারকারীদের বৈশিষ্ট্য পরিবর্তন করতে অনুমতি দিতে, আপনাকে তৈরি করতে হবেpre-revprop-change হুক ।

সবচেয়ে সহজ হুক মাত্র এক লাইন ধারণ করতে পারে: exit 0। এটি কোনও অনুমোদিত ব্যবহারকারীকে যে কোনও সংশোধন সম্পত্তি পরিবর্তন করার অনুমতি দেবে এবং এটি বাস্তব পরিবেশে ব্যবহার করা উচিত নয়। উইন্ডোজে, আপনি pre-revprop-changeহুকের মধ্যে কিছু যুক্তি প্রয়োগ করতে ব্যাচ স্ক্রিপ্ট বা পাওয়ারশেল-ভিত্তিক স্ক্রিপ্ট ব্যবহার করতে পারেন ।

এই পাওয়ারশেল স্ক্রিপ্টটি 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

এই ব্যাচের স্ক্রিপ্টটি শুধুমাত্র "এসভিএনএমজিআর" ব্যবহারকারীকে পুনর্বিবেচনা বৈশিষ্ট্যগুলি পরিবর্তন করতে দেয়:

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

exit 1
goto :eof

:label1
exit 0

2

পিসি ব্যবহারকারীদের জন্য: উইন্ডোজ সার্ভার ম্যাচিংয়ে ব্যবহার করার সময় .bat এক্সটেনশনটি আমার পক্ষে কাজ করে না। জ্যাঙ্গো রেইনহার্টের পরামর্শ অনুসারে আমি ভিজ্যুয়ালএসভিএন ব্যবহার করেছি এবং এটি একটি সিএমডি এক্সটেনশান সহ একটি হুক তৈরি করেছে।


0
  1. সাবফোল্ডার "হুকস" এর মধ্যে এসভিএন রেপো ডিরেক্টরিতে যান, যেমন "ডি: \ এসভিএন ooks হুকস \"
  2. খালি ফাইলটি "প্রাক-রেভপ্রপ-চেঞ্জ.ব্যাট" তৈরি করুন
  3. ফাইলটিতে "প্রস্থান 0" লিখুন ("" ছাড়াই) এবং এটি সংরক্ষণ করুন
  4. উপভোগ করুন :)

(এই সমাধানটির অবশ্যই অসুবিধাগুলি রয়েছে, যেহেতু কিছুই চেক / নিষিদ্ধ নেই But তবে আমার ক্ষেত্রে - একটি স্থানীয় রেপো যা আমি কেবল ব্যবহার করছি - এটি কাজ করে বলে মনে হয়))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.