Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

A Useful Git Post-Checkout Hook for Python Repos

DZone's Guide to

A Useful Git Post-Checkout Hook for Python Repos

· DevOps Zone ·
Free Resource

Easily enforce open source policies in real time and reduce MTTRs from six weeks to six seconds with the Sonatype Nexus Platform. See for yourself - Free Vulnerability Scanner. 

Every now and again, an innocent python developer checks out a new Git branch then proceeds to bang their head against a bug caused by an orphaned.pyc file from the previous branch. Since *.pyc files are typically in the repo's.gitignore file, they are not removed when switching branches and can cause issues if the corresponding .py is removed.

This can be neatly addressed through a 'post checkout' hook which deletes all such files. Here is such a script, which also removes empty folders and prints a summary:

#!/usr/bin/env bash

# Delete .pyc files and empty directories from root of project
cd ./$(git rev-parse --show-cdup)

# Clean-up
find . -name ".DS_Store" -delete

NUM_PYC_FILES=$( find . -name "*.pyc" | wc -l | tr -d ' ' )
if [ $NUM_PYC_FILES -gt 0 ]; then
    find . -name "*.pyc" -delete
    printf "\e[00;31mDeleted $NUM_PYC_FILES .pyc files\e[00m\n"
fi

NUM_EMPTY_DIRS=$( find . -type d -empty | wc -l | tr -d ' ' )
if [ $NUM_EMPTY_DIRS -gt 0 ]; then
    find . -type d -empty -delete
    printf "\e[00;31mDeleted $NUM_EMPTY_DIRS empty directories\e[00m\n"
fi

Sample output:

/static/images/screenshots/post-checkout.png

Inspiration:

The above version is a extension of the snippets in the referenced Stack Overflow question.

Automate open source governance at scale across the entire software supply chain with the Nexus Platform. Learn more.

Topics:

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}