Merge branch 'cc/replace-graft-peel-tags'

When given a tag that points at a commit-ish, "git replace --graft"
failed to peel the tag before writing a replace ref, which did not
make sense because the old graft mechanism the feature wants to
mimick only allowed to replace one commit object with another.
This has been fixed.

* cc/replace-graft-peel-tags:
  replace: peel tag when passing a tag first to --graft
  replace: peel tag when passing a tag as parent to --graft
  t6050: redirect expected error output to a file
  t6050: use test_line_count instead of wc -l
This commit is contained in:
Junio C Hamano
2019-05-09 00:37:24 +09:00
2 changed files with 41 additions and 10 deletions

View File

@ -370,16 +370,19 @@ static int replace_parents(struct strbuf *buf, int argc, const char **argv)
/* prepare new parents */
for (i = 0; i < argc; i++) {
struct object_id oid;
struct commit *commit;
if (get_oid(argv[i], &oid) < 0) {
strbuf_release(&new_parents);
return error(_("not a valid object name: '%s'"),
argv[i]);
}
if (!lookup_commit_reference(the_repository, &oid)) {
commit = lookup_commit_reference(the_repository, &oid);
if (!commit) {
strbuf_release(&new_parents);
return error(_("could not parse %s"), argv[i]);
return error(_("could not parse %s as a commit"), argv[i]);
}
strbuf_addf(&new_parents, "parent %s\n", oid_to_hex(&oid));
strbuf_addf(&new_parents, "parent %s\n", oid_to_hex(&commit->object.oid));
}
/* replace existing parents with new ones */
@ -478,15 +481,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)