Categories
Python

Fetching changed files (diff) between two Git commits in Python

First we import the git module, create a Repo object with the physical path to the git repo. We call the iter_commits() method to get a iterator or generator expression which we pass to list() for converting it to a list item.

To compare one commit to another we use the diff() method of a commit object and pass another commit object as the parameter.

The returned list has all the changed files. Each of this item has two blobs – a_blob or b_blob. a_blob is the blob in the first commit, b_blob is the blob in the last commit – in the selected range.

Each of this blob objects have different properties – name, path, data_stream etc. We’re interested only in the path. We should use both a_blob and b_blob because in case of a renamed file, there are two changes – one is deleted, one is added. a_blob will point to the earlier file, b_blob will be the latest one.

Finally, we print the list of changed files. Easy, is it not? 🙂

Categories
Python

Fetching Remote Git Repo with Python: In a few lines of codes

In my old posts, I have always made rants about how cool and comfy Python is. Here’s a tiny code snippet that shows how I fetch remote Git repos with Python and the awesome GitPython library:

PS: Installing GitPython is just a breeze on *Nix with:

Categories
Bangla Python Series

āĻŦāĻžāĻ‚āĻ˛āĻžā§Ÿ āĻĒāĻžāĻ‡āĻĨāĻ¨ – āĻĢāĻžāĻ‚āĻļāĻ¨

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻ¯ā§‡ āĻ…āĻ‚āĻļāĻ—ā§āĻ˛ā§‹ āĻŦāĻžāĻ° āĻŦāĻžāĻ° āĻ†āĻ¸ā§‡ āĻ¸ā§‡āĻ—ā§āĻ˛ā§‹āĻ•ā§‡ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ¨āĻ°āĻžā§Ÿ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ¯ā§‹āĻ—ā§āĻ¯ āĻāĻ•āĻ• (reusable unit) āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§‡ āĨ¤ āĻ—āĻ¨āĻŋāĻ¤ā§‡ āĻ¯ā§‡āĻŽāĻ¨ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ āĻ•ā§‹āĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨āĻĒā§āĻŸ āĻ¨āĻŋā§Ÿā§‡ āĻ¸ā§‡āĻŸāĻžāĻ° āĻ‰āĻĒāĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻŽā§āĻ¯āĻžāĻĨ āĻ•āĻ°ā§‡ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĻā§‡ā§Ÿ, āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚āĻāĻ“ āĻ¸ā§‡āĻ‡ āĻāĻ•āĻ‡ āĻŦā§āĻ¯āĻžāĻĒāĻžāĻ° āĻ˜āĻŸā§‡ āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻĒāĻžāĻ¸ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡, āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻ•āĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ “āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ•āĻ°āĻŦā§‡” āĨ¤ āĻ¤āĻŦā§‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ¸āĻŦāĻ¸āĻŽā§Ÿ āĻ¯ā§‡ āĻ‡āĻ¨āĻĒā§āĻŸ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡ āĻŦāĻž āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĻāĻŋāĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŽāĻ¨ āĻ•ā§‹āĻ¨ āĻ•āĻĨāĻž āĻ¨ā§‡āĻ‡ āĨ¤

āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ†āĻ¸āĻ˛ā§‡ āĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻŸā§‡āĻŸāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻ¸āĻ‚āĻ•āĻ˛āĻ¨ āĨ¤ āĻ¯āĻ–āĻ¨āĻ‡ āĻ•ā§‹āĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ•āĻ˛ āĻ•āĻ°āĻž āĻšā§Ÿ āĻ¤āĻ–āĻ¨ āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻĨāĻžāĻ•āĻž āĻ¸ā§āĻŸā§‡āĻŸāĻŽā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛ā§‹ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸ āĻ•āĻ°āĻž āĻšā§Ÿ āĨ¤ āĻĒāĻžāĻ‡āĻĨāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĄāĻŋāĻ•ā§āĻ˛ā§‡ā§ŸāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ def āĻ•āĻŋ-āĻ“ā§ŸāĻžāĻ°ā§āĻĄāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋ āĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻĻā§‡āĻ–ā§‡ āĻ¨ā§‡āĻ‡ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨:

āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻŽāĻ°āĻž def āĻ•āĻŋ-āĻ“ā§ŸāĻžāĻ°ā§āĻĄāĻŸāĻŋ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋ āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻžāĻ° āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ¨āĻžāĻŽ – “hello”, āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° (). āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋāĻ¤ā§‡ āĻ•ā§‹āĻ¨ āĻ‡āĻ¨āĻĒā§āĻŸ āĻĻāĻŋāĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¸ā§‡āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°āĻ—ā§āĻ˛ā§‹ āĻāĻ‡ () āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻŽāĻž āĻĻāĻŋā§Ÿā§‡ āĻ†āĻ˛āĻžāĻĻāĻž āĻ•āĻ°ā§‡ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡ āĨ¤ āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋ, āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ•ā§‹āĻ¨ āĻ‡āĻ¨āĻĒā§āĻŸ āĻĻāĻŋāĻšā§āĻ›āĻŋ āĻ¨āĻž āĨ¤ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ “Hello world!” āĻĒā§āĻ°āĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻŦā§‡ āĨ¤ āĻ¸āĻŋ-āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛ āĻ°ā§‡āĻ–ā§‡ (āĻāĻŦāĻ‚ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ¸ā§āĻŸā§‡āĻŸāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻĻā§‡āĻ–āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯) āĻ†āĻŽāĻ°āĻž 0 āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ•āĻ°āĻ›āĻŋ āĨ¤ āĻ†āĻ¸āĻ˛ā§‡ āĻāĻ‡ āĻ¸ā§āĻŸā§‡āĻŸāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻ•ā§‹āĻ¨ āĻĻāĻ°āĻ•āĻžāĻ° āĻ›āĻŋāĻ˛ āĻ¨āĻž āĨ¤

āĻāĻŦāĻžāĻ° āĻ†āĻ¸ā§āĻ¨ āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻ• āĻĒāĻžāĻ‡āĻĨāĻ¨ā§‡ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻĒāĻžāĻ¸ āĻ•āĻ°āĻŦ āĨ¤

āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§āĻ¨ āĻāĻ­āĻžāĻŦā§‡: sayHello(“maSnun”)

āĻāĻŦāĻžāĻ° http://learnpythonthehardway.org/book/ex19.html āĻāĻ‡ āĻĒā§‡āĻ‡āĻœ āĻĨā§‡āĻ•ā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¨āĻŋā§Ÿā§‡ āĻ•āĻŋāĻ›ā§ āĻ˜āĻžāĻŸāĻžāĻ˜āĻžāĻŸāĻŋ āĻ•āĻ°ā§āĻ¨ āĨ¤ āĻ‡āĻ¨āĻļāĻž āĻ†āĻ˛ā§āĻ˛āĻžāĻš, āĻ¨ā§‡āĻ•ā§āĻ¸āĻŸ āĻĒā§‹āĻ¸ā§āĻŸā§‡ āĻĒāĻžāĻ‡āĻĨāĻ¨ā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ†āĻ°ā§‹ āĻ•āĻŋāĻ›ā§ āĻĻāĻŋāĻ• āĻ¨āĻŋā§Ÿā§‡ āĻ†āĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦ āĨ¤