From c63538bd62944491632c57c4c750c3c21873dfaa Mon Sep 17 00:00:00 2001 From: "David M. Carr" Date: Wed, 22 Aug 2012 23:39:45 -0400 Subject: [PATCH] templatekw: add support for gitnode template keyword --- hggit/__init__.py | 12 ++++++++++ hggit/help/git.rst | 13 +++++++++++ tests/test-keywords | 50 +++++++++++++++++++++++++++++++++++++++++ tests/test-keywords.out | 7 ++++++ 4 files changed, 82 insertions(+) create mode 100644 tests/test-keywords create mode 100644 tests/test-keywords.out diff --git a/hggit/__init__.py b/hggit/__init__.py index b81697f4..6ef31692 100644 --- a/hggit/__init__.py +++ b/hggit/__init__.py @@ -28,6 +28,7 @@ from mercurial import help from mercurial import hg from mercurial import localrepo +from mercurial import templatekw from mercurial import util as hgutil from mercurial import url from mercurial.i18n import _ @@ -92,6 +93,7 @@ def safebranchrevs(orig, lrepo, repo, branches, revs): extensions.wrapfunction(hg, 'addbranchrevs', safebranchrevs) def extsetup(): + templatekw.keywords.update({'gitnode': gitnodekw}) helpdir = os.path.join(os.path.dirname(__file__), 'help') entry = (['git'], _("Working with Git Repositories"), lambda: open(os.path.join(helpdir, 'git.rst')).read()) @@ -175,6 +177,16 @@ def getremotechanges(orig, ui, repo, other, *args, **opts): # 1.7+ pass +def gitnodekw(**args): + """:gitnode: String. The Git changeset identification hash, as a 40 hexadecimal digit string.""" + node = args['ctx'] + repo = args['repo'] + git = GitHandler(repo, repo.ui) + gitnode = git.map_git_get(node.hex()) + if gitnode is None: + gitnode = '' + return gitnode + cmdtable = { "gimport": (gimport, [], _('hg gimport')), diff --git a/hggit/help/git.rst b/hggit/help/git.rst index 42bd5e61..3b68dd77 100644 --- a/hggit/help/git.rst +++ b/hggit/help/git.rst @@ -45,6 +45,19 @@ Git branches are exposed in Hg as bookmarks, while Git remotes are exposed as Hg local tags. See `hg help bookmarks` and `hg help tags` for further information. +Finding and displaying Git revisions +------------------------------------ + +For displaying the Git revision ID, Hg-Git provides a template keyword: + + :gitnode: String. The Git changeset identification hash, as a 40 hexadecimal + digit string. + +For example:: + + $ hg log --template='{rev}:{node|short}:{gitnode|short} {desc}\n' + $ hg log --template='hg: {node}\ngit: {gitnode}\n{date|isodate} {author}\n{desc}\n\n' + Limitations ----------- diff --git a/tests/test-keywords b/tests/test-keywords new file mode 100644 index 00000000..15866e6d --- /dev/null +++ b/tests/test-keywords @@ -0,0 +1,50 @@ +#!/bin/sh + +# Fails for some reason, need to investigate +# "$TESTDIR/hghave" git || exit 80 + +# bail if the user does not have dulwich +python -c 'import dulwich, dulwich.repo' || exit 80 + +# bail early if the user is already running git-daemon +echo hi | nc localhost 9418 2>/dev/null && exit 80 + +echo "[extensions]" >> $HGRCPATH +echo "hggit=$(echo $(dirname $(dirname $0)))/hggit" >> $HGRCPATH +echo 'hgext.bookmarks =' >> $HGRCPATH + +GIT_AUTHOR_NAME='test'; export GIT_AUTHOR_NAME +GIT_AUTHOR_EMAIL='test@example.org'; export GIT_AUTHOR_EMAIL +GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0000"; export GIT_AUTHOR_DATE +GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_NAME +GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_EMAIL +GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; export GIT_COMMITTER_DATE + +count=10 +commit() +{ + GIT_AUTHOR_DATE="2007-01-01 00:00:$count +0000" + GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE" + git commit "$@" >/dev/null 2>/dev/null || echo "git commit error" + count=`expr $count + 1` +} + +mkdir gitrepo +cd gitrepo +git init | python -c "import sys; print sys.stdin.read().replace('$(dirname $(pwd))/', '')" +echo alpha > alpha +git add alpha +commit -m 'add alpha' +echo beta > beta +git add beta +commit -m 'add beta' + +cd .. + +hg clone gitrepo hgrepo | grep -v '^updating' +cd hgrepo +echo gamma > gamma +hg add gamma +hg commit -m 'add gamma' + +hg log --template "{rev} {node} {node|short} {gitnode} {gitnode|short}\n" diff --git a/tests/test-keywords.out b/tests/test-keywords.out new file mode 100644 index 00000000..43d3555a --- /dev/null +++ b/tests/test-keywords.out @@ -0,0 +1,7 @@ +Initialized empty Git repository in gitrepo/.git/ + +importing git objects into hg +2 files updated, 0 files merged, 0 files removed, 0 files unresolved +2 a9da0c7c9bb7574b0f3139ab65cabac7468d6b8d a9da0c7c9bb7 +1 7bcd915dc873c654b822f01b0a39269b2739e86d 7bcd915dc873 9497a4ee62e16ee641860d7677cdb2589ea15554 9497a4ee62e1 +0 3442585be8a60c6cd476bbc4e45755339f2a23ef 3442585be8a6 7eeab2ea75ec1ac0ff3d500b5b6f8a3447dd7c03 7eeab2ea75ec