কীভাবে একটি ভিন্ন ক্ষেত্রে সরানো রেখাগুলি উপেক্ষা করবেন


11

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

যাইহোক, এটি যে কারও ভাবা যায় তার চেয়ে কঠিন হতে পারে, কারণ সরঞ্জামটি importঅর্ধ-এলোমেলোভাবে অর্পিত উপায়ে (অর্ডার , ফাংশন ঘোষণার মতো ...) অর্ডার বিবেচনা করে না এমন লাইনের আউটপুট দেয় । এর কারণে, আউটপুটটি diffঅনেকগুলি পরিবর্তনের সাথে বিশৃঙ্খলাযুক্ত যে বাস্তবে কেবল লাইন একই ফাইলের অন্য অবস্থানে চলে গেছে।

এই পদক্ষেপগুলি উপেক্ষা করার জন্য কী কী উপায় আছে এবং কেবলমাত্র যুক্ত করা বা সরানো রেখাগুলি কেবল আউটপুট দেয়?


সম্ভবত কোনও নির্দিষ্ট ক্রিয়াকলাপ তৈরি এবং আমদানির ঘোষণা আমদানি করার জন্য আপনার সরঞ্জামকে পরিবর্তন করা সহজ (উদাহরণস্বরূপ অভিধানে, আপনার ভাষায় যদি সম্ভব হয়) আদেশে?
ড্যানিয়েল বেক

@ ড্যানিয়েল বেক: নীচে গিলসের জবাব সম্পর্কে আমার মন্তব্য দেখুন।
dnadlinger

প্রাচীন বিষয়, কিন্তু নীচের মন্তব্য সংক্ষেপ, কিভাবে এই হবে diffটুল কোডে নির্দেশাবলীর অবৈধ বেশী থেকে বৈধ প্যাচসমূহ আলাদা, যাতে হিসাবে পাবে না ব্যাপার, এবং ক্ষেত্রে যেখানে এই সত্য নয় সীমাবদ্ধ (আমদানি, কার্যকারিতা ও ক্লাস ঘোষণা, ইত্যাদি)?
জোল

@ জোউল: উত্তরটি কেবলমাত্র আমি জানতাম যে জেনারেটরের যে পরিবর্তনগুলি আমাকে পরীক্ষা করতে হয়েছিল তা লাইনের ক্রম পরিবর্তন করার সাথে সম্পর্কিত কোনও বাগ প্রবর্তন করবে না। অবশ্যই, সাধারণ ক্ষেত্রে মিথ্যা-ধনাত্মকতা এড়াতে আপনার টার্গেট ভাষার জন্য পার্সারের উপর ভিত্তি করে একটি সরঞ্জাম প্রয়োজন (বা কেবল আপনার জেনারেটরের জন্য একটি বিস্তৃত পরীক্ষার স্যুট), তবে এটি ছাড়াও এটি দ্রুত ওয়ান-অফ চেক বলে মনে করা হত কোড পর্যালোচনা।
dnadlinger

উত্তর:


2

আপনি একটি সাধারণ ডিফ করতে পারেন, ফলাফলটি কোথাও সংরক্ষণ করতে পারেন (অন্য ডিফ এড়ানোর জন্য), উভয় সংস্করণে লাইনটি লুপ করুন, তারপরে সেগুলি অপর পক্ষ থেকে সরিয়ে ফেলুন।

এটি ওয়ার্কিং কোডের জন্য একটি পৃথক প্রকল্প তৈরি করেছে । কোড.


আমি নিশ্চিত যে এটি ঠিক কী করার কথা, তবে এটি পছন্দসই ফলাফলগুলি বলে মনে হচ্ছে না। আমি যেমন প্রশ্নটি বুঝতে পেরেছি, কোডের দুটি উদাহরণ থেকে /tmp/oldএবং /tmp/newকোনও ভিন্ন ফলাফল চাওয়া হবে না কারণ কেবল লাইনগুলি প্রায় সরানো হয়েছে। এই কোডটি ফলাফল দেয় না।
ইলারি কাজস্তে

কোড স্থির।
l0b0

অনেক আগে আমি উপরে উল্লিখিত মার্জিং প্রক্রিয়াটি শেষ করার সাথে সাথে উত্তরটি পরীক্ষা করা হয়নি তবে কোডটিতে এক নজরে দেখে মনে হচ্ছে এটি কাজ করতে পারে।
dnadlinger

4

আপনি প্রথমে বাছাই করার চেষ্টা করতে পারেন। কিছুটা এইরকম:

sort file-a > s-file-a
sort file-b > s-file-b
diff s-file-a s-file-b

প্রক্রিয়া প্রতিস্থাপনের সাথে বাশ (এবং zsh) এক লাইনে এটি করতে পারে

diff <(sort file-a) <(sort file-b)

এটি একটি বিকল্প হতে পারে, তবে উত্পন্ন ভিন্নতাগুলি তখন খুব কার্যকর হবে না, কারণ আমি সমস্ত লাইন নম্বর এবং প্রসঙ্গে তথ্য
হারাব

এমনকি যদি আমি এখনও আরও ভাল সমাধানের জন্য আশা করি তবে আমি যে ব্যাচের উপর কাজ করেছিলাম তা ব্যাচ যাচাই করার জন্য এই পদ্ধতির সাথে গিয়েছিলাম।
dnadlinger

2
আমি পূর্বেই জানতে পারি যেখানে এটি কিছু পরিবর্তন মিস করে। কখনও কখনও বিষয়গুলি অর্ডার করে, কখনও কখনও তা করে না। আপনি সমস্ত প্রসঙ্গ বাতিল করুন।
ধনী হোমোলকা

অর্ডার রিফ্যাক্টরের জন্য যেখানে আমি নিশ্চিত করতে চেয়েছিলাম যে যা কিছু বিদ্যমান ছিল তা এখনও আছে কি না, এটি আমার প্রয়োজন ঠিক তাই ছিল।
ntrrobng

0

দেখে মনে হচ্ছে আপনার সরঞ্জামটির উপর নিয়ন্ত্রণ রয়েছে। তারপরে আউটপুটটিকে অনুমানযোগ্য করে তুলুন: একটি অর্ধ-এলোমেলো ক্রমে ঘোষণাগুলি নির্গমন করার পরিবর্তে (বলুন) বর্ণানুক্রমিক ক্রমটিকে শেষ অবলম্বন হিসাবে ব্যবহার করুন। এটি কেবলমাত্র ডিফগুলি থেকে অকেজো ক্রাফট অপসারণের সুবিধা পাবে না, তবে সেই যন্ত্রটির আউটপুট একটি মানুষের জন্য পড়া এবং যাচাই করা আরও সহজ করে তোলে।


দুঃখিত, তবে এই উত্তরটি আমাকে মোটেও সহায়তা করে না - যদি এটি এত সহজ হত তবে আমি এখনই এটিকে পরিবর্তন করব। তদুপরি, আমি বর্তমানে জেনারেটরটি মূলত একটি প্রকল্প থেকে পরিবর্তনগুলি একত্রিত করছি, সুতরাং এতো সুদূরপ্রসারী পরিবর্তন যুক্ত করা এই প্রক্রিয়াটিকে আরও জটিল করে
তুলবে

0

যদি ফাইলটি বিভাগগুলিতে কাঠামোগত হয় তবে এটি কেবলমাত্র অধ্যায়গুলির বাইরে চলে গেছে এবং নিয়মিত প্রকাশ রয়েছে যা আপনি বিভাগ শিরোনামটি সনাক্ত করতে ব্যবহার করতে পারেন, আপনি ফাইলগুলি তাদের বিভাগগুলিতে সিএসপ্লিট করতে পারেন এবং তারপরে বিভাগগুলি যুগলভাবে তুলনা করতে পারেন।

উদাহরণস্বরূপ, কিছু ডাটাবেসের নাম পরিবর্তিত হওয়ার পরে আমি তাদের তুলনা করার জন্য কেবল দুটি মাইএসকিউএল ডাম্পের উপর এটি করেছি (এবং সেইজন্য ডাম্পগুলি সেগুলি একটি পৃথক ক্রমে তালিকাভুক্ত করেছে):

csplit all-07sep2015-11:19:12.sql '/Current Database/-1' '{*}'  # split the dump made before the change, creating files xx00, xx01, ...
csplit -f yy all-07sep2015-12:26:12.sql '/Current Database/-1' '{*}' # split the dump made after the change, creating files yy00, yy01, ...
fgrep 'Current Database' xx?? yy?? | perl -lne 'BEGIN{my %foo}; /(^....).*`(.*)`/ and push(@{$foo{lc($2)}}, $1); END {printf("diff -di %s %s\n", @{$_}) for values %foo}' | sh -x | less  # match the pairs and compare them with diff
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.