Re: [PATCH v2 3/6] stash: convert apply to builtin
From: Joel Teichroeb <hidden>
Date: 2018-03-28 03:32:46
On Mon, Mar 26, 2018 at 12:05 AM, Christian Couder [off-list ref] wrote:
On Mon, Mar 26, 2018 at 3:14 AM, Joel Teichroeb [off-list ref] wrote:quoted
Signed-off-by: Joel Teichroeb <redacted>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.quoted
+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.quoted
+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.quoted
+ 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()?quoted
+ +Spurious new line. [...]quoted
+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.quoted
+ + 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.quoted
+ struct child_process cp = CHILD_PROCESS_INIT;Maybe add a new line here to be more consistent with other such functions.quoted
+ 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); +}[...]quoted
+ 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.quoted
+ 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.