t / t9129-git-svn-i18n-commitencoding.shon commit Merge branch 'jk/shortlog-tolerate-broken-commit' (7f794aa)
   1#!/bin/sh
   2#
   3# Copyright (c) 2008 Eric Wong
   4
   5test_description='git svn honors i18n.commitEncoding in config'
   6
   7. ./lib-git-svn.sh
   8
   9compare_git_head_with () {
  10        nr=`wc -l < "$1"`
  11        a=7
  12        b=$(($a + $nr - 1))
  13        git cat-file commit HEAD | sed -ne "$a,${b}p" >current &&
  14        test_cmp current "$1"
  15}
  16
  17a_utf8_locale=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
  18        p
  19        q
  20}')
  21
  22if test -n "$a_utf8_locale"
  23then
  24        test_set_prereq UTF8
  25else
  26        say "# UTF-8 locale not available, some tests are skipped"
  27fi
  28
  29compare_svn_head_with () {
  30        # extract just the log message and strip out committer info.
  31        # don't use --limit here since svn 1.1.x doesn't have it,
  32        LC_ALL="$a_utf8_locale" svn log `git svn info --url` | "$PERL_PATH" -w -e '
  33                use bytes;
  34                $/ = ("-"x72) . "\n";
  35                my @x = <STDIN>;
  36                @x = split(/\n/, $x[1]);
  37                splice(@x, 0, 2);
  38                $x[-1] = "";
  39                print join("\n", @x);
  40        ' > current &&
  41        test_cmp current "$1"
  42}
  43
  44for H in ISO8859-1 eucJP ISO-2022-JP
  45do
  46        test_expect_success "$H setup" '
  47                mkdir $H &&
  48                svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
  49                git svn clone "$svnrepo"/$H $H
  50        '
  51done
  52
  53for H in ISO8859-1 eucJP ISO-2022-JP
  54do
  55        test_expect_success "$H commit on git side" '
  56        (
  57                cd $H &&
  58                git config i18n.commitencoding $H &&
  59                git checkout -b t refs/remotes/git-svn &&
  60                echo $H >F &&
  61                git add F &&
  62                git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
  63                E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
  64                test "z$E" = "z$H"
  65                compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
  66        )
  67        '
  68done
  69
  70for H in ISO8859-1 eucJP ISO-2022-JP
  71do
  72        test_expect_success "$H dcommit to svn" '
  73        (
  74                cd $H &&
  75                git svn dcommit &&
  76                git cat-file commit HEAD | grep git-svn-id: &&
  77                E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
  78                test "z$E" = "z$H" &&
  79                compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
  80        )
  81        '
  82done
  83
  84test_expect_success UTF8 'ISO-8859-1 should match UTF-8 in svn' '
  85        (
  86                cd ISO8859-1 &&
  87                compare_svn_head_with "$TEST_DIRECTORY"/t3900/1-UTF-8.txt
  88        )
  89'
  90
  91for H in eucJP ISO-2022-JP
  92do
  93        test_expect_success UTF8 "$H should match UTF-8 in svn" '
  94                (
  95                        cd $H &&
  96                        compare_svn_head_with "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
  97                )
  98        '
  99done
 100
 101test_done