On Mon, Mar 26, 2018 at 12:05 AM, Christian Couder <christian.couder@xxxxxxxxx> wrote: > On Mon, Mar 26, 2018 at 3:14 AM, Joel Teichroeb <joel@xxxxxxxxxxxxx> wrote: >> Signed-off-by: Joel Teichroeb <joel@xxxxxxxxxxxxx> > > The commit message in this patch and the following ones could be a bit > more verbose. It could at least tell that the end goal is to convert > git-stash.sh to a C builtin. > >> +static void destroy_stash_info(struct stash_info *info) >> +{ >> + strbuf_release(&info->revision); >> +} > > Not sure if "destroy" is the right word in the function name. I would > have used "free" instead. > >> +static int get_stash_info(struct stash_info *info, int argc, const char **argv) >> +{ >> + struct strbuf w_commit_rev = STRBUF_INIT; >> + struct strbuf b_commit_rev = STRBUF_INIT; >> + struct strbuf w_tree_rev = STRBUF_INIT; >> + struct strbuf b_tree_rev = STRBUF_INIT; >> + struct strbuf i_tree_rev = STRBUF_INIT; >> + struct strbuf u_tree_rev = STRBUF_INIT; >> + struct strbuf symbolic = STRBUF_INIT; >> + struct strbuf out = STRBUF_INIT; >> + int ret; >> + const char *revision; >> + const char *commit = NULL; >> + char *end_of_rev; >> + info->is_stash_ref = 0; >> + >> + if (argc > 1) { >> + int i; >> + fprintf(stderr, _("Too many revisions specified:")); >> + for (i = 0; i < argc; ++i) { >> + fprintf(stderr, " '%s'", argv[i]); >> + } > > The brackets are not needed. > >> + fprintf(stderr, "\n"); >> + >> + return -1; >> + } >> + >> + if (argc == 1) >> + commit = argv[0]; >> + >> + strbuf_init(&info->revision, 0); >> + if (commit == NULL) { >> + if (have_stash()) { >> + destroy_stash_info(info); >> + return error(_("No stash entries found.")); >> + } >> + >> + strbuf_addf(&info->revision, "%s@{0}", ref_stash); >> + } else if (strspn(commit, "0123456789") == strlen(commit)) { >> + strbuf_addf(&info->revision, "%s@{%s}", ref_stash, commit); >> + } else { >> + strbuf_addstr(&info->revision, commit); >> + } >> + >> + revision = info->revision.buf; >> + >> + strbuf_addf(&w_commit_rev, "%s", revision); > > Maybe use strbuf_addstr()? > >> + >> + > > Spurious new line. > > [...] > >> +static int diff_cached_index(struct strbuf *out, struct object_id *c_tree) >> +{ >> + struct child_process cp = CHILD_PROCESS_INIT; >> + const char *c_tree_hex = oid_to_hex(c_tree); > > Indent looks weird. > >> + >> + cp.git_cmd = 1; >> + argv_array_pushl(&cp.args, "diff-index", "--cached", "--name-only", "--diff-filter=A", NULL); >> + argv_array_push(&cp.args, c_tree_hex); >> + return pipe_command(&cp, NULL, 0, out, 0, NULL, 0); >> +} >> + >> +static int update_index(struct strbuf *out) { > > The opening bracket should be on its own line. > >> + struct child_process cp = CHILD_PROCESS_INIT; > > Maybe add a new line here to be more consistent with other such functions. > >> + cp.git_cmd = 1; >> + argv_array_pushl(&cp.args, "update-index", "--add", "--stdin", NULL); >> + return pipe_command(&cp, out->buf, out->len, NULL, 0, NULL, 0); >> +} > > [...] > >> + if (info->has_u) { >> + struct child_process cp = CHILD_PROCESS_INIT; >> + struct child_process cp2 = CHILD_PROCESS_INIT; >> + int res; >> + >> + cp.git_cmd = 1; >> + argv_array_push(&cp.args, "read-tree"); >> + argv_array_push(&cp.args, oid_to_hex(&info->u_tree)); >> + argv_array_pushf(&cp.env_array, "GIT_INDEX_FILE=%s", stash_index_path); >> + >> + cp2.git_cmd = 1; >> + argv_array_pushl(&cp2.args, "checkout-index", "--all", NULL); >> + argv_array_pushf(&cp2.env_array, "GIT_INDEX_FILE=%s", stash_index_path); > > Maybe use small functions for the above read-tree and checkout-index. > >> + res = run_command(&cp) || run_command(&cp2); >> + remove_path(stash_index_path); >> + if (res) >> + return error(_("Could not restore untracked files from stash")); >> + } > > Thanks. Thanks for your detailed comments! I've fixed them all in my next patch set.