summaryrefslogtreecommitdiff
path: root/builtin/replace.c
diff options
context:
space:
mode:
authorChristian Couder <christian.couder@gmail.com>2019-03-31 13:46:59 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-04-15 02:33:23 (GMT)
commitee521ec4cb09981c14ec32aca370b5ff5d15c4d9 (patch)
tree350acd939bf600d224148377972fcb98200c57ef /builtin/replace.c
parentf8e44a81bf82ae35e37500f9597e93b0bdfc05e4 (diff)
downloadgit-ee521ec4cb09981c14ec32aca370b5ff5d15c4d9.zip
git-ee521ec4cb09981c14ec32aca370b5ff5d15c4d9.tar.gz
git-ee521ec4cb09981c14ec32aca370b5ff5d15c4d9.tar.bz2
replace: peel tag when passing a tag first to --graft
When passing a tag as the first argument to `git replace --graft`, it can be useful to accept it and use the underlying commit as a the commit that will be replaced. This already works for lightweight tags, but unfortunately for annotated tags we have been using the hash of the tag object instead of the hash of the underlying commit. Especially we would pass the hash of the tag object to replace_object_oid() where we would likely fail with an error like: "error: Objects must be of the same type. 'annotated_replaced_object' points to a replaced object of type 'tag' while 'replacement' points to a replacement object of type 'commit'." This patch fixes that by using the hash of the underlying commit when an annotated tag is passed. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/replace.c')
-rw-r--r--builtin/replace.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/builtin/replace.c b/builtin/replace.c
index 730a644..a06dc2b 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -477,15 +477,18 @@ static int create_graft(int argc, const char **argv, int force, int gentle)
strbuf_release(&buf);
- if (oideq(&old_oid, &new_oid)) {
+ if (oideq(&commit->object.oid, &new_oid)) {
if (gentle) {
- warning(_("graft for '%s' unnecessary"), oid_to_hex(&old_oid));
+ warning(_("graft for '%s' unnecessary"),
+ oid_to_hex(&commit->object.oid));
return 0;
}
- return error(_("new commit is the same as the old one: '%s'"), oid_to_hex(&old_oid));
+ return error(_("new commit is the same as the old one: '%s'"),
+ oid_to_hex(&commit->object.oid));
}
- return replace_object_oid(old_ref, &old_oid, "replacement", &new_oid, force);
+ return replace_object_oid(old_ref, &commit->object.oid,
+ "replacement", &new_oid, force);
}
static int convert_graft_file(int force)