t / t4109-apply-multifrag.shon commit git-svn: fix dcommit clobbering upstream when committing multiple changes (751eb39)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Junio C Hamano
   4# Copyright (c) 2005 Robert Fitzsimons
   5#
   6
   7test_description='git apply test patches with multiple fragments.
   8
   9'
  10. ./test-lib.sh
  11
  12# setup
  13
  14cat > patch1.patch <<\EOF
  15diff --git a/main.c b/main.c
  16new file mode 100644
  17--- /dev/null
  18+++ b/main.c
  19@@ -0,0 +1,23 @@
  20+#include <stdio.h>
  21+
  22+int func(int num);
  23+void print_int(int num);
  24+
  25+int main() {
  26+       int i;
  27+
  28+       for (i = 0; i < 10; i++) {
  29+               print_int(func(i));
  30+       }
  31+
  32+       return 0;
  33+}
  34+
  35+int func(int num) {
  36+       return num * num;
  37+}
  38+
  39+void print_int(int num) {
  40+       printf("%d", num);
  41+}
  42+
  43EOF
  44cat > patch2.patch <<\EOF
  45diff --git a/main.c b/main.c
  46--- a/main.c
  47+++ b/main.c
  48@@ -1,7 +1,9 @@
  49+#include <stdlib.h>
  50 #include <stdio.h>
  51 
  52 int func(int num);
  53 void print_int(int num);
  54+void print_ln();
  55 
  56 int main() {
  57        int i;
  58@@ -10,6 +12,8 @@
  59                print_int(func(i));
  60        }
  61 
  62+       print_ln();
  63+
  64        return 0;
  65 }
  66 
  67@@ -21,3 +25,7 @@
  68        printf("%d", num);
  69 }
  70 
  71+void print_ln() {
  72+       printf("\n");
  73+}
  74+
  75EOF
  76cat > patch3.patch <<\EOF
  77diff --git a/main.c b/main.c
  78--- a/main.c
  79+++ b/main.c
  80@@ -1,9 +1,7 @@
  81-#include <stdlib.h>
  82 #include <stdio.h>
  83 
  84 int func(int num);
  85 void print_int(int num);
  86-void print_ln();
  87 
  88 int main() {
  89        int i;
  90@@ -12,8 +10,6 @@
  91                print_int(func(i));
  92        }
  93 
  94-       print_ln();
  95-
  96        return 0;
  97 }
  98 
  99@@ -25,7 +21,3 @@
 100        printf("%d", num);
 101 }
 102 
 103-void print_ln() {
 104-       printf("\n");
 105-}
 106-
 107EOF
 108cat > patch4.patch <<\EOF
 109diff --git a/main.c b/main.c
 110--- a/main.c
 111+++ b/main.c
 112@@ -1,13 +1,14 @@
 113 #include <stdio.h>
 114 
 115 int func(int num);
 116-void print_int(int num);
 117+int func2(int num);
 118 
 119 int main() {
 120        int i;
 121 
 122        for (i = 0; i < 10; i++) {
 123-               print_int(func(i));
 124+               printf("%d", func(i));
 125+               printf("%d", func3(i));
 126        }
 127 
 128        return 0;
 129@@ -17,7 +18,7 @@
 130        return num * num;
 131 }
 132 
 133-void print_int(int num) {
 134-       printf("%d", num);
 135+int func2(int num) {
 136+       return num * num * num;
 137 }
 138 
 139EOF
 140
 141test_expect_success "S = git apply (1)" \
 142    'git apply patch1.patch patch2.patch'
 143mv main.c main.c.git
 144
 145test_expect_success "S = patch (1)" \
 146    'cat patch1.patch patch2.patch | patch -p1'
 147
 148test_expect_success "S = cmp (1)" \
 149    'cmp main.c.git main.c'
 150
 151rm -f main.c main.c.git
 152
 153test_expect_success "S = git apply (2)" \
 154    'git apply patch1.patch patch2.patch patch3.patch'
 155mv main.c main.c.git
 156
 157test_expect_success "S = patch (2)" \
 158    'cat patch1.patch patch2.patch patch3.patch | patch -p1'
 159
 160test_expect_success "S = cmp (2)" \
 161    'cmp main.c.git main.c'
 162
 163rm -f main.c main.c.git
 164
 165test_expect_success "S = git apply (3)" \
 166    'git apply patch1.patch patch4.patch'
 167mv main.c main.c.git
 168
 169test_expect_success "S = patch (3)" \
 170    'cat patch1.patch patch4.patch | patch -p1'
 171
 172test_expect_success "S = cmp (3)" \
 173    'cmp main.c.git main.c'
 174
 175test_done
 176