diff --git a/dulwich/contrib/latest_git_tags.py b/dulwich/contrib/robotic_releases.py similarity index 97% rename from dulwich/contrib/latest_git_tags.py rename to dulwich/contrib/robotic_releases.py index 2c72704f..aca3bc04 100644 --- a/dulwich/contrib/latest_git_tags.py +++ b/dulwich/contrib/robotic_releases.py @@ -1,59 +1,59 @@ """ Alternate to `Versioneer `_ using `Dulwich `_ to sort tags by time from newest to oldest. Import this module into the package ``__init__.py`` and then set ``__version__`` as follows:: - from dulwich.contrib.latest_git_tags import get_recent_tags + from dulwich.contrib.robotic_releases import get_recent_tags __version__ = get_recent_tags()[0][0][1:] # other dunder classes like __author__, etc. This example assumes the tags have a leading "v" like "v0.3", and that the ``.git`` folder is in the project folder that containts the package folder. """ from dulwich.repo import Repo import time import datetime import os # CONSTANTS DIRNAME = os.path.abspath(os.path.dirname(__file__)) PROJDIR = os.path.dirname(DIRNAME) def get_recent_tags(projdir=PROJDIR): """ Get list of recent tags in order from newest to oldest and their datetimes. :param projdir: path to ``.git`` :returns: list of (tag, [datetime, commit, author]) sorted from new to old """ project = Repo(projdir) # dulwich repository object refs = project.get_refs() # dictionary of refs and their SHA-1 values tags = {} # empty dictionary to hold tags, commits and datetimes # iterate over refs in repository for key, value in refs.iteritems(): obj = project.get_object(value) # dulwich object from SHA-1 # check if object is tag if obj.type_name != 'tag': # skip ref if not a tag continue # strip the leading text from "refs/tag/" to get "tag name" _, tag = key.rsplit('/', 1) # check if tag object is commit, altho it should always be true if obj.object[0].type_name == 'commit': commit = project.get_object(obj.object[1]) # commit object # get tag commit datetime, but dulwich returns seconds since # beginning of epoch, so use Python time module to convert it to # timetuple then convert to datetime tags[tag] = [ datetime.datetime(*time.gmtime(commit.commit_time)[:6]), commit.id, commit.author ] # return list of tags sorted by their datetimes from newest to oldest return sorted(tags.iteritems(), key=lambda tag: tag[1][0], reverse=True)