author | Junio C Hamano <junkio@cox.net> | |
Wed, 4 Apr 2007 04:52:14 +0000 (21:52 -0700) | ||
committer | Junio 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 | patch | | diff1 | | diff2 | | blob | history |
t/t4200-rerere.sh | patch | | diff1 | | diff2 | | blob | history |
diff --combined builtin-rerere.c
index b8867ab4add83dee4ab99108e96949bcd65290a0,004eda2acdf9b8ac5a66f9717d2244613b23768e..b463c07f04b127ee3d1e17962813367fb4a5a588
--- 1/builtin-rerere.c
--- 2/builtin-rerere.c
+++ b/builtin-rerere.c
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
--- 1/t/t4200-rerere.sh
--- 2/t/t4200-rerere.sh
+++ b/t/t4200-rerere.sh
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
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
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'"
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
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