আর্টিয়ামের অনুরূপ সমাধান ব্যবহার করে আমি শেষ পর্যন্ত এটি সমাধান করেছি।
পদক্ষেপ 1: প্যাচটি বিস্তৃত করুন প্রচুর পৃথক প্যাচে, প্রতিটি কুঁচকের জন্য একটি।
এটি করার জন্য আমি এই স্ক্রিপ্টটি ব্যবহার করেছি:
#!/usr/bin/python2
import sys
header = []
writing_header = False
patchnum = 0
patch = open(sys.argv[1], "r")
out = open("/dev/null", "w")
for line in patch.readlines():
if line.startswith("diff"):
header = []
writing_header = True
if line.startswith("@@"):
out.close()
out = open(str(patchnum) + ".diff", "w")
patchnum += 1
writing_header = False
out.writelines(header)
if writing_header:
header.append(line)
else:
out.write(line)
out.close()
ব্যবহারের উদাহরণ:
$ cd directory_containing_patch
$ mkdir foo
$ cd foo
$ explode.py ../huge_patch.diff
এটি বর্তমান ডিরেক্টরিটি 0.diff 1.diff এবং cetera নামক ফাইলগুলির সাথে পপুলেট করবে।
পদক্ষেপ 2: প্রতিটি প্যাচ প্রয়োগ করুন, ইতিমধ্যে প্রয়োগ করা প্যাচগুলি ত্যাগ করুন।
এটি করার জন্য আমি এই স্ক্রিপ্টটি ব্যবহার করেছি:
#!/bin/bash
if [[ $# -ne 1 || ! -d "${1}/" ]]; then
echo "Usage: $0 dirname"
exit 1
fi
find "$1" -name \*.diff | while read f; do
OUTPUT=$(patch -s -p1 -r- -i"$f")
if [ $? -eq 0 ]; then
rm "$f"
else
if echo "$OUTPUT" | grep -q "Reversed (or previously applied) patch detected!"; then
rm "$f"
fi
fi
done
ব্যবহারের উদাহরণ:
$ cd directory_containing_code
$ apply_patches.bash directory_containing_patch/foo
এটি পূর্বে উত্পন্ন যেকোনও প্যাচগুলি মুছবে যা পরিষ্কারভাবে প্রয়োগ হয় বা ইতিমধ্যে প্রয়োগ করা হয়েছে। যে কোনও প্যাচ বাকি রয়েছে foo
তা প্রত্যাখ্যান করা হয় যা ম্যানুয়ালি পরীক্ষা করা এবং মার্জ করা দরকার।