/hyde/ext/plugins/git.py
http://github.com/hyde/hyde · Python · 54 lines · 38 code · 5 blank · 11 comment · 11 complexity · 458b02caae96eb7300e989527c7f7127 MD5 · raw file
- # -*- coding: utf-8 -*-
- """
- Contains classes and utilities to extract information from git repository
- """
- from hyde.plugin import Plugin
- import subprocess
- import traceback
- from dateutil.parser import parse
- class GitDatesPlugin(Plugin):
- """
- Extract creation and last modification date from git and include
- them in the meta data if they are set to "git". Creation date
- is put in `created` and last modification date in `modified`.
- """
- def __init__(self, site):
- super(GitDatesPlugin, self).__init__(site)
- def begin_site(self):
- """
- Initialize plugin. Retrieve dates from git
- """
- for node in self.site.content.walk():
- for resource in node.resources:
- created = None
- modified = None
- try:
- created = resource.meta.created
- modified = resource.meta.modified
- except AttributeError:
- pass
- # Everything is already overrided
- if created != "git" and modified != "git":
- continue
- # Run git log --pretty=%ai
- try:
- commits = subprocess.check_output(["git", "log", "--pretty=%ai",
- resource.path]).split("\n")
- except subprocess.CalledProcessError:
- self.logger.warning("Unable to get git history for [%s]" % resource)
- continue
- commits = commits[:-1]
- if not commits:
- self.logger.warning("No git history for [%s]" % resource)
- continue
- if created == "git":
- created = parse(commits[-1].strip())
- resource.meta.created = created
- if modified == "git":
- modified = parse(commits[0].strip())
- resource.meta.modified = modified