প্রকল্প সম্পর্কে

`git-stats` হলো Rust-এ লেখা একটি কমান্ড-লাইন টুল যা `git log` তথ্য বিশ্লেষণ করে সমন্বিত কমিট পরিসংখ্যান তৈরি করে। এটি `gitoxide`, একটি পিওর-Rust git ইমপ্লিমেন্টেশন ব্যবহার করে সরাসরি রিপোজিটরি পড়ে, ফলে git বাইনারির প্রয়োজন হয় না। ## বৈশিষ্ট্যসমূহ - **সমন্বিত পরিসংখ্যান**: লেখক অনুযায়ী কমিটের সংখ্যা, পরিবর্তিত ফাইল, সংযোজন (insertions), বিয়োজন (deletions) এবং নেট লাইন পরিবর্তন সংক্ষিপ্ত করে দেখায়। - **রিভিশন রেঞ্জ**: একক রিভিশন, `A..B`, এবং `A...B` রেঞ্জ সাপোর্ট করে, যেখানে প্রান্তবিন্দুগুলো refs, শর্ট হ্যাশ, `@{n}` ইত্যাদি হিসেবে উল্লেখ করা যায়। - **ফিল্টারিং**: লেখক (regex), তারিখের রেঞ্জ (`--since`, `--until`), এবং রিভিশন রেঞ্জ অনুযায়ী সীমাবদ্ধতা আরোপ করা যায়। - **রিভিউ ট্র্যাকিং**: `Acked-by`, `Tested-by`, এবং `Reviewed-by` git ট্রেইলারের ভিত্তিতে ঐচ্ছিকভাবে রিভিউয়ার/পরীক্ষক দেখায়। - **সর্টিং**: যেকোনো কলাম (লেখক, কমিট, ফাইল, সংযোজন, বিয়োজন, নেট) অনুযায়ী উর্ধ্বক্রম বা অবরোহী ক্রমে সাজানো যায়। - **ইমেইল প্রদর্শন**: ঐচ্ছিকভাবে লেখকের ইমেইল ঠিকানা দেখানো যায়। ## ইনস্টলেশন Crates.io থেকে ইনস্টল করুন: ``` cargo install git-stats --locked ``` অথবা প্রিবিউল্ট বাইনারির জন্য `cargo-binstall` ব্যবহার করুন: ``` cargo binstall git-stats ``` Arch Linux-এ, AUR প্যাকেজ `git-stats` (সোর্স) অথবা `git-stats-bin` (প্রিবিউল্ট) ব্যবহার করুন। `mise`-এর মাধ্যমে চেকসাম এবং SLSA প্রোভেন্যান্স ভেরিফিকেশনসহ একটি প্রিবিউল্ট বাইনারি ইনস্টল করুন: ``` mise use -g github:lukehsiao/git-stats ``` ## ব্যবহার ``` Usage: git-stats [OPTIONS] [revision-range] Arguments: [revision-range] Show only commits in the specified revision range [default: HEAD] Options: -e, --email Show the email address of each author -r, --reviews Show who reviewed/tested commits based on git trailers -s, --sort <SORT> What column to sort by [default: commits] [possible values: author, commits, files, insertions, deletions, net] --reverse Reverse the sorting order -a, --author <AUTHOR> Limit commits to those matching a regex pattern --since <SINCE> Limit to commits more recent than a date --until <UNTIL> Limit to commits older than a date -h, --help Print help -V, --version Print version ``` উদাহরণ আউটপুট: ``` $ git stats -r origin..HEAD Author Commits Changed Files Insertions Deletions Net Δ Luke Hsiao 67 117 +2616 -1126 +1490 dependabot[bot] 31 62 +203 -267 -64 Total 98 179 +2819 -1393 +1426 Reviewer/Tester Commits Luke Hsiao 1 ``` ## নোটসমূহ - **রিভিশন রেঞ্জ**: কেবল সহজ ফর্মগুলো সাপোর্ট করা হয়; জটিল gitrevisions(7) সিনট্যাক্স ব্যাখ্যা করা হয় না। - **তারিখ ফিল্টারিং**: ISO 8601, RFC 2822, ইউনিক্স টাইমস্ট্যাম্প এবং "2 weeks ago"-এর মতো আপেক্ষিক তারিখ গ্রহণ করে। ফিল্টারিং কমিটারের তারিখের (committer date) ভিত্তিতে করা হয়। - **লেখক মিল**: mailmap-রেজলভড লেখকের সাথে মিলানো হয়, যা `git log --author`-এর থেকে ভিন্ন কারণ এটি র-হেডার ব্যবহার করে। - **মার্জ কমিট**: কমিট হিসেবে গণনা করা হয় কিন্তু কোনো লাইন বা ফাইল পরিবর্তনে অবদান রাখে না। - **শ্যালো ক্লোন**: কাজ করে, কিন্তু পরিসংখ্যান ফুল ক্লোনের থেকে ভিন্ন হতে পারে; একটি সতর্কবার্তা প্রদর্শিত হয়। - **সাবমডিউল**: একটি পরিবর্তিত ফাইল হিসেবে গণনা করা হয়, git-এর রিনেম হ্যান্ডলিং-এর সাথে সামান্য পার্থক্য থাকতে পারে। - **লাইন গণনা**: gitoxide-এর ডিফ ইঞ্জিন থেকে আসে, কিছু হাঙ্কে (hunks) git-এর সাথে সামান্য ভিন্ন হতে পারে। - **SHA-256 রিপোজিটরি**: সাপোর্ট করা হয় না (gitoxide-এর সীমাবদ্ধতা)। - **কমিট এনকোডিং**: নন-UTF-8 এনকোডিং রূপান্তরিত হয় না; লেখকের নামে রিপ্লেসমেন্ট ক্যারেক্টার দেখা যেতে পারে।