t / t4114-apply-typechange.shon commit vcs-svn: avoid using ls command twice (43155cf)
   1#!/bin/sh
   2#
   3# Copyright (c) 2006 Eric Wong
   4#
   5
   6test_description='git apply should not get confused with type changes.
   7
   8'
   9
  10. ./test-lib.sh
  11
  12test_expect_success SYMLINKS 'setup repository and commits' '
  13        echo "hello world" > foo &&
  14        echo "hi planet" > bar &&
  15        git update-index --add foo bar &&
  16        git commit -m initial &&
  17        git branch initial &&
  18        rm -f foo &&
  19        ln -s bar foo &&
  20        git update-index foo &&
  21        git commit -m "foo symlinked to bar" &&
  22        git branch foo-symlinked-to-bar &&
  23        rm -f foo &&
  24        echo "how far is the sun?" > foo &&
  25        git update-index foo &&
  26        git commit -m "foo back to file" &&
  27        git branch foo-back-to-file &&
  28        printf "\0" > foo &&
  29        git update-index foo &&
  30        git commit -m "foo becomes binary" &&
  31        git branch foo-becomes-binary &&
  32        rm -f foo &&
  33        git update-index --remove foo &&
  34        mkdir foo &&
  35        echo "if only I knew" > foo/baz &&
  36        git update-index --add foo/baz &&
  37        git commit -m "foo becomes a directory" &&
  38        git branch "foo-becomes-a-directory" &&
  39        echo "hello world" > foo/baz &&
  40        git update-index foo/baz &&
  41        git commit -m "foo/baz is the original foo" &&
  42        git branch foo-baz-renamed-from-foo
  43        '
  44
  45test_expect_success SYMLINKS 'file renamed from foo to foo/baz' '
  46        git checkout -f initial &&
  47        git diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch &&
  48        git apply --index < patch
  49        '
  50test_debug 'cat patch'
  51
  52
  53test_expect_success SYMLINKS 'file renamed from foo/baz to foo' '
  54        git checkout -f foo-baz-renamed-from-foo &&
  55        git diff-tree -M -p HEAD initial > patch &&
  56        git apply --index < patch
  57        '
  58test_debug 'cat patch'
  59
  60
  61test_expect_success SYMLINKS 'directory becomes file' '
  62        git checkout -f foo-becomes-a-directory &&
  63        git diff-tree -p HEAD initial > patch &&
  64        git apply --index < patch
  65        '
  66test_debug 'cat patch'
  67
  68
  69test_expect_success SYMLINKS 'file becomes directory' '
  70        git checkout -f initial &&
  71        git diff-tree -p HEAD foo-becomes-a-directory > patch &&
  72        git apply --index < patch
  73        '
  74test_debug 'cat patch'
  75
  76
  77test_expect_success SYMLINKS 'file becomes symlink' '
  78        git checkout -f initial &&
  79        git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
  80        git apply --index < patch
  81        '
  82test_debug 'cat patch'
  83
  84
  85test_expect_success SYMLINKS 'symlink becomes file' '
  86        git checkout -f foo-symlinked-to-bar &&
  87        git diff-tree -p HEAD foo-back-to-file > patch &&
  88        git apply --index < patch
  89        '
  90test_debug 'cat patch'
  91
  92test_expect_success SYMLINKS 'binary file becomes symlink' '
  93        git checkout -f foo-becomes-binary &&
  94        git diff-tree -p --binary HEAD foo-symlinked-to-bar > patch &&
  95        git apply --index < patch
  96        '
  97test_debug 'cat patch'
  98
  99test_expect_success SYMLINKS 'symlink becomes binary file' '
 100        git checkout -f foo-symlinked-to-bar &&
 101        git diff-tree -p --binary HEAD foo-becomes-binary > patch &&
 102        git apply --index < patch
 103        '
 104test_debug 'cat patch'
 105
 106
 107test_expect_success SYMLINKS 'symlink becomes directory' '
 108        git checkout -f foo-symlinked-to-bar &&
 109        git diff-tree -p HEAD foo-becomes-a-directory > patch &&
 110        git apply --index < patch
 111        '
 112test_debug 'cat patch'
 113
 114
 115test_expect_success SYMLINKS 'directory becomes symlink' '
 116        git checkout -f foo-becomes-a-directory &&
 117        git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
 118        git apply --index < patch
 119        '
 120test_debug 'cat patch'
 121
 122
 123test_done