| 1679 | } |
| 1680 | |
| 1681 | int reftable_stack_read_ref(struct reftable_stack *st, const char *refname, |
| 1682 | struct reftable_ref_record *ref) |
| 1683 | { |
| 1684 | struct reftable_iterator it = { 0 }; |
| 1685 | int ret; |
| 1686 | |
| 1687 | ret = reftable_merged_table_init_ref_iterator(st->merged, &it); |
| 1688 | if (ret) |
| 1689 | goto out; |
| 1690 | |
| 1691 | ret = reftable_iterator_seek_ref(&it, refname); |
| 1692 | if (ret) |
| 1693 | goto out; |
| 1694 | |
| 1695 | ret = reftable_iterator_next_ref(&it, ref); |
| 1696 | if (ret) |
| 1697 | goto out; |
| 1698 | |
| 1699 | if (strcmp(ref->refname, refname) || |
| 1700 | reftable_ref_record_is_deletion(ref)) { |
| 1701 | reftable_ref_record_release(ref); |
| 1702 | ret = 1; |
| 1703 | goto out; |
| 1704 | } |
| 1705 | |
| 1706 | out: |
| 1707 | reftable_iterator_destroy(&it); |
| 1708 | return ret; |
| 1709 | } |
| 1710 | |
| 1711 | int reftable_stack_read_log(struct reftable_stack *st, const char *refname, |
| 1712 | struct reftable_log_record *log) |