changeset 576:c4849b2dab87

tests: extract commonly used commit/tag functions into testutil library Thanks to Felipe Contreras for the patch which this was based on. The functions were renamed to make it clearer that these are shell functions rather than normal git/hg commands, and to make it clearer which tool is being invoked. Old name | New name ------------------------ commit | fn_git_commit tag | fn_git_tag hgcommit | fn_hg_commit hgtag | fn_hg_tag Extraction from test-encoding.t was left for a subsequent patch, as I was seeing unexpected output changes when I attempted the extraction. The gitcommit and hgcommit functions in test-bookmark-workflow.t were left as-is for now, as they have a different behavior than the standard version (separate counters for each).
author David M. Carr <david@carrclan.us>
date Tue, 30 Oct 2012 22:59:20 -0400
parents a7da97e69d56
children daf3e44a4aa9
files tests/test-bookmark-workflow.t tests/test-clone.t tests/test-empty-working-tree.t tests/test-file-removal.t tests/test-git-clone.t tests/test-git-submodules.t tests/test-git-tags.t tests/test-git-workflow.t tests/test-hg-author.t tests/test-hg-branch.t tests/test-hg-tags.t tests/test-incoming.t tests/test-keywords.t tests/test-merge.t tests/test-octopus.t tests/test-outgoing.t tests/test-pull-after-strip.t tests/test-pull.t tests/test-push.t tests/test-subrepos.t tests/test-tree-decomposition.t tests/testutil
diffstat 22 files changed, 104 insertions(+), 442 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test-bookmark-workflow.t
+++ b/tests/test-bookmark-workflow.t
@@ -22,13 +22,6 @@
   $ python -c 'from mercurial import util ; assert \
   >  util.version() != "unknown" and util.version() >= "2.1"' || exit 80
 
-  $ 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
-
   $ gitcount=10
   $ gitcommit()
   > {
--- a/tests/test-clone.t
+++ b/tests/test-clone.t
@@ -7,29 +7,13 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
   Initialized empty Git repository in $TESTTMP/gitrepo/.git/
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
 
   $ git tag alpha
 
@@ -37,7 +21,7 @@
   Switched to a new branch "beta"
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
 
 
   $ cd ..
--- a/tests/test-empty-working-tree.t
+++ b/tests/test-empty-working-tree.t
@@ -7,13 +7,6 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
--- a/tests/test-file-removal.t
+++ b/tests/test-file-removal.t
@@ -7,42 +7,26 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
   Initialized empty Git repository in $TESTTMP/gitrepo/.git/
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
   $ mkdir foo
   $ echo blah > foo/bar
   $ git add foo
-  $ commit -m 'add foo'
+  $ fn_git_commit -m 'add foo'
   $ git rm alpha
   rm 'alpha'
-  $ commit -m 'remove alpha'
+  $ fn_git_commit -m 'remove alpha'
   $ git rm foo/bar
   rm 'foo/bar'
-  $ commit -m 'remove foo/bar'
+  $ fn_git_commit -m 'remove foo/bar'
   $ echo % final manifest in git is just beta
   % final manifest in git is just beta
   $ git ls-files
--- a/tests/test-git-clone.t
+++ b/tests/test-git-clone.t
@@ -7,32 +7,16 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
   Initialized empty Git repository in $TESTTMP/gitrepo/.git/
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
 
   $ cd ..
 
--- a/tests/test-git-submodules.t
+++ b/tests/test-git-submodules.t
@@ -7,29 +7,13 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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" | sed 's/, 0 deletions(-)//'
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo1
   $ cd gitrepo1
   $ git init
   Initialized empty Git repository in $TESTTMP/gitrepo1/.git/
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
   $ cd ..
 
   $ mkdir gitsubrepo
@@ -38,7 +22,7 @@
   Initialized empty Git repository in $TESTTMP/gitsubrepo/.git/
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
   $ cd ..
 
   $ mkdir gitrepo2
--- a/tests/test-git-tags.t
+++ b/tests/test-git-tags.t
@@ -7,29 +7,6 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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`
-  > }
-  $ tag()
-  > {
-  >     GIT_AUTHOR_DATE="2007-01-01 00:00:$count +0000"
-  >     GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
-  >     git tag "$@" >/dev/null 2>/dev/null || echo "git commit error"
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
@@ -37,13 +14,13 @@
   $ git config receive.denyCurrentBranch ignore
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
-  $ tag alpha
+  $ fn_git_commit -m 'add alpha'
+  $ fn_git_tag alpha
 
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
-  $ tag -a -m 'added tag beta' beta
+  $ fn_git_commit -m 'add beta'
+  $ fn_git_tag -a -m 'added tag beta' beta
 
   $ cd ..
   $ hg clone gitrepo hgrepo | grep -v '^updating'
--- a/tests/test-git-workflow.t
+++ b/tests/test-git-workflow.t
@@ -7,35 +7,13 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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`
-  > }
-  $ hgcommit()
-  > {
-  >     HGDATE="2007-01-01 00:00:$count +0000"
-  >     hg commit -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir hgrepo
   $ cd hgrepo
   $ hg init
 
   $ echo alpha > alpha
   $ hg add alpha
-  $ hgcommit -m "add alpha"
+  $ fn_hg_commit -m "add alpha"
   $ hg log --graph --debug | grep -v phase:
   @  changeset:   0:0221c246a56712c6aa64e5ee382244d8a471b1e2
      tag:         tip
@@ -73,7 +51,7 @@
   Already on "master"
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
 
   $ echo % get things back to hg
   % get things back to hg
--- a/tests/test-hg-author.t
+++ b/tests/test-hg-author.t
@@ -7,28 +7,6 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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`
-  > }
-  $ hgcommit()
-  > {
-  >     HGDATE="2007-01-01 00:00:$count +0000"
-  >     hg commit -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
@@ -36,7 +14,7 @@
 
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m "add alpha"
+  $ fn_git_commit -m "add alpha"
   $ git checkout -b not-master
   Switched to a new branch 'not-master'
 
@@ -50,55 +28,55 @@
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ echo beta > beta
   $ hg add beta
-  $ hgcommit -u "test" -m 'add beta'
+  $ fn_hg_commit -u "test" -m 'add beta'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
 
   $ echo gamma >> beta
-  $ hgcommit -u "test <test@example.com> (comment)" -m 'modify beta'
+  $ fn_hg_commit -u "test <test@example.com> (comment)" -m 'modify beta'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
 
   $ echo gamma > gamma
   $ hg add gamma
-  $ hgcommit -u "<test@example.com>" -m 'add gamma'
+  $ fn_hg_commit -u "<test@example.com>" -m 'add gamma'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
 
   $ echo delta > delta
   $ hg add delta
-  $ hgcommit -u "name<test@example.com>" -m 'add delta'
+  $ fn_hg_commit -u "name<test@example.com>" -m 'add delta'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
 
   $ echo epsilon > epsilon
   $ hg add epsilon
-  $ hgcommit -u "name <test@example.com" -m 'add epsilon'
+  $ fn_hg_commit -u "name <test@example.com" -m 'add epsilon'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
 
   $ echo zeta > zeta
   $ hg add zeta
-  $ hgcommit -u " test " -m 'add zeta'
+  $ fn_hg_commit -u " test " -m 'add zeta'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
 
   $ echo eta > eta
   $ hg add eta
-  $ hgcommit -u "test < test@example.com >" -m 'add eta'
+  $ fn_hg_commit -u "test < test@example.com >" -m 'add eta'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
 
   $ echo theta > theta
   $ hg add theta
-  $ hgcommit -u "test >test@example.com>" -m 'add theta'
+  $ fn_hg_commit -u "test >test@example.com>" -m 'add theta'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
--- a/tests/test-hg-branch.t
+++ b/tests/test-hg-branch.t
@@ -7,32 +7,10 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
-
 TODO stop using this when we're 1.5 only
   $ filterhash="sed s/71414c4e3c6f/a31e374801c9/;s/698615204564/d93a72262a83/"
   $ filterhash="$filterhash;s/d93a72262a83/05aed681ccb3/"
 
-  $ 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`
-  > }
-  $ hgcommit()
-  > {
-  >     HGDATE="2007-01-01 00:00:$count +0000"
-  >     hg commit -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
@@ -40,7 +18,7 @@
 
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m "add alpha"
+  $ fn_git_commit -m "add alpha"
   $ git checkout -b not-master
   Switched to a new branch 'not-master'
 
@@ -53,14 +31,14 @@
   $ hg co master
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg mv alpha beta
-  $ hgcommit -m 'rename alpha to beta'
+  $ fn_hg_commit -m 'rename alpha to beta'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
 
   $ hg branch gamma | grep -v 'permanent and global'
   marked working directory as branch gamma
-  $ hgcommit -m 'started branch gamma'
+  $ fn_hg_commit -m 'started branch gamma'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
--- a/tests/test-hg-tags.t
+++ b/tests/test-hg-tags.t
@@ -7,28 +7,6 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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`
-  > }
-  $ hgtag()
-  > {
-  >     HGDATE="2007-01-01 00:00:$count +0000"
-  >     hg tag -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
@@ -36,7 +14,7 @@
 
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m "add alpha"
+  $ fn_git_commit -m "add alpha"
   $ git checkout -b not-master
   Switched to a new branch 'not-master'
 
@@ -48,7 +26,7 @@
   $ cd hgrepo
   $ hg co master
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hgtag alpha
+  $ fn_hg_tag alpha
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
--- a/tests/test-incoming.t
+++ b/tests/test-incoming.t
@@ -11,28 +11,6 @@
   $ python -c 'from mercurial import util ; assert \
   >  util.version() != "unknown" and util.version() > "1.7"' || exit 80
 
-  $ 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`
-  > }
-  $ hgcommit()
-  > {
-  >     HGDATE="2007-01-01 00:00:$count +0000"
-  >     hg commit -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
@@ -40,7 +18,7 @@
 
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m "add alpha"
+  $ fn_git_commit -m "add alpha"
 
   $ cd ..
   $ hg clone gitrepo hgrepo | grep -v '^updating'
@@ -54,7 +32,7 @@
   $ cd ../gitrepo
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
 
   $ cd ../hgrepo
   $ hg incoming | grep -v 'no changes found' | grep -v 'bookmark:'
@@ -71,12 +49,12 @@
   $ mkdir d
   $ echo gamma > d/gamma
   $ git add d/gamma
-  $ commit -m'add d/gamma'
+  $ fn_git_commit -m'add d/gamma'
   $ git tag t1
 
   $ echo gamma 2 >> d/gamma
   $ git add d/gamma
-  $ commit -m'add d/gamma line 2'
+  $ fn_git_commit -m'add d/gamma line 2'
 
   $ cd ../hgrepo
   $ hg incoming -p | grep -v 'no changes found' | grep -v 'bookmark:'
--- a/tests/test-keywords.t
+++ b/tests/test-keywords.t
@@ -7,32 +7,16 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
   Initialized empty Git repository in $TESTTMP/gitrepo/.git/
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
 
   $ cd ..
 
--- a/tests/test-merge.t
+++ b/tests/test-merge.t
@@ -7,41 +7,25 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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" | sed 's/, 0 deletions(-)//'
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
   Initialized empty Git repository in $TESTTMP/gitrepo/.git/
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
 
   $ git checkout -b beta 2>&1 | sed s/\'/\"/g
   Switched to a new branch "beta"
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
 
   $ git checkout master 2>&1 | sed s/\'/\"/g
   Switched to branch "master"
   $ echo gamma > gamma
   $ git add gamma
-  $ commit -m 'add gamma'
+  $ fn_git_commit -m 'add gamma'
 
 clean merge
   $ git merge beta | sed "s/the '//;s/' strategy//" | sed 's/^Merge.*recursive.*$/Merge successful/' | sed 's/files/file/;s/insertions/insertion/;s/, 0 deletions.*//' | sed 's/|  */| /'
--- a/tests/test-octopus.t
+++ b/tests/test-octopus.t
@@ -7,22 +7,6 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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" | sed 's/0 deletions(-)//'
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
@@ -30,25 +14,25 @@
 
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
 
   $ git checkout -b branch1 2>&1 | sed s/\'/\"/g
   Switched to a new branch "branch1"
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
 
   $ git checkout -b branch2 master 2>&1 | sed s/\'/\"/g
   Switched to a new branch "branch2"
   $ echo gamma > gamma
   $ git add gamma
-  $ commit -m 'add gamma'
+  $ fn_git_commit -m 'add gamma'
 
   $ git checkout master 2>&1 | sed s/\'/\"/g
   Switched to branch "master"
   $ echo delta > delta
   $ git add delta
-  $ commit -m 'add delta'
+  $ fn_git_commit -m 'add delta'
 
   $ git merge branch1 branch2 | sed "s/the '//;s/' strategy//" | sed 's/^Merge.*octopus.*$/Merge successful/;s/, 0 deletions.*//'  | sed 's/|  */| /'
   Trying simple merge with branch1
--- a/tests/test-outgoing.t
+++ b/tests/test-outgoing.t
@@ -7,28 +7,6 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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`
-  > }
-  $ hgcommit()
-  > {
-  >     HGDATE="2007-01-01 00:00:$count +0000"
-  >     hg commit -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
@@ -36,7 +14,7 @@
 
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m "add alpha"
+  $ fn_git_commit -m "add alpha"
   $ git branch alpha
   $ git show-ref
   7eeab2ea75ec1ac0ff3d500b5b6f8a3447dd7c03 refs/heads/alpha
@@ -51,12 +29,12 @@
   $ hg update -q master
   $ echo beta > beta
   $ hg add beta
-  $ hgcommit -m 'add beta'
+  $ fn_hg_commit -m 'add beta'
 
 
   $ echo gamma > gamma
   $ hg add gamma
-  $ hgcommit -m 'add gamma'
+  $ fn_hg_commit -m 'add gamma'
 
   $ hg book -r 1 beta
 
@@ -114,7 +92,7 @@
   Already on "master"
   $ echo delta > delta
   $ git add delta
-  $ commit -m "add delta"
+  $ fn_git_commit -m "add delta"
 
   $ cd ..
 
--- a/tests/test-pull-after-strip.t
+++ b/tests/test-pull-after-strip.t
@@ -18,29 +18,13 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
   Initialized empty Git repository in $TESTTMP/gitrepo/.git/
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
 
   $ git tag alpha
 
@@ -48,7 +32,7 @@
   Switched to a new branch "beta"
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
 
 
   $ cd ..
@@ -95,7 +79,7 @@
   $ cd gitrepo
   $ echo beta line 2 >> beta
   $ git add beta
-  $ commit -m 'add to beta'
+  $ fn_git_commit -m 'add to beta'
 
   $ cd ..
   $ cd hgrepo-b
--- a/tests/test-pull.t
+++ b/tests/test-pull.t
@@ -7,33 +7,17 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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`
-  > }
-
 set up a git repo with some commits, branches and a tag
   $ git init -q gitrepo
   $ cd gitrepo
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
   $ git tag t_alpha
   $ git checkout -qb beta
   $ echo beta > beta
   $ git add beta
-  $ commit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
   $ cd ..
 
 clone a tag (ideally we'd want to pull it, but that seems broken for now)
@@ -83,7 +67,7 @@
   $ git checkout -q master
   $ echo gamma > gamma
   $ git add gamma
-  $ commit -m 'add gamma'
+  $ fn_git_commit -m 'add gamma'
   $ cd ..
 
 pull everything else
--- a/tests/test-push.t
+++ b/tests/test-push.t
@@ -7,28 +7,6 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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`
-  > }
-  $ hgcommit()
-  > {
-  >     HGDATE="2007-01-01 00:00:$count +0000"
-  >     hg commit -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
-  >     count=`expr $count + 1`
-  > }
-
   $ mkdir gitrepo
   $ cd gitrepo
   $ git init
@@ -36,7 +14,7 @@
 
   $ echo alpha > alpha
   $ git add alpha
-  $ commit -m "add alpha"
+  $ fn_git_commit -m "add alpha"
   $ git checkout -b not-master 2>&1 | sed s/\'/\"/g
   Switched to a new branch "not-master"
 
@@ -48,12 +26,12 @@
   $ cd hgrepo
   $ echo beta > beta
   $ hg add beta
-  $ hgcommit -m 'add beta'
+  $ fn_hg_commit -m 'add beta'
 
 
   $ echo gamma > gamma
   $ hg add gamma
-  $ hgcommit -m 'add gamma'
+  $ fn_hg_commit -m 'add gamma'
 
   $ hg book -r 1 beta
   $ hg push -r beta
@@ -76,7 +54,7 @@
   Switched to branch "master"
   $ echo delta > delta
   $ git add delta
-  $ commit -m "add delta"
+  $ fn_git_commit -m "add delta"
   $ git checkout not-master 2>&1 | sed s/\'/\"/g
   Switched to branch "not-master"
 
--- a/tests/test-subrepos.t
+++ b/tests/test-subrepos.t
@@ -7,36 +7,13 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
-  $ gitcommit()
-  > {
-  >     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`
-  > }
-  $ hgcommit()
-  > {
-  >     HGDATE="2007-01-01 00:00:$count +0000"
-  >     hg commit -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
-  >     count=`expr $count + 1`
-  > }
-
-
   $ mkdir gitsubrepo
   $ cd gitsubrepo
   $ git init
   Initialized empty Git repository in $TESTTMP/gitsubrepo/.git/
   $ echo beta > beta
   $ git add beta
-  $ gitcommit -m 'add beta'
+  $ fn_git_commit -m 'add beta'
   $ cd ..
 
   $ mkdir gitrepo1
@@ -45,15 +22,15 @@
   Initialized empty Git repository in $TESTTMP/gitrepo1/.git/
   $ echo alpha > alpha
   $ git add alpha
-  $ gitcommit -m 'add alpha'
+  $ fn_git_commit -m 'add alpha'
   $ git submodule add ../gitsubrepo subrepo1
   Cloning into 'subrepo1'...
   done.
-  $ gitcommit -m 'add subrepo1'
+  $ fn_git_commit -m 'add subrepo1'
   $ git submodule add ../gitsubrepo xyz/subrepo2
   Cloning into 'xyz/subrepo2'...
   done.
-  $ gitcommit -m 'add subrepo2'
+  $ fn_git_commit -m 'add subrepo2'
 we are going to push to this repo from our hg clone,
 allow commits despite working copy presense
   $ git config receive.denyCurrentBranch ignore
@@ -95,7 +72,7 @@
   $ cd gitsubrepo
   $ echo gamma > gamma
   $ git add gamma
-  $ gitcommit -m 'add gamma'
+  $ fn_git_commit -m 'add gamma'
   $ cd ..
   $ cd hgrepo
   $ cd xyz/subrepo2
@@ -134,12 +111,12 @@
   $ cd hgsub
   $ echo delta > delta
   $ hg add delta
-  $ hgcommit -m "add delta"
+  $ fn_hg_commit -m "add delta"
   $ echo "`hg tip --template '{node}'` hgsub" > ../gitrepo1/.hgsubstate
   $ echo "hgsub = $(pwd)" > ../gitrepo1/.hgsub
   $ cd ../gitrepo1
   $ git add .hgsubstate .hgsub
-  $ gitcommit -m "Test3. Prepare .hgsub and .hgsubstate sources"
+  $ fn_git_commit -m "Test3. Prepare .hgsub and .hgsubstate sources"
   $ cd ../hgrepo
   $ hg pull
   pulling from $TESTTMP/gitrepo1
--- a/tests/test-tree-decomposition.t
+++ b/tests/test-tree-decomposition.t
@@ -7,22 +7,6 @@
 bail if the user does not have dulwich
   $ python -c 'import dulwich, dulwich.repo' || exit 80
 
-  $ 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
@@ -32,16 +16,16 @@
   $ echo a > d1/f1
   $ echo b > d1/f2
   $ git add d1/f1 d1/f2
-  $ commit -m initial
+  $ fn_git_commit -m initial
 
   $ mkdir d2
   $ git mv d1/f2 d2/f2
-  $ commit -m 'rename'
+  $ fn_git_commit -m 'rename'
 
   $ rm -r d1
   $ echo c > d1
   $ git add d1
-  $ commit -m 'replace a dir with a file'
+  $ fn_git_commit -m 'replace a dir with a file'
 
 
   $ cd ..
--- a/tests/testutil
+++ b/tests/testutil
@@ -10,3 +10,39 @@
 # Not needed in Mercurial 2.3+, as graphlog was integrated into core
 echo 'graphlog=' >> $HGRCPATH
 echo 'mq=' >> $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
+
+# Functions to commit and tag in Mercurial and Git in a predictable manner
+count=10
+
+fn_git_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`
+}
+
+fn_hg_commit() {
+    HGDATE="2007-01-01 00:00:$count +0000"
+    hg commit -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg commit error"
+    count=`expr $count + 1`
+}
+
+fn_git_tag() {
+    GIT_AUTHOR_DATE="2007-01-01 00:00:$count +0000"
+    GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
+    git tag "$@" >/dev/null 2>/dev/null || echo "git tag error"
+    count=`expr $count + 1`
+}
+
+fn_hg_tag() {
+    HGDATE="2007-01-01 00:00:$count +0000"
+    hg tag -d "$HGDATE" "$@" >/dev/null 2>/dev/null || echo "hg tag error"
+    count=`expr $count + 1`
+}