যদি কোনও প্যাচকে বিপরীত করা সফল হয় তবে তার অর্থ কি সর্বদা প্যাচটি পুরোপুরি প্রয়োগ করা হয়েছিল?


9

'দুটি ফাইল বা ফোল্ডারটি ইতিমধ্যে প্যাচ করা হয়েছে কিনা তা পরীক্ষা করুন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

সোর্স কোডটি কি আপনার নিয়ন্ত্রণে আছে, আপনি কি গ্যারান্টি দিতে পারবেন যে সমস্ত প্যাচগুলি সর্বদা ঠিক একবার প্রয়োগ করা হবে?
রোয়াইমা

1
@roamia প্যাচ এবং স্ক্রিপ্ট আমার নিয়ন্ত্রণে আছে। শুধুমাত্র আমার স্ক্রিপ্ট প্যাচ প্রয়োগ করা হবে।
জয়

আমি মনে করি একটি প্রারম্ভিক পয়েন্ট এবং এমন একটি প্যাচ প্রস্তুত করা সম্ভব যা সামনের এবং বিপরীত উভয় দিক থেকেই পুরোপুরি সফল হবে।
জেসেন

উত্তর:


3

এই ভিন্নতার সাথে:

diff --git a/bar b/bar
new file mode 100644
index 0000000..e69de29
diff --git a/foo b/foo
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/foo
@@ -0,0 +1 @@
+foo

এটা ঘতছে:

$ cd /tmp/test
$ patch --forward -i foobar.patch
patching file bar
patching file foo
$ echo $?
0
$ rm bar
$ patch --dry-run --reverse --force -i foobar.patch
The next patch, when reversed, would delete the file bar,
which does not exist!  Applying it anyway.
checking file bar
checking file foo
$ echo $?
0

সুতরাং আপনার প্রশ্নের উত্তর না হয়।


এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। আমি খুঁজে পেয়েছি যে ব্যবহারের মাধ্যমে আমি এই মামলার সমাধান করতে পারি --posixকারণ এটি কোনও ত্রুটি সেট করবে যখন প্যাচ করার জন্য কোনও ফাইল নেই। তবে পসিক্স মোড ব্যবহার করে কোনও ত্রুটি সেট করা হবে না যদি কোনও ফাইল মোছার জন্য প্যাচ থেকে পৃথক সামগ্রী থাকে। উদাহরণস্বরূপ যদি আমি সেই বিপরীত কমান্ডটি চালিত করি --posixএবং বার ফাইলটিতে কিছু ডেটা থাকে তবে পসিক্স মোডে ফাইলটি মোছা হবে না এবং কোনও ত্রুটি ঘটবে না। সুতরাং আমার ফিক্সটি পোস্টিক্স মোডের সাথে এবং ছাড়া উভয়ই চালিত হয় এবং যদি উভয়ই ঠিক থাকে তবে আমি ধরে নিই প্যাচটি সফলভাবে প্রয়োগ হয়েছিল। এটি প্রতিফলিত করতে আমি আমার প্রশ্ন আপডেট করব।
জয়

এটি উপস্থিত --posixহ'ল এটি নিরাময় নয়-যা আমি ভেবেছিলাম। যদি কোনও প্যাচ দ্বারা কোনও ফাইল মুছে ফেলা হয় এবং আমি রান করি --posix --reverseতবে এটির ত্রুটি রয়েছে যে ফাইলটির অস্তিত্ব নেই। আমি আগামীকাল এই আরও দেখতে হবে।
জে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.