git-commit-vandalism/t/t9138-git-svn-authors-prog.sh
Mark Lodato 36db1eddf9 git-svn: add --authors-prog option
Add a new option, --authors-prog, to git-svn that allows a more flexible
alternative (or supplement) to --authors-file.  This allows more
advanced username operations than the authors file will allow.  For
example, one may look up Subversion users via LDAP, or may generate the
name and email address from the Subversion username.

Notes:

* If both --authors-name and --authors-prog are given, the former is
  tried first, falling back to the later.

* The program is called once per unique SVN username, and the result is
  cached.

* The command-line argument must be the path to a program, not a generic
  shell command line.  The absolute path to this program is taken at
  startup since the git-svn script changes directory during operation.

* The option is not enabled for `git svn log'.

[ew: fixed case where neither --authors-(name|prog) were defined]
Signed-off-by: Mark Lodato <lodatom@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>
2009-05-21 00:56:18 -07:00

70 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2009 Eric Wong, Mark Lodato
#
test_description='git svn authors prog tests'
. ./lib-git-svn.sh
cat > svn-authors-prog <<'EOF'
#!/usr/bin/perl
$_ = shift;
if (s/-sub$//) {
print "$_ <$_\@sub.example.com>\n";
}
else {
print "$_ <$_\@example.com>\n";
}
EOF
chmod +x svn-authors-prog
cat > svn-authors <<'EOF'
ff = FFFFFFF FFFFFFF <fFf@other.example.com>
EOF
test_expect_success 'setup svnrepo' '
for i in aa bb cc-sub dd-sub ee-foo ff
do
svn mkdir -m $i --username $i "$svnrepo"/$i
done
'
test_expect_success 'import authors with prog and file' '
git svn clone --authors-prog=./svn-authors-prog \
--authors-file=svn-authors "$svnrepo" x
'
test_expect_success 'imported 6 revisions successfully' '
(
cd x
test "`git rev-list refs/remotes/git-svn | wc -l`" -eq 6
)
'
test_expect_success 'authors-prog ran correctly' '
(
cd x
git rev-list -1 --pretty=raw refs/remotes/git-svn~1 | \
grep "^author ee-foo <ee-foo@example\.com> " &&
git rev-list -1 --pretty=raw refs/remotes/git-svn~2 | \
grep "^author dd <dd@sub\.example\.com> " &&
git rev-list -1 --pretty=raw refs/remotes/git-svn~3 | \
grep "^author cc <cc@sub\.example\.com> " &&
git rev-list -1 --pretty=raw refs/remotes/git-svn~4 | \
grep "^author bb <bb@example\.com> " &&
git rev-list -1 --pretty=raw refs/remotes/git-svn~5 | \
grep "^author aa <aa@example\.com> "
)
'
test_expect_success 'authors-file overrode authors-prog' '
(
cd x
git rev-list -1 --pretty=raw refs/remotes/git-svn | \
grep "^author FFFFFFF FFFFFFF <fFf@other\.example\.com> "
)
'
test_done