Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> You do not have anything to say above the S-o-b line? The primary effect of this patch is to change the lifespan and ownership rule of the piece of memory used for state.branch/state.onto and moving the strbuf is a mere logical consequence of that change. It is not explained why this change is a good idea. > --- > wt-status.c | 65 ++++++++++++++++++++++++++++--------------------------------- > wt-status.h | 4 ++-- > 2 files changed, 32 insertions(+), 37 deletions(-) > > diff --git a/wt-status.c b/wt-status.c > index ef405d0..6cac27b 100644 > --- a/wt-status.c > +++ b/wt-status.c > @@ -969,41 +969,41 @@ static void show_bisect_in_progress(struct wt_status *s, > /* > * Extract branch information from rebase/bisect > */ > -static void read_and_strip_branch(struct strbuf *sb, > - const char **branch, > - const char *path) > +static char *read_and_strip_branch(const char *path) > { > + struct strbuf sb = STRBUF_INIT; > unsigned char sha1[20]; > > - strbuf_reset(sb); > - if (strbuf_read_file(sb, git_path("%s", path), 0) <= 0) > - return; > + if (strbuf_read_file(&sb, git_path("%s", path), 0) <= 0) > + goto got_nothing; > > - while (sb->len && sb->buf[sb->len - 1] == '\n') > - strbuf_setlen(sb, sb->len - 1); > - if (!sb->len) > - return; > - if (!prefixcmp(sb->buf, "refs/heads/")) > - *branch = sb->buf + strlen("refs/heads/"); > - else if (!prefixcmp(sb->buf, "refs/")) > - *branch = sb->buf; > - else if (!get_sha1_hex(sb->buf, sha1)) { > + while (&sb.len && sb.buf[sb.len - 1] == '\n') > + strbuf_setlen(&sb, sb.len - 1); > + if (!sb.len) > + goto got_nothing; > + if (!prefixcmp(sb.buf, "refs/heads/")) > + strbuf_remove(&sb,0, strlen("refs/heads/")); > + else if (!prefixcmp(sb.buf, "refs/")) > + ; > + else if (!get_sha1_hex(sb.buf, sha1)) { > const char *abbrev; > abbrev = find_unique_abbrev(sha1, DEFAULT_ABBREV); > - strbuf_reset(sb); > - strbuf_addstr(sb, abbrev); > - *branch = sb->buf; > - } else if (!strcmp(sb->buf, "detached HEAD")) /* rebase */ > - ; > + strbuf_reset(&sb); > + strbuf_addstr(&sb, abbrev); > + } else if (!strcmp(sb.buf, "detached HEAD")) /* rebase */ > + goto got_nothing; > else /* bisect */ > - *branch = sb->buf; > + ; > + return strbuf_detach(&sb, NULL); > + > +got_nothing: > + strbuf_release(&sb); > + return NULL; > } > > static void wt_status_print_state(struct wt_status *s) > { > const char *state_color = color(WT_STATUS_HEADER, s); > - struct strbuf branch = STRBUF_INIT; > - struct strbuf onto = STRBUF_INIT; > struct wt_status_state state; > struct stat st; > > @@ -1018,27 +1018,22 @@ static void wt_status_print_state(struct wt_status *s) > state.am_empty_patch = 1; > } else { > state.rebase_in_progress = 1; > - read_and_strip_branch(&branch, &state.branch, > - "rebase-apply/head-name"); > - read_and_strip_branch(&onto, &state.onto, > - "rebase-apply/onto"); > + state.branch = read_and_strip_branch("rebase-apply/head-name"); > + state.onto = read_and_strip_branch("rebase-apply/onto"); > } > } else if (!stat(git_path("rebase-merge"), &st)) { > if (!stat(git_path("rebase-merge/interactive"), &st)) > state.rebase_interactive_in_progress = 1; > else > state.rebase_in_progress = 1; > - read_and_strip_branch(&branch, &state.branch, > - "rebase-merge/head-name"); > - read_and_strip_branch(&onto, &state.onto, > - "rebase-merge/onto"); > + state.branch = read_and_strip_branch("rebase-merge/head-name"); > + state.onto = read_and_strip_branch("rebase-merge/onto"); > } else if (!stat(git_path("CHERRY_PICK_HEAD"), &st)) { > state.cherry_pick_in_progress = 1; > } > if (!stat(git_path("BISECT_LOG"), &st)) { > state.bisect_in_progress = 1; > - read_and_strip_branch(&branch, &state.branch, > - "BISECT_START"); > + state.branch = read_and_strip_branch("BISECT_START"); > } > > if (state.merge_in_progress) > @@ -1051,8 +1046,8 @@ static void wt_status_print_state(struct wt_status *s) > show_cherry_pick_in_progress(s, &state, state_color); > if (state.bisect_in_progress) > show_bisect_in_progress(s, &state, state_color); > - strbuf_release(&branch); > - strbuf_release(&onto); > + free(state.branch); > + free(state.onto); > } > > void wt_status_print(struct wt_status *s) > diff --git a/wt-status.h b/wt-status.h > index 81e1dcf..b8c3512 100644 > --- a/wt-status.h > +++ b/wt-status.h > @@ -79,8 +79,8 @@ struct wt_status_state { > int rebase_interactive_in_progress; > int cherry_pick_in_progress; > int bisect_in_progress; > - const char *branch; > - const char *onto; > + char *branch; > + char *onto; > }; > > void wt_status_prepare(struct wt_status *s); -- 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