#!/usr/bin/python # # git-wip.py # import sys import os import subprocess from datetime import datetime, timedelta def git_cmd(args): try: output = subprocess.check_output(args, stderr=subprocess.STDOUT).decode("utf-8") except subprocess.CalledProcessError: return None return output.strip() def last_commit(filename): return git_cmd(["git", "log", "-n1", "--pretty=%h", filename]) def commit_datetime(commit): output = git_cmd(["git", "show", "-s", "--format=%ct", commit]) if output: return datetime.utcfromtimestamp(float(output)) return None # Git status status_output = git_cmd(["git", "status", "-uno", "--porcelain"]) if status_output == None: sys.exit(0) # Split lines in to list status_list = status_output.splitlines() print " Filename\tLocal modified\tCommit modified\tLast commit" # Loop over list of status output for status_line in status_list: (status, filename) = status_line.split() stat = os.stat(filename) mtime = stat.st_mtime now = datetime.now() mtime_human = humanize.naturaltime(now - datetime.fromtimestamp(mtime)) commit_hash = last_commit(filename) # Commit date commit_date = commit_datetime(commit_hash) if commit_date: commit_date_human = humanize.naturaltime(now - commit_date) else: commit_date_human = "-" # Output print status + " " + filename + "\t" \ + mtime_human + "\t" \ + commit_date_human + "\t" \ + commit_hash sys.exit(0)