Josh Steadmon <steadmon@xxxxxxxxxx> writes: >> Having a look at the final structure of the loop with these gotos, I'm a >> little confused. Could be this isn't C-idiomatic but I think the code >> could be easier to read with helpers instead of gotos. I realize it's >> longer but I have a hard time understanding that your gotos are used to >> double-continue or double-break; nested loops tend to make me want to >> use helpers. But - I'm a lowly barely-reformed C++ developer, so what do >> I know ;) >> >> int oid_in_promisor(oid) { >> for (p = get_all_packs(the_repository); p; p = p->next) { >> if (!p->pack_promisor) >> continue; >> if (find_pack_entry_one(oid.hash, p) >> return 1; >> } >> } >> >> int all_oids_in_promisors(oid, fn, cb_data) >> { >> do { >> if (! oid_in_promisor(oid)) >> return 0; >> } while (!fn(cb_data, &oid)); >> return 1; >> } >> >> int check_connected(...) >> { >> ... >> if (has_promisor_remote()) { >> if (all_oids_in_promisors(oid, fn, cb_data)) >> return 0; >> if (opt->shallow_file) { >> ... >> } > > I like this version better as well. Sounds good. Jonathan? I've squashed Josh'es Reviewed-by, but I will refrain from merging it to 'next' just yet to see if you too like the proposed code structure. Thanks, all.