| 711 | } |
| 712 | |
| 713 | static int rename_one_ref(const struct reference *ref, void *cb_data) |
| 714 | { |
| 715 | struct strbuf new_referent = STRBUF_INIT; |
| 716 | struct strbuf new_refname = STRBUF_INIT; |
| 717 | struct rename_info *rename = cb_data; |
| 718 | const struct object_id *oid = ref->oid; |
| 719 | const char *referent = ref->target; |
| 720 | int error; |
| 721 | |
| 722 | compute_renamed_ref(rename, ref->name, &new_refname); |
| 723 | |
| 724 | if (ref->flags & REF_ISSYMREF) { |
| 725 | /* |
| 726 | * Stupidly enough `referent` is not pointing to the immediate |
| 727 | * target of a symref, but it's the recursively resolved value. |
| 728 | * So symrefs pointing to symrefs would be misresolved, and |
| 729 | * unborn symrefs don't have any value for the `referent` at all. |
| 730 | */ |
| 731 | referent = refs_resolve_ref_unsafe(get_main_ref_store(the_repository), |
| 732 | ref->name, RESOLVE_REF_NO_RECURSE, |
| 733 | NULL, NULL); |
| 734 | compute_renamed_ref(rename, referent, &new_referent); |
| 735 | oid = NULL; |
| 736 | } |
| 737 | |
| 738 | error = ref_transaction_delete(rename->transaction, ref->name, |
| 739 | oid, referent, REF_NO_DEREF, NULL, rename->err); |
| 740 | if (error < 0) |
| 741 | goto out; |
| 742 | |
| 743 | error = ref_transaction_update(rename->transaction, new_refname.buf, oid, null_oid(the_hash_algo), |
| 744 | (ref->flags & REF_ISSYMREF) ? new_referent.buf : NULL, NULL, |
| 745 | REF_SKIP_CREATE_REFLOG | REF_NO_DEREF | REF_SKIP_OID_VERIFICATION, |
| 746 | NULL, rename->err); |
| 747 | if (error < 0) |
| 748 | goto out; |
| 749 | |
| 750 | error = rename_one_reflog(ref->name, oid, rename); |
| 751 | if (error < 0) |
| 752 | goto out; |
| 753 | |
| 754 | display_progress(rename->progress, ++rename->progress_nr); |
| 755 | |
| 756 | out: |
| 757 | strbuf_release(&new_referent); |
| 758 | strbuf_release(&new_refname); |
| 759 | return error; |
| 760 | } |
| 761 | |
| 762 | static int migrate_file(struct remote *remote) |
| 763 | { |
nothing calls this directly
no test coverage detected