Skip to content
This repository has been archived by the owner on Jul 24, 2020. It is now read-only.

Commit

Permalink
templatekw: add support for gitnode template keyword
Browse files Browse the repository at this point in the history
  • Loading branch information
davidmc24 committed Aug 23, 2012
1 parent 65d0450 commit c63538b
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 0 deletions.
12 changes: 12 additions & 0 deletions hggit/__init__.py
Expand Up @@ -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 _
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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')),
Expand Down
13 changes: 13 additions & 0 deletions hggit/help/git.rst
Expand Up @@ -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
-----------

Expand Down
50 changes: 50 additions & 0 deletions 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"
7 changes: 7 additions & 0 deletions 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

0 comments on commit c63538b

Please sign in to comment.