Michael Haggerty <mhagger@xxxxxxxxxxxx> writes: > The library could do the normalization, but > > 1. It would probably cost a lot of redundant checks as reference names > pass in and out of the library and back in again > > 2. Normalization requires copying or overwriting the incoming string, so > each time a refname crosses the library perimeter there might have to be > an extra memory allocation with the associated headaches of dealing with > the ownership of the memory. > > 3. The library doesn't encapsulate all uses of reference names; for > example, for_each_ref() invokes a callback function with the refname as > an argument. The callback function is free to do a strcmp() of the > refname (normalized by the library) with some arbitrary string that it > got from the command line. Either the caller has to do the > normalization itself (i.e., outside of the library) or the library has > to learn how to do every possible filtering operation with refnames. 4. The caller needs to be corrected to pay attention to the normalization the library did for it. Your code may use a string as a ref and then create something based on the refname; illustrating with a fictitious example: ref = make_branch_ref("refs/heads/%s", branch_name); update_ref(ref, sha1); write_log("created branch '%s'", branch_name); Even though make_branch_ref() may have removed duplicated slashes from the name in "branch_name" when it computed "ref", the log still will record unnormalized name. I think the callers need to be aware of the normalization in practice anyway for this reason, and a good way forward is to give the callers a library interface to do so. It might even make sense to make the other parts of the API _reject_ unnormalized input to catch offending callers. By the way, does this series introduce new infrastructure features that can be reused in different areas, such as Hui's "alt_odb path normalization" patch? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html