builtin-replace: teach "git replace" to actually replace

Teach the syntax: "git replace <object> <replacement>", so that
"git replace" can now create replace refs. These replace refs
will be used by read_sha1_file to substitute <object> with
<replacement> for most of the commands.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff --git a/t/t6050-replace.sh b/t/t6050-replace.sh
index bf4c93f..448a19a 100755
--- a/t/t6050-replace.sh
+++ b/t/t6050-replace.sh
@@ -114,9 +114,19 @@
      test_must_fail git replace -d &&
      test_must_fail git replace -l -d $HASH2 &&
      git replace -d $HASH2 &&
+     git show $HASH2 | grep "A U Thor" &&
      test -z "$(git replace -l)"
 '
 
+test_expect_success '"git replace" replacing' '
+     git replace $HASH2 $R &&
+     git show $HASH2 | grep "O Thor" &&
+     test_must_fail git replace $HASH2 $R &&
+     git replace -f $HASH2 $R &&
+     test_must_fail git replace -f &&
+     test "$HASH2" = "$(git replace)"
+'
+
 #
 #
 test_done