if (ret)
goto done;
- if (strcmp(ref.refname, refname)) {
+ if (strcmp(ref.refname, refname) ||
+ reftable_ref_record_is_deletion(&ref)) {
ret = 1;
goto done;
}
oidread(oid, reftable_ref_record_val1(&ref),
&hash_algos[hash_id]);
} else {
- /* We got a tombstone, which should not happen. */
BUG("unhandled reference value type %d", ref.value_type);
}
break;
}
+ if (iter->ref.value_type == REFTABLE_REF_DELETION)
+ continue;
+
if (iter->exclude_patterns && should_exclude_current_ref(iter))
continue;
ret = 0;
break;
}
+ if (reftable_log_record_is_deletion(&log))
+ continue;
ALLOC_GROW(logs, logs_nr + 1, logs_alloc);
tombstone = &logs[logs_nr++];
ret = 0;
break;
}
+ if (reftable_log_record_is_deletion(&old_log))
+ continue;
free(old_log.refname);
if (iter->err)
break;
+ if (reftable_log_record_is_deletion(&iter->log))
+ continue;
+
/*
* We want the refnames that we have reflogs for, so we skip if
* we've already produced this name. This could be faster by
ret = 0;
break;
}
+ if (reftable_log_record_is_deletion(&log))
+ continue;
ret = yield_log_record(refs, &log, fn, cb_data);
if (ret)
ret = 0;
break;
}
+ if (reftable_log_record_is_deletion(&log)) {
+ reftable_log_record_release(&log);
+ continue;
+ }
ALLOC_GROW(logs, logs_nr + 1, logs_alloc);
logs[logs_nr++] = log;
goto done;
/*
- * Check whether we get at least one log record for the given ref name.
- * If so, the reflog exists, otherwise it doesn't.
+ * Check whether we get at least one non-deleted log record for the
+ * given ref name. If so, the reflog exists, otherwise it doesn't.
*/
- ret = reftable_iterator_next_log(&it, &log);
- if (ret < 0)
- goto done;
- if (ret > 0) {
- ret = 0;
- goto done;
+ while (1) {
+ ret = reftable_iterator_next_log(&it, &log);
+ if (ret < 0)
+ goto done;
+ if (ret > 0) {
+ ret = 0;
+ goto done;
+ }
+ if (strcmp(log.refname, refname)) {
+ ret = 0;
+ goto done;
+ }
+ if (!reftable_log_record_is_deletion(&log))
+ break;
}
- ret = strcmp(log.refname, refname) == 0;
+ ret = 1;
done:
reftable_iterator_destroy(&it);
ret = 0;
break;
}
+ if (reftable_log_record_is_deletion(&log))
+ continue;
tombstone.refname = (char *)arg->refname;
tombstone.value_type = REFTABLE_LOG_DELETION;
reftable_log_record_release(&log);
break;
}
+ if (reftable_log_record_is_deletion(&log)) {
+ reftable_log_record_release(&log);
+ continue;
+ }
oidread(&old_oid, log.value.update.old_hash,
ref_store->repo->hash_algo);
report.path = refname.buf;
switch (ref.value_type) {
+ case REFTABLE_REF_DELETION:
+ continue;
case REFTABLE_REF_VAL1:
case REFTABLE_REF_VAL2: {
struct object_id oid;