On Sun, Jun 20, 2021 at 6:53 PM ZheNing Hu <adlternative@xxxxxxxxx> wrote: > > My fifth week blog finished: > The web version is here: > https://adlternative.github.io/GSOC-Git-Blog-5/ Great, thanks! > ## Week5: Tempting apple > > This week, I spent a lot of time working on the digital circuit > course design of the school. So this week's patches for git > was completed in a hurry. This week `Ævar Arnfjörð Bjarmason` s/was/were/ > gave a lot of useful suggestions for the patch I wrote earlier. Maybe a link could help. > Some are related to code style improvements, and some are > better design ideas. [...] > But something like `fill_remote_ref_details()`, things gradually > become complicated and difficult. `fill_remote_ref_details()`. I think you can remove the above `fill_remote_ref_details()` as you are talking about it later. > Just consider the `show_ref()` called in `fill_remote_ref_details()`, > `show_ref()` may call `shorten_unambiguous_ref()` internally, and > then another function is called internally in `shorten_unambiguous_ref()`... > Well, this is one of the reasons why I cannot move on. > > On the other hand, look at the following piece of code, it appears > in `populate_value()`. > > ```c > for (i = 0; i < used_atom_cnt; i++) { > struct atom_value *v = &ref->value[i]; > if (v->s == NULL && used_atom[i].source == SOURCE_NONE) > return strbuf_addf_ret(err, -1, _("missing object %s for %s"), > oid_to_hex(&ref->objectname), ref->refname); > } > ``` > > We need to determine whether `v->s` equals to `NULL`. We can use s/equals to/equals/ > c-style strings to easily distinguish between empty strings(`xstrdup("")`) > and `NULL`, but if we use strbuf, it is not easy to distinguish, because > an empty strbuf has the following characteristics: `s.buf == strbuf_slopbuf` > or `sb->buf[0] == '\0'`. It can be said that we shouldn’t even use `NULL` > to assign to `s.buf`. > > So in the end, I rejected this seemingly very attractive solution, and use the > previous strategy: `<s, s_size>`, unless someone can think of a better > solution later `;-)`. > > * FootNote: > 1. Why is there no `strbuf_empty()` in `strbuf` API? I think this may be > a very important thing. There is a 'size_t len' field in 'struct strbuf', so doing `buf->len == 0` works. > 2. Another thing worth mentioning is: I will have the school final exam > between July 7th and July 14th, I may be busy during this period. Ok, thanks for telling us in advance.