in glean/rts/ownership/derived.cpp [19:58]
void DefineOwnership::derivedFrom(Id id, const std::set<UsetId>& deps) {
if (deps.size() == 0) {
LOG(ERROR) << "DefineOwnership::derivedFrom: empty deps";
return;
}
SetU32 set = SetU32::from(deps);
UsetId usetid;
if (set.size() == 1) {
usetid = *deps.begin();
} else {
auto uset = std::make_unique<Uset>(set, And, 0);
size_t size = set.size();
usetid = ownership_->lookupSet(uset.get());
if (usetid == INVALID_USET) {
auto q = uset.get();
auto p = usets_.add(std::move(uset));
if (p == q) {
usets_.promote(p);
usetid = p->id;
newSets_.push_back(p);
VLOG(2) << "new set: " << usetid << ", size = " << size;
} else {
usetid = p->id;
VLOG(2) << "existing set in batch: " << usetid;
}
} else {
VLOG(2) << "existing set in DB: " << usetid;
}
}
if (id >= first_id_) {
new_ids_.push_back(id);
new_owners_.push_back(usetid);
} else {
ids_.push_back(id);
owners_.push_back(usetid);
}
}