Thread (10 messages) 10 messages, 3 authors, 2018-03-28

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