Re: [GSoC] Git Blog 5
From: Christian Couder <hidden>
Date: 2021-06-21 12:07:46
On Sun, Jun 20, 2021 at 6:53 PM ZheNing Hu [off-list ref] 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()`.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.