Code

Merge 1.5.0.7 in
authorJunio C Hamano <junkio@cox.net>
Wed, 4 Apr 2007 04:52:14 +0000 (21:52 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 4 Apr 2007 04:52:14 +0000 (21:52 -0700)
Signed-off-by: Junio C Hamano <junkio@cox.net>
1  2 
builtin-rerere.c
t/t4200-rerere.sh

diff --combined builtin-rerere.c
index b8867ab4add83dee4ab99108e96949bcd65290a0,004eda2acdf9b8ac5a66f9717d2244613b23768e..b463c07f04b127ee3d1e17962813367fb4a5a588
@@@ -78,6 -78,13 +78,13 @@@ static void append_line(struct buffer *
        buffer->nr += len;
  }
  
+ static void clear_buffer(struct buffer *buffer)
+ {
+       free(buffer->ptr);
+       buffer->ptr = NULL;
+       buffer->nr = buffer->alloc = 0;
+ }
  static int handle_file(const char *path,
         unsigned char *sha1, const char *output)
  {
                SHA1_Init(&ctx);
  
        while (fgets(buf, sizeof(buf), f)) {
 -              if (!strncmp("<<<<<<< ", buf, 8))
 +              if (!prefixcmp(buf, "<<<<<<< "))
                        hunk = 1;
 -              else if (!strncmp("=======", buf, 7))
 +              else if (!prefixcmp(buf, "======="))
                        hunk = 2;
 -              else if (!strncmp(">>>>>>> ", buf, 8)) {
 +              else if (!prefixcmp(buf, ">>>>>>> ")) {
                        hunk_no++;
                        hunk = 0;
                        if (memcmp(one->ptr, two->ptr, one->nr < two->nr ?
                                SHA1_Update(&ctx, two->ptr, two->nr);
                                SHA1_Update(&ctx, "\0", 1);
                        }
+                       clear_buffer(one);
+                       clear_buffer(two);
                } else if (hunk == 1)
                        append_line(one, buf);
                else if (hunk == 2)
diff --combined t/t4200-rerere.sh
index e081b32aff393c4ea6d2e12e3d69d2217d6ef378,69b8d26cd13b2fad7b84b9b37e240188aaf085b4..8b611bbea210551d86016b53718ba1af313f1353
@@@ -34,7 -34,8 +34,8 @@@ EO
  git commit -q -a -m first
  
  git checkout -b second master
- git show first:a1 | sed 's/To die, t/To die! T/' > a1
+ git show first:a1 |
+ sed -e 's/To die, t/To die! T/' -e 's/life;$/life./' > a1
  git commit -q -a -m second
  
  # activate rerere
@@@ -42,19 -43,26 +43,26 @@@ mkdir .git/rr-cach
  
  test_expect_failure 'conflicting merge' 'git pull . first'
  
- sha1=4f58849a60b4f969a2848966b6d02893b783e8fb
+ sha1=$(sed -e 's/\t.*//' .git/rr-cache/MERGE_RR)
  rr=.git/rr-cache/$sha1
  test_expect_success 'recorded preimage' "grep ======= $rr/preimage"
  
  test_expect_success 'no postimage or thisimage yet' \
        "test ! -f $rr/postimage -a ! -f $rr/thisimage"
  
+ test_expect_success 'preimage have right number of lines' '
+       cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) &&
+       test "$cnt" = 10
+ '
  git show first:a1 > a1
  
  cat > expect << EOF
  --- a/a1
  +++ b/a1
- @@ -6,11 +6,7 @@
+ @@ -6,17 +6,9 @@
   The heart-ache and the thousand natural shocks
   That flesh is heir to, 'tis a consummation
   Devoutly to be wish'd.
   To sleep: perchance to dream: ay, there's the rub;
   For in that sleep of death what dreams may come
   When we have shuffled off this mortal coil,
+  Must give us pause: there's the respect
+ -<<<<<<<
+ -That makes calamity of so long life.
+ -=======
+  That makes calamity of so long life;
+ ->>>>>>>
  EOF
  git rerere diff > out
  
 -test_expect_success 'rerere diff' 'diff -u expect out'
 +test_expect_success 'rerere diff' 'git diff expect out'
  
  cat > expect << EOF
  a1
@@@ -78,7 -91,7 +91,7 @@@ EO
  
  git rerere status > out
  
 -test_expect_success 'rerere status' 'diff -u expect out'
 +test_expect_success 'rerere status' 'git diff expect out'
  
  test_expect_success 'commit succeeds' \
        "git commit -q -a -m 'prefer first over second'"
@@@ -94,7 -107,7 +107,7 @@@ test_expect_failure 'another conflictin
  git show first:a1 | sed 's/To die: t/To die! T/' > expect
  test_expect_success 'rerere kicked in' "! grep ======= a1"
  
 -test_expect_success 'rerere prefers first change' 'diff -u a1 expect'
 +test_expect_success 'rerere prefers first change' 'git diff a1 expect'
  
  rm $rr/postimage
  echo "$sha1   a1" | tr '\012' '\0' > .git/rr-cache/MERGE_RR
@@@ -112,26 -125,39 +125,26 @@@ rr2=.git/rr-cache/$sha
  mkdir $rr2
  echo Hello > $rr2/preimage
  
 -case "$(date -d @11111111 +%s 2>/dev/null)" in
 -11111111)
 -      # 'date' must be able to take arbitrary input with @11111111 notation.
 -      # for this test to succeed.  We should fix this part using more
 -      # portable script someday.
 +almost_15_days_ago=$((60-15*86400))
 +just_over_15_days_ago=$((-1-15*86400))
 +almost_60_days_ago=$((60-60*86400))
 +just_over_60_days_ago=$((-1-60*86400))
  
 -      now=$(date +%s)
 -      almost_15_days_ago=$(($now+60-15*86400))
 -      just_over_15_days_ago=$(($now-1-15*86400))
 -      almost_60_days_ago=$(($now+60-60*86400))
 -      just_over_60_days_ago=$(($now-1-60*86400))
 -      predate1="$(date -d "@$almost_60_days_ago" +%Y%m%d%H%M.%S)"
 -      predate2="$(date -d "@$almost_15_days_ago" +%Y%m%d%H%M.%S)"
 -      postdate1="$(date -d "@$just_over_60_days_ago" +%Y%m%d%H%M.%S)"
 -      postdate2="$(date -d "@$just_over_15_days_ago" +%Y%m%d%H%M.%S)"
 +test-chmtime =$almost_60_days_ago $rr/preimage
 +test-chmtime =$almost_15_days_ago $rr2/preimage
  
 -      touch -m -t "$predate1" $rr/preimage
 -      touch -m -t "$predate2" $rr2/preimage
 +test_expect_success 'garbage collection (part1)' 'git rerere gc'
  
 -      test_expect_success 'garbage collection (part1)' 'git rerere gc'
 +test_expect_success 'young records still live' \
 +      "test -f $rr/preimage && test -f $rr2/preimage"
  
 -      test_expect_success 'young records still live' \
 -              "test -f $rr/preimage -a -f $rr2/preimage"
 +test-chmtime =$just_over_60_days_ago $rr/preimage
 +test-chmtime =$just_over_15_days_ago $rr2/preimage
  
 -      touch -m -t "$postdate1" $rr/preimage
 -      touch -m -t "$postdate2" $rr2/preimage
 +test_expect_success 'garbage collection (part2)' 'git rerere gc'
  
 -      test_expect_success 'garbage collection (part2)' 'git rerere gc'
 -
 -      test_expect_success 'old records rest in peace' \
 -              "test ! -f $rr/preimage -a ! -f $rr2/preimage"
 -      ;;
 -esac
 +test_expect_success 'old records rest in peace' \
 +      "test ! -f $rr/preimage && test ! -f $rr2/preimage"
  
  test_done