t / t4063-diff-blobs.shon commit Merge branch 'cb/notes-freeing-always-null-fix' (e14af5f)
   1#!/bin/sh
   2
   3test_description='test direct comparison of blobs via git-diff'
   4. ./test-lib.sh
   5
   6run_diff () {
   7        # use full-index to make it easy to match the index line
   8        git diff --full-index "$@" >diff
   9}
  10
  11check_index () {
  12        grep "^index $1\\.\\.$2" diff
  13}
  14
  15check_mode () {
  16        grep "^old mode $1" diff &&
  17        grep "^new mode $2" diff
  18}
  19
  20check_paths () {
  21        grep "^diff --git a/$1 b/$2" diff
  22}
  23
  24test_expect_success 'create some blobs' '
  25        echo one >one &&
  26        echo two >two &&
  27        chmod +x two &&
  28        git add . &&
  29
  30        # cover systems where modes are ignored
  31        git update-index --chmod=+x two &&
  32
  33        git commit -m base &&
  34
  35        sha1_one=$(git rev-parse HEAD:one) &&
  36        sha1_two=$(git rev-parse HEAD:two)
  37'
  38
  39test_expect_success 'diff by sha1' '
  40        run_diff $sha1_one $sha1_two
  41'
  42test_expect_success 'index of sha1 diff' '
  43        check_index $sha1_one $sha1_two
  44'
  45test_expect_success 'sha1 diff uses arguments as paths' '
  46        check_paths $sha1_one $sha1_two
  47'
  48test_expect_success 'sha1 diff has no mode change' '
  49        ! grep mode diff
  50'
  51
  52test_expect_success 'diff by tree:path (run)' '
  53        run_diff HEAD:one HEAD:two
  54'
  55test_expect_success 'index of tree:path diff' '
  56        check_index $sha1_one $sha1_two
  57'
  58test_expect_success 'tree:path diff uses filenames as paths' '
  59        check_paths one two
  60'
  61test_expect_success 'tree:path diff shows mode change' '
  62        check_mode 100644 100755
  63'
  64
  65test_expect_success 'diff by ranged tree:path' '
  66        run_diff HEAD:one..HEAD:two
  67'
  68test_expect_success 'index of ranged tree:path diff' '
  69        check_index $sha1_one $sha1_two
  70'
  71test_expect_success 'ranged tree:path diff uses filenames as paths' '
  72        check_paths one two
  73'
  74test_expect_success 'ranged tree:path diff shows mode change' '
  75        check_mode 100644 100755
  76'
  77
  78test_expect_success 'diff blob against file' '
  79        run_diff HEAD:one two
  80'
  81test_expect_success 'index of blob-file diff' '
  82        check_index $sha1_one $sha1_two
  83'
  84test_expect_success 'blob-file diff uses filename as paths' '
  85        check_paths one two
  86'
  87test_expect_success FILEMODE 'blob-file diff shows mode change' '
  88        check_mode 100644 100755
  89'
  90
  91test_expect_success 'blob-file diff prefers filename to sha1' '
  92        run_diff $sha1_one two &&
  93        check_paths two two
  94'
  95
  96test_done