'দুটি ফাইল বা ফোল্ডারটি ইতিমধ্যে প্যাচ করা হয়েছে কিনা তা পরীক্ষা করুনpatch
' এবং ' ইতিমধ্যে প্রয়োগ হওয়া প্যাচটি এড়িয়ে যাওয়ার সময় 0 ফিরিয়ে দিন ' তবে দুটি সন্তুষ্টির উত্তর ছিল না , এটি দুটি প্রশ্নের ক্ষেত্রে স্পর্শ করা হয়েছে ।
আমি একটি স্ক্রিপ্ট লিখছি এবং প্যাচের জন্য নিম্নলিখিতটি পরীক্ষা করতে চাই:
সম্পূর্ণ প্রয়োগ: চালিয়ে যান
আংশিক প্রয়োগ: প্রস্থান
প্রয়োগ করা হয়নি: এটি যদি সফলভাবে প্রয়োগ করা যায় তবে এটি করুন এবং চালিয়ে যান, অন্যথায় প্রস্থান করুন
আংশিক প্রয়োগ হওয়া সমস্যাটি সমস্যাটি পরিচালনা করছে:
mkdir test && cd test
cat << EOF > foobar.patch
--- /dev/null
+++ foo
@@ -0,0 +1 @@
+foo
--- /dev/null
+++ bar
@@ -0,0 +1 @@
+bar
EOF
patch --forward -i foobar.patch
rm foo
সুতরাং বার বিদ্যমান কিন্তু foo না কারণ কোনও এক সময় এটি সরানো হয়েছিল। এখন যদি আমি শুকনো-চালনায় প্যাচটি সামনের দিকে প্রয়োগ করি তবে এটি সফলভাবে প্রয়োগ করা হয়নি বলে প্রস্থান কোডটি 1।
$ patch --dry-run --forward --force -i foobar.patch
checking file foo
The next patch would create the file bar,
which already exists! Skipping patch.
1 out of 1 hunk ignored
$ echo $?
1
এটি প্যাচ সম্পূর্ণরূপে প্রয়োগ করা হয়েছে কিনা তা আমাকে জানায় না, এটি শুকনো রানকে ব্যর্থ করেছে। আমি জানি না কেন এটি স্ট্যাকওভারফ্লো উত্তর হিসাবে সঠিক হিসাবে চিহ্নিত হয়েছে। আমি বিপরীত চেষ্টা করেছি কিন্তু যেহেতু এটি একটি অ-ইন্টারেক্টিভ স্ক্রিপ্ট এটি কেবল শক্তি দিয়ে কাজ করেছে:
$ patch --dry-run --reverse --force -i foobar.patch
The next patch, when reversed, would delete the file foo,
which does not exist! Applying it anyway.
checking file foo
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED
checking file bar
$ echo $?
1
সুতরাং এটি কি সর্বদা ধরে রাখে যে আমি যদি শুকনো দৌড়ে কোনও প্যাচকে জোর করে পাল্টানোর চেষ্টা করি এবং এটি সফল হয় যে প্যাচটি পুরোপুরি প্রয়োগ করা হয়েছে, এবং যদি এটি ব্যর্থ হয় যে এটি পুরোপুরি প্রয়োগ করা হয়নি (বা আদৌ প্রয়োগ করা হয়নি)? কারণ যদি তাই হয় তবে আমি এর মতো কিছু করতে পারি
patch --dry-run --reverse --force -i foobar.patch ||
(patch --dry-run --forward --force -i foobar.patch &&
patch --forward --force -i foobar.patch) ||
exit 1