t / t9802-git-p4-filetype.shon commit Fix revision walk for commits with the same dates (c19d1b4)
   1#!/bin/sh
   2
   3test_description='git p4 filetype tests'
   4
   5. ./lib-git-p4.sh
   6
   7test_expect_success 'start p4d' '
   8        start_p4d
   9'
  10
  11test_expect_success 'utf-16 file create' '
  12        (
  13                cd "$cli" &&
  14
  15                # p4 saves this verbatim
  16                printf "three\nline\ntext\n" >f-ascii &&
  17                p4 add -t text f-ascii &&
  18
  19                # p4 adds \377\376 header
  20                cp f-ascii f-ascii-as-utf16 &&
  21                p4 add -t utf16 f-ascii-as-utf16 &&
  22
  23                # p4 saves this exactly as iconv produced it
  24                printf "three\nline\ntext\n" | iconv -f ascii -t utf-16 >f-utf16 &&
  25                p4 add -t utf16 f-utf16 &&
  26
  27                # this also is unchanged
  28                cp f-utf16 f-utf16-as-text &&
  29                p4 add -t text f-utf16-as-text &&
  30
  31                p4 submit -d "f files" &&
  32
  33                # force update of client files
  34                p4 sync -f
  35        )
  36'
  37
  38test_expect_success 'utf-16 file test' '
  39        test_when_finished cleanup_git &&
  40        git p4 clone --dest="$git" //depot@all &&
  41        (
  42                cd "$git" &&
  43
  44                test_cmp "$cli/f-ascii" f-ascii &&
  45                test_cmp "$cli/f-ascii-as-utf16" f-ascii-as-utf16 &&
  46                test_cmp "$cli/f-utf16" f-utf16 &&
  47                test_cmp "$cli/f-utf16-as-text" f-utf16-as-text
  48        )
  49'
  50
  51test_expect_success 'keyword file create' '
  52        (
  53                cd "$cli" &&
  54
  55                printf "id\n\$Id\$\n\$Author\$\ntext\n" >k-text-k &&
  56                p4 add -t text+k k-text-k &&
  57
  58                cp k-text-k k-text-ko &&
  59                p4 add -t text+ko k-text-ko &&
  60
  61                cat k-text-k | iconv -f ascii -t utf-16 >k-utf16-k &&
  62                p4 add -t utf16+k k-utf16-k &&
  63
  64                cp k-utf16-k k-utf16-ko &&
  65                p4 add -t utf16+ko k-utf16-ko &&
  66
  67                p4 submit -d "k files" &&
  68                p4 sync -f
  69        )
  70'
  71
  72build_smush() {
  73        cat >k_smush.py <<-\EOF &&
  74        import re, sys
  75        sys.stdout.write(re.sub(r'(?i)\$(Id|Header|Author|Date|DateTime|Change|File|Revision):[^$]*\$', r'$\1$', sys.stdin.read()))
  76        EOF
  77        cat >ko_smush.py <<-\EOF
  78        import re, sys
  79        sys.stdout.write(re.sub(r'(?i)\$(Id|Header):[^$]*\$', r'$\1$', sys.stdin.read()))
  80        EOF
  81}
  82
  83test_expect_success 'keyword file test' '
  84        build_smush &&
  85        test_when_finished rm -f k_smush.py ko_smush.py &&
  86        test_when_finished cleanup_git &&
  87        git p4 clone --dest="$git" //depot@all &&
  88        (
  89                cd "$git" &&
  90
  91                # text, ensure unexpanded
  92                "$PYTHON_PATH" "$TRASH_DIRECTORY/k_smush.py" <"$cli/k-text-k" >cli-k-text-k-smush &&
  93                test_cmp cli-k-text-k-smush k-text-k &&
  94                "$PYTHON_PATH" "$TRASH_DIRECTORY/ko_smush.py" <"$cli/k-text-ko" >cli-k-text-ko-smush &&
  95                test_cmp cli-k-text-ko-smush k-text-ko &&
  96
  97                # utf16, even though p4 expands keywords, git p4 does not
  98                # try to undo that
  99                test_cmp "$cli/k-utf16-k" k-utf16-k &&
 100                test_cmp "$cli/k-utf16-ko" k-utf16-ko
 101        )
 102'
 103
 104build_gendouble() {
 105        cat >gendouble.py <<-\EOF
 106        import sys
 107        import struct
 108        import array
 109
 110        s = array.array("c", '\0' * 26)
 111        struct.pack_into(">L", s,  0, 0x00051607)  # AppleDouble
 112        struct.pack_into(">L", s,  4, 0x00020000)  # version 2
 113        s.tofile(sys.stdout)
 114        EOF
 115}
 116
 117test_expect_success 'ignore apple' '
 118        test_when_finished rm -f gendouble.py &&
 119        build_gendouble &&
 120        (
 121                cd "$cli" &&
 122                test-genrandom apple 1024 >double.png &&
 123                "$PYTHON_PATH" "$TRASH_DIRECTORY/gendouble.py" >%double.png &&
 124                p4 add -t apple double.png &&
 125                p4 submit -d appledouble
 126        ) &&
 127        test_when_finished cleanup_git &&
 128        git p4 clone --dest="$git" //depot@all &&
 129        (
 130                cd "$git" &&
 131                test ! -f double.png
 132        )
 133'
 134
 135test_expect_success 'kill p4d' '
 136        kill_p4d
 137'
 138
 139test_done