Hi Thomas,
On Mon, 15 Oct 2018, Thomas Gummerer wrote:
> 2: 63f2e0e6f9 ! 2: 2d45985676 strbuf.c: add `strbuf_join_argv()`
> @@ -14,19 +14,17 @@
> strbuf_setlen(sb, sb->len + sb2->len);
> }
>
> -+const char *strbuf_join_argv(struct strbuf *buf,
> -+ int argc, const char **argv, char delim)
> ++void strbuf_join_argv(struct strbuf *buf,
> ++ int argc, const char **argv, char delim)
While the patch series does not use the return value, I have to ask
whether it would really be useful to change it to return `void`. I could
imagine that there may already be quite a few code paths that would love
to use strbuf_join_argv(), *and* would benefit from the `const char *`
return value.
In other words: just because the *current* patches do not make use of that
quite convenient return value does not mean that we should remove that
convenience.
> 7: a2abd1b4bd ! 8: 974dbaa492 stash: convert apply to builtin
> @@ -370,18 +370,20 @@
> +
> + if (diff_tree_binary(&out, &info->w_commit)) {
> + strbuf_release(&out);
> -+ return -1;
> ++ return error(_("Could not generate diff
> %s^!."),
> ++
> oid_to_hex(&info->w_commit));
Please start the argument of an `error()` call with a lower-case letter.
> + }
> +
> + ret = apply_cached(&out);
> + strbuf_release(&out);
> + if (ret)
> -+ return -1;
> ++ return error(_("Conflicts in index."
> ++ "Try without --index."));
Same here.
> +
> + discard_cache();
> + read_cache();
> + if (write_cache_as_tree(&index_tree, 0, NULL))
> -+ return -1;
> ++ return error(_("Could not save index
> tree"));
And here.
> 15: bd827be103 ! 15: 989db67e9a stash: convert create to builtin
> @@ -119,7 +119,6 @@
> +static int check_changes(struct pathspec ps, int include_untracked)
> +{
> + int result;
> -+ int ret = 0;
I was curious about this change, and could not find it in the
git-stash-v10 tag of https://github.com/ungps/git...
> 18: 1c501ad666 ! 18: c90e30173a stash: convert save to builtin
> @@ -72,8 +72,10 @@
> + git_stash_helper_save_usage,
> + PARSE_OPT_KEEP_DASHDASH);
> +
> -+ if (argc)
> -+ stash_msg = (char*) strbuf_join_argv(&buf, argc, argv,
> ' ');
> ++ if (argc) {
> ++ strbuf_join_argv(&buf, argc, argv, ' ');
> ++ stash_msg = buf.buf;
> ++ }
Aha! So there *was* a user of that return value. I really would prefer a
non-void return value here.
> 19: c4401b21db ! 19: 4360ea875d stash: convert `stash--helper.c` into
> `stash.c`
> @@ -264,9 +320,9 @@
> - argc = parse_options(argc, argv, prefix, options,
> - git_stash_helper_create_usage,
> - 0);
> -+ /* Startinf with argv[1], since argv[0] is "create" */
> -+ stash_msg = (char*) strbuf_join_argv(&stash_msg_buf, argc - 1,
> -+ ++argv, ' ');
> ++ /* Starting with argv[1], since argv[0] is "create" */
> ++ strbuf_join_argv(&stash_msg_buf, argc - 1, ++argv, ' ');
> ++ stash_msg = stash_msg_buf.buf;
Again, I would strongly prefer the convenience of assigning the return
value directly, rather than having two lines.
> @@ -375,10 +425,8 @@
> + * they need to be immediately followed by a
> string
> + * (i.e.`-m"foobar"` or `--message="foobar"`).
> + */
> -+ if ((strlen(argv[i]) > 2 &&
> -+ !strncmp(argv[i], "-m", 2)) ||
> -+ (strlen(argv[i]) > 10 &&
> -+ !strncmp(argv[i], "--message=", 10)))
> ++ if (starts_with(argv[i], "-m") ||
> ++ starts_with(argv[i], "--message="))
Very nice.
> 20: 92dc11fd16 ! 20: a384b05008 stash: optimize `get_untracked_files()` and
> `check_changes()`
> @@ -52,7 +52,6 @@
> +static int check_changes_tracked_files(struct pathspec ps)
> {
> int result;
> -- int ret = 0;
I also wonder about this change, in light of...
> struct rev_info rev;
> struct object_id dummy;
> - struct strbuf out = STRBUF_INIT;
> @@ -99,8 +98,8 @@
> - if (!check_changes(ps, include_untracked)) {
> + if (!check_changes(ps, include_untracked, &untracked_files)) {
> ret = 1;
this here line. How does that work, if `ret` is removed? And why didn't
the `make DEVELOPER=1` complain about that unused `ret` variable before?
> - *stash_msg = NULL;
> goto done;
> + }
> @@
> goto done;
The rest of the changes looks pretty sensible to me (indentation/wrapping
changes, mostly, with a couple of commit message/typo fixes thrown in).
Maybe you have a commit hash, or even better, a tag in a public Git
repository somewhere, so that Paul can pick it up more easily (and compare
the changes with his latest local branch)?
Thank you!
Dscho