Thread (3 messages) flat view 3 messages, 2 authors, 2021-06-21

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help