git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Paul Sebastian Ungureanu <ungureanupaulsebastian@gmail.com>
To: Thomas Gummerer <t.gummerer@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: [GSoC][PATCH v7 15/26] stash: convert create to builtin
Date: Sat, 18 Aug 2018 18:39:08 +0300	[thread overview]
Message-ID: <CADzBBBaO3em0kcebL5kiE1JxSEsea2OFrzyRUgfEDjrwV6fxsw@mail.gmail.com> (raw)
In-Reply-To: <20180815221305.GQ2734@hank.intra.tgummerer.com>

On Thu, Aug 16, 2018 at 1:13 AM, Thomas Gummerer <t.gummerer@gmail.com> wrote:
> On 08/08, Paul-Sebastian Ungureanu wrote:
>> Add stash create to the helper.
>>
>> Signed-off-by: Paul-Sebastian Ungureanu <ungureanupaulsebastian@gmail.com>
>> ---
>>  builtin/stash--helper.c | 406 ++++++++++++++++++++++++++++++++++++++++
>>  git-stash.sh            |   2 +-
>>  2 files changed, 407 insertions(+), 1 deletion(-)
>>
>> diff --git a/builtin/stash--helper.c b/builtin/stash--helper.c
>> index 5ff810f8c..a4e57899b 100644
>> --- a/builtin/stash--helper.c
>> +++ b/builtin/stash--helper.c
>> @@ -21,6 +21,7 @@ static const char * const git_stash_helper_usage[] = {
>>       N_("git stash--helper branch <branchname> [<stash>]"),
>>       N_("git stash--helper clear"),
>>       N_("git stash--helper store [-m|--message <message>] [-q|--quiet] <commit>"),
>> +     N_("git stash--helper create [<message>]"),
>>       NULL
>>  };
>>
>> @@ -64,6 +65,11 @@ static const char * const git_stash_helper_store_usage[] = {
>>       NULL
>>  };
>>
>> +static const char * const git_stash_helper_create_usage[] = {
>> +     N_("git stash--helper create [<message>]"),
>> +     NULL
>> +};
>> +
>>  static const char *ref_stash = "refs/stash";
>>  static int quiet;
>>  static struct strbuf stash_index_path = STRBUF_INIT;
>> @@ -781,6 +787,404 @@ static int store_stash(int argc, const char **argv, const char *prefix)
>>       return do_store_stash(argv[0], stash_msg, quiet);
>>  }
>>
>> [...]
>>
>> +
>> +static int do_create_stash(int argc, const char **argv, const char *prefix,
>> +                        const char **stash_msg, int include_untracked,
>> +                        int patch_mode, struct stash_info *info)
>> +{
>> +     int untracked_commit_option = 0;
>> +     int ret = 0;
>> +     int subject_len;
>> +     int flags;
>> +     const char *head_short_sha1 = NULL;
>> +     const char *branch_ref = NULL;
>> +     const char *head_subject = NULL;
>> +     const char *branch_name = "(no branch)";
>> +     struct commit *head_commit = NULL;
>> +     struct commit_list *parents = NULL;
>> +     struct strbuf msg = STRBUF_INIT;
>> +     struct strbuf commit_tree_label = STRBUF_INIT;
>> +     struct strbuf out = STRBUF_INIT;
>> +     struct strbuf final_stash_msg = STRBUF_INIT;
>> +
>> +     read_cache_preload(NULL);
>> +     refresh_cache(REFRESH_QUIET);
>> +
>> +     if (!check_changes(argv, include_untracked, prefix)) {
>> +             ret = 1;
>> +             goto done;
>
> I wonder if we can just 'exit(0)' here, instead of returning.  This
> whole command is a builtin, and I *think* outside of 'libgit.a' exiting
> early is fine.  It does mean that we're not free'ing the memory
> though, which means a leak checker would probably complain.  So
> dunno.  It would simplify the code a little, but not sure it's worth it.

Indeed, there shouldn't be any problem by calling exit(0).

>> +     }
>> +
>> +     if (get_oid("HEAD", &info->b_commit)) {
>> +             fprintf_ln(stderr, "You do not have the initial commit yet");
>> +             ret = -1;
>> +             goto done;
>> +     } else {
>> +             head_commit = lookup_commit(the_repository, &info->b_commit);
>> +     }
>> +
>> +     branch_ref = resolve_ref_unsafe("HEAD", 0, NULL, &flags);
>> +     if (flags & REF_ISSYMREF)
>> +             branch_name = strrchr(branch_ref, '/') + 1;
>> +     head_short_sha1 = find_unique_abbrev(&head_commit->object.oid,
>> +                                          DEFAULT_ABBREV);
>> +     subject_len = find_commit_subject(get_commit_buffer(head_commit, NULL),
>> +                                       &head_subject);
>> +     strbuf_addf(&msg, "%s: %s %.*s\n", branch_name, head_short_sha1,
>> +                 subject_len, head_subject);
>
> I think this can be written in a slightly simpler way:
>
>         head_short_sha1 = find_unique_abbrev(&head_commit->object.oid,
>                                              DEFAULT_ABBREV);
>         strbuf_addf(&msg, "%s: %s", branch_name, head_short_sha1);
>         pp_commit_easy(CMIT_FMT_ONELINE, head_commit, &msg);
>         strbuf_addch(&msg, '\n');
>
> The other advantage this brings is that it is consistent with other
> places where we print/use the subject of a commit (e.g. in 'git reset
> --hard').

Thanks for this suggestion.

>> +
>> +     strbuf_addf(&commit_tree_label, "index on %s\n", msg.buf);
>> +     commit_list_insert(head_commit, &parents);
>> +     if (write_cache_as_tree(&info->i_tree, 0, NULL) ||
>> +         commit_tree(commit_tree_label.buf, commit_tree_label.len,
>> +                     &info->i_tree, parents, &info->i_commit, NULL, NULL)) {
>> +             fprintf_ln(stderr, "Cannot save the current index state");
>
> Looks like this message is translated in the current 'git stash'
> implementation, so it should be here as well.  Same for the messages
> below.
>
>> +             ret = -1;
>> +             goto done;
>> +     }
>> +
>> +     if (include_untracked && get_untracked_files(argv, 1,
>> +                                                  include_untracked, &out)) {
>> +             if (save_untracked_files(info, &msg, &out)) {
>> +                     printf_ln("Cannot save the untracked files");
>
> Why does this go to stdout, whereas "Cannot save the current index
> state" above goes to stderr?  In the shell version of git stash these
> all go to stderr fwiw.  There are a few similar cases, it would
> probably be worth going through all the print statements here and see
> if they need to be translated, and to which output stream they should
> go.

This is what I am going to do.

>> +                     ret = -1;
>> +                     goto done;
>> +             }
>> +             untracked_commit_option = 1;
>> +     }
>> +     if (patch_mode) {
>> +             ret = stash_patch(info, argv);
>> +             if (ret < 0) {
>> +                     printf_ln("Cannot save the current worktree state");
>> +                     goto done;
>> +             } else if (ret > 0) {
>> +                     goto done;
>> +             }
>> +     } else {
>> +             if (stash_working_tree(info, argv)) {
>> +                     printf_ln("Cannot save the current worktree state");
>> +                     ret = -1;
>> +                     goto done;
>> +             }
>> +     }
>> +
>> +     if (!*stash_msg || !strlen(*stash_msg))
>> +             strbuf_addf(&final_stash_msg, "WIP on %s", msg.buf);
>> +     else
>> +             strbuf_addf(&final_stash_msg, "On %s: %s\n", branch_name,
>> +                         *stash_msg);
>> +     *stash_msg = strbuf_detach(&final_stash_msg, NULL);
>
> strbuf_detach means we're taking ownership of the memory, so we'll
> have to free it afterwards. Looking at this we may not even want to
> re-use the 'stash_msg' variable here, but instead introduce another
> variable for it, so it doesn't have a dual meaning in this function.
>
>> +
>> +     /*
>> +      * `parents` will be empty after calling `commit_tree()`, so there is
>> +      * no need to call `free_commit_list()`
>> +      */
>> +     parents = NULL;
>> +     if (untracked_commit_option)
>> +             commit_list_insert(lookup_commit(the_repository, &info->u_commit), &parents);
>> +     commit_list_insert(lookup_commit(the_repository, &info->i_commit), &parents);
>> +     commit_list_insert(head_commit, &parents);
>> +
>> +     if (commit_tree(*stash_msg, strlen(*stash_msg), &info->w_tree,
>> +                     parents, &info->w_commit, NULL, NULL)) {
>> +             printf_ln("Cannot record working tree state");
>> +             ret = -1;
>> +             goto done;
>> +     }
>> +
>> +done:
>> +     strbuf_release(&commit_tree_label);
>> +     strbuf_release(&msg);
>> +     strbuf_release(&out);
>> +     strbuf_release(&final_stash_msg);
>> +     return ret;
>> +}
>> +
>> +static int create_stash(int argc, const char **argv, const char *prefix)
>> +{
>> +     int include_untracked = 0;
>> +     int ret = 0;
>> +     const char *stash_msg = NULL;
>> +     struct stash_info info;
>> +     struct option options[] = {
>> +             OPT_BOOL('u', "include-untracked", &include_untracked,
>> +                      N_("include untracked files in stash")),
>> +             OPT_STRING('m', "message", &stash_msg, N_("message"),
>> +                      N_("stash message")),
>> +             OPT_END()
>> +     };
>> +
>> +     argc = parse_options(argc, argv, prefix, options,
>> +                          git_stash_helper_create_usage,
>> +                          0);
>> +
>> +     ret = do_create_stash(argc, argv, prefix, &stash_msg,
>> +                           include_untracked, 0, &info);
>
> stash_msg doesn't have to be passed as a pointer to a pointer here, as
> we never need the modified value after this function returns.  I think
> just passing 'stash_msg' here instead of '&stash_msg' will make
> 'do_create_stash' slightly easier to read.

That's right, but `do_create_stash()` is also called by
`do_push_stash()`, which will need the modified value.

>> +
>> +     if (!ret)
>> +             printf_ln("%s", oid_to_hex(&info.w_commit));
>> +
>> +     /*
>> +      * ret can be 1 if there were no changes. In this case, we should
>> +      * not error out.
>> +      */
>> +     return ret < 0;
>> +}
>> +
>>  int cmd_stash__helper(int argc, const char **argv, const char *prefix)
>>  {
>>       pid_t pid = getpid();
>> @@ -817,6 +1221,8 @@ int cmd_stash__helper(int argc, const char **argv, const char *prefix)
>>               return !!show_stash(argc, argv, prefix);
>>       else if (!strcmp(argv[0], "store"))
>>               return !!store_stash(argc, argv, prefix);
>> +     else if (!strcmp(argv[0], "create"))
>> +             return !!create_stash(argc, argv, prefix);
>>
>>       usage_msg_opt(xstrfmt(_("unknown subcommand: %s"), argv[0]),
>>                     git_stash_helper_usage, options);
>> diff --git a/git-stash.sh b/git-stash.sh
>> index 5739c5152..ab06e4ffb 100755
>> --- a/git-stash.sh
>> +++ b/git-stash.sh
>> @@ -425,7 +425,7 @@ clear)
>>       ;;
>>  create)
>>       shift
>> -     create_stash -m "$*" && echo "$w_commit"
>> +     git stash--helper create --message "$*"
>>       ;;
>>  store)
>>       shift
>> --
>> 2.18.0.573.g56500d98f
>>
Thanks!

  reply	other threads:[~2018-08-18 15:39 UTC|newest]

Thread overview: 181+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-05  2:28 [PATCH v5 0/5] Convert some stash functionality to a builtin Joel Teichroeb
2018-04-05  2:28 ` [PATCH v5 1/5] stash: improve option parsing test coverage Joel Teichroeb
2018-04-06 13:06   ` Johannes Schindelin
2018-04-06 22:48     ` Paul-Sebastian Ungureanu
2018-04-09  8:32       ` Johannes Schindelin
2018-04-05  2:28 ` [PATCH v5 2/5] stash: convert apply to builtin Joel Teichroeb
2018-04-05  7:50   ` Christian Couder
2018-04-05  7:59     ` Christian Couder
2018-04-05  8:13       ` Christian Couder
2018-04-05 13:34     ` Johannes Schindelin
2018-04-06 15:10   ` Johannes Schindelin
2018-04-06 15:17   ` Johannes Schindelin
2018-04-05  2:28 ` [PATCH v5 3/5] stash: convert drop and clear " Joel Teichroeb
2018-04-06 15:39   ` Johannes Schindelin
2018-04-05  2:28 ` [PATCH v5 4/5] stash: convert branch " Joel Teichroeb
2018-04-06 15:50   ` Johannes Schindelin
2018-04-05  2:28 ` [PATCH v5 5/5] stash: convert pop " Joel Teichroeb
2018-04-06 16:12   ` Johannes Schindelin
2018-04-06 16:15 ` [PATCH v5 0/5] Convert some stash functionality to a builtin Johannes Schindelin
2018-04-28 22:06   ` Paul-Sebastian Ungureanu
2018-04-29 13:04     ` Johannes Schindelin
     [not found]     ` <CA+CzEk8c1Pt+n9Jy5vL9_K60Q=6VKnLTdBY1JFRnb-POuRFv0Q@mail.gmail.com>
2018-04-30 15:43       ` Joel Teichroeb
2018-06-25 16:42 ` [PATCH v6 0/4] stash: add new tests and introduce a new helper function Paul-Sebastian Ungureanu
2018-06-25 16:42   ` [PATCH v6 1/4] sha1-name.c: added 'get_oidf', which acts like 'get_oid' Paul-Sebastian Ungureanu
2018-06-26 22:02     ` Johannes Schindelin
2018-06-25 16:42   ` [PATCH v6 2/4] stash: improve option parsing test coverage Paul-Sebastian Ungureanu
2018-06-25 16:42   ` [PATCH v6 3/4] stash: update test cases conform to coding guidelines Paul-Sebastian Ungureanu
2018-06-26 22:08     ` Johannes Schindelin
2018-06-25 16:42   ` [PATCH v6 4/4] stash: renamed test cases to be more descriptive Paul-Sebastian Ungureanu
2018-06-26 22:09     ` Johannes Schindelin
2018-06-25 16:43   ` [PATCH v6 1/4] stash: convert apply to builtin Paul-Sebastian Ungureanu
2018-06-25 16:43   ` [PATCH v6 2/4] stash: convert drop and clear " Paul-Sebastian Ungureanu
2018-06-26 22:17     ` Johannes Schindelin
2018-06-28 22:51       ` Paul-Sebastian Ungureanu
2018-06-25 16:43   ` [PATCH v6 3/4] stash: convert branch " Paul-Sebastian Ungureanu
2018-06-26 22:23     ` Johannes Schindelin
2018-06-27 18:39       ` Junio C Hamano
2018-06-28 16:17         ` Paul-Sebastian Ungureanu
2018-06-25 16:43   ` [PATCH v6 4/4] stash: convert pop " Paul-Sebastian Ungureanu
2018-06-26 22:31     ` Johannes Schindelin
2018-06-25 16:46   ` [PATCH v6 1/6] stash: implement the "list" command in the builtin Paul-Sebastian Ungureanu
2018-06-25 16:46   ` [PATCH v6 2/6] stash: convert show to builtin Paul-Sebastian Ungureanu
2018-06-25 16:46   ` [PATCH v6 3/6] stash: change `git stash show` usage text and documentation Paul-Sebastian Ungureanu
2018-06-25 16:46   ` [PATCH v6 4/6] stash: refactor `show_stash()` to use the diff API Paul-Sebastian Ungureanu
2018-06-25 16:46   ` [PATCH v6 5/6] stash: update `git stash show` documentation Paul-Sebastian Ungureanu
2018-06-25 16:46   ` [PATCH v6 6/6] stash: convert store to builtin Paul-Sebastian Ungureanu
2018-06-26 21:59   ` [PATCH v6 0/4] stash: add new tests and introduce a new helper function Johannes Schindelin
2018-06-27 18:47     ` Junio C Hamano
2018-06-28 22:32       ` Paul-Sebastian Ungureanu
2018-06-26 22:12   ` [PATCH v6 0/4] stash: Convert some `git stash` commands to a builtin Johannes Schindelin
2018-06-28 23:14     ` Paul-Sebastian Ungureanu
2018-08-08 18:58   ` [GSoC][PATCH v7 00/26] Convert "git stash" to C builtin Paul-Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 01/26] sha1-name.c: added 'get_oidf', which acts like 'get_oid' Paul-Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 02/26] stash: improve option parsing test coverage Paul-Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 03/26] stash: update test cases conform to coding guidelines Paul-Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 04/26] stash: renamed test cases to be more descriptive Paul-Sebastian Ungureanu
2018-08-15 19:31       ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 05/26] stash: convert apply to builtin Paul-Sebastian Ungureanu
2018-08-08 20:18       ` Junio C Hamano
2018-08-09 20:01         ` Paul-Sebastian Ungureanu
2018-08-09 21:00           ` Junio C Hamano
2018-08-10 15:35             ` Paul-Sebastian Ungureanu
2018-08-18 16:09       ` Duy Nguyen
2018-08-08 18:58     ` [GSoC][PATCH v7 06/26] stash: convert drop and clear " Paul-Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 07/26] stash: convert branch " Paul-Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 08/26] stash: convert pop " Paul-Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 09/26] stash: implement the "list" command in the builtin Paul-Sebastian Ungureanu
2018-08-15 19:41       ` Thomas Gummerer
2018-08-18 11:44         ` Paul Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 10/26] stash: convert show to builtin Paul-Sebastian Ungureanu
2018-08-15 20:20       ` Thomas Gummerer
2018-08-18 12:11         ` Paul Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 11/26] stash: change `git stash show` usage text and documentation Paul-Sebastian Ungureanu
2018-08-15 20:26       ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 12/26] stash: refactor `show_stash()` to use the diff API Paul-Sebastian Ungureanu
2018-08-15 21:01       ` Thomas Gummerer
2018-08-18 15:11         ` Paul Sebastian Ungureanu
2018-08-08 18:58     ` [GSoC][PATCH v7 13/26] stash: update `git stash show` documentation Paul-Sebastian Ungureanu
2018-08-15 21:08       ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 14/26] stash: convert store to builtin Paul-Sebastian Ungureanu
2018-08-15 21:26       ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 15/26] stash: convert create " Paul-Sebastian Ungureanu
2018-08-15 22:13       ` Thomas Gummerer
2018-08-18 15:39         ` Paul Sebastian Ungureanu [this message]
2018-08-18 20:23           ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 16/26] stash: replace spawning a "read-tree" process Paul-Sebastian Ungureanu
2018-08-18 21:07       ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 17/26] stash: avoid spawning a "diff-index" process Paul-Sebastian Ungureanu
2018-08-18 22:06       ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 18/26] stash: convert push to builtin Paul-Sebastian Ungureanu
2018-08-18 15:36       ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 19/26] stash: make push to be quiet Paul-Sebastian Ungureanu
2018-08-18 15:46       ` Thomas Gummerer
2018-08-08 18:58     ` [GSoC][PATCH v7 20/26] stash: add tests for `git stash push -q` Paul-Sebastian Ungureanu
2018-08-18 16:12       ` Thomas Gummerer
2018-08-08 18:59     ` [GSoC][PATCH v7 21/26] stash: replace spawning `git ls-files` child process Paul-Sebastian Ungureanu
2018-08-18 22:17       ` Thomas Gummerer
2018-08-08 18:59     ` [GSoC][PATCH v7 22/26] stash: convert save to builtin Paul-Sebastian Ungureanu
2018-08-18 16:33       ` Thomas Gummerer
2018-08-08 18:59     ` [GSoC][PATCH v7 23/26] stash: convert `stash--helper.c` into `stash.c` Paul-Sebastian Ungureanu
2018-08-18 16:51       ` Thomas Gummerer
2018-08-08 18:59     ` [GSoC][PATCH v7 24/26] stash: optimize `get_untracked_files()` and `check_changes()` Paul-Sebastian Ungureanu
2018-08-18 22:33       ` Thomas Gummerer
2018-08-08 18:59     ` [GSoC][PATCH v7 25/26] stash: replace all `write-tree` child processes with API calls Paul-Sebastian Ungureanu
2018-08-19  8:17       ` Thomas Gummerer
2018-08-08 18:59     ` [GSoC][PATCH v7 26/26] stash: replace all "git apply" " Paul-Sebastian Ungureanu
2018-08-19  8:40       ` Thomas Gummerer
2018-08-15 22:25     ` [GSoC][PATCH v7 00/26] Convert "git stash" to C builtin Thomas Gummerer
2018-08-16 21:25       ` Paul Sebastian Ungureanu
2018-08-30 21:40   ` [GSoC][PATCH v8 00/20] " Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 01/20] sha1-name.c: add `get_oidf()` which acts like `get_oid()` Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 02/20] stash: improve option parsing test coverage Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 03/20] stash: update test cases conform to coding guidelines Paul-Sebastian Ungureanu
2018-08-30 22:11       ` Junio C Hamano
2018-08-30 21:40     ` [GSoC][PATCH v8 04/20] stash: rename test cases to be more descriptive Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 05/20] stash: add tests for `git stash show` config Paul-Sebastian Ungureanu
2018-08-30 22:07       ` Junio C Hamano
2018-09-03 12:11         ` Johannes Schindelin
2018-08-30 21:40     ` [GSoC][PATCH v8 06/20] stash: convert apply to builtin Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 07/20] stash: convert drop and clear " Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 08/20] stash: convert branch " Paul-Sebastian Ungureanu
2018-09-03 13:29       ` Johannes Schindelin
2018-08-30 21:40     ` [GSoC][PATCH v8 09/20] stash: convert pop " Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 10/20] stash: convert list " Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 11/20] stash: convert show " Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 12/20] stash: mention options in `show` synopsis Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 13/20] stash: convert store to builtin Paul-Sebastian Ungureanu
2018-09-03 13:24       ` Johannes Schindelin
2018-08-30 21:40     ` [GSoC][PATCH v8 14/20] stash: convert create " Paul-Sebastian Ungureanu
2018-09-03 16:00       ` Johannes Schindelin
2018-09-25 22:20         ` Paul-Sebastian Ungureanu
2018-11-09 12:27           ` Johannes Schindelin
2018-08-30 21:40     ` [GSoC][PATCH v8 15/20] stash: convert push " Paul-Sebastian Ungureanu
2018-09-03 14:40       ` Johannes Schindelin
2018-08-30 21:40     ` [GSoC][PATCH v8 16/20] stash: make push -q quiet Paul-Sebastian Ungureanu
2018-08-30 21:40     ` [GSoC][PATCH v8 17/20] stash: convert save to builtin Paul-Sebastian Ungureanu
2018-09-03 18:44       ` Johannes Schindelin
2018-09-03 19:06         ` Eric Sunshine
2018-09-03 20:38           ` Johannes Schindelin
2018-08-30 21:40     ` [GSoC][PATCH v8 18/20] stash: convert `stash--helper.c` into `stash.c` Paul-Sebastian Ungureanu
2018-09-03 14:57       ` Johannes Schindelin
2018-09-25 22:31         ` Paul-Sebastian Ungureanu
2018-11-09 12:26           ` Johannes Schindelin
2018-08-30 21:40     ` [GSoC][PATCH v8 19/20] stash: optimize `get_untracked_files()` and `check_changes()` Paul-Sebastian Ungureanu
2018-09-03 18:49       ` Johannes Schindelin
2018-08-30 21:40     ` [GSoC][PATCH v8 20/20] stash: replace all `write-tree` child processes with API calls Paul-Sebastian Ungureanu
2018-09-03 19:11       ` Johannes Schindelin
2018-08-30 22:19     ` [GSoC][PATCH v8 00/20] Convert "git stash" to C builtin Ævar Arnfjörð Bjarmason
2018-08-31 18:14     ` Junio C Hamano
2018-09-03 19:12     ` Johannes Schindelin
2018-09-25 22:33     ` [PATCH v9 00/21] " Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 01/21] sha1-name.c: add `get_oidf()` which acts like `get_oid()` Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 02/21] strbuf.c: add `strbuf_join_argv()` Paul-Sebastian Ungureanu
2018-09-30 16:49         ` Thomas Gummerer
2018-09-25 22:33       ` [PATCH v9 03/21] stash: improve option parsing test coverage Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 04/21] stash: update test cases conform to coding guidelines Paul-Sebastian Ungureanu
2018-09-30 16:59         ` Thomas Gummerer
2018-09-25 22:33       ` [PATCH v9 05/21] stash: rename test cases to be more descriptive Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 06/21] stash: add tests for `git stash show` config Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 07/21] stash: convert apply to builtin Paul-Sebastian Ungureanu
2018-09-30 17:48         ` Thomas Gummerer
2018-09-25 22:33       ` [PATCH v9 08/21] stash: convert drop and clear " Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 09/21] stash: convert branch " Paul-Sebastian Ungureanu
2018-09-30 17:57         ` Thomas Gummerer
2018-09-25 22:33       ` [PATCH v9 10/21] stash: convert pop " Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 11/21] stash: convert list " Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 12/21] stash: convert show " Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 13/21] stash: mention options in `show` synopsis Paul-Sebastian Ungureanu
2018-10-02 19:36         ` Thomas Gummerer
2018-09-25 22:33       ` [PATCH v9 14/21] stash: convert store to builtin Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 15/21] stash: convert create " Paul-Sebastian Ungureanu
2018-10-02 20:19         ` Thomas Gummerer
2018-09-25 22:33       ` [PATCH v9 16/21] stash: convert push " Paul-Sebastian Ungureanu
2018-10-02 20:37         ` Thomas Gummerer
2018-09-25 22:33       ` [PATCH v9 17/21] stash: make push -q quiet Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 18/21] stash: convert save to builtin Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 19/21] stash: convert `stash--helper.c` into `stash.c` Paul-Sebastian Ungureanu
2018-10-02 21:04         ` Thomas Gummerer
2018-09-25 22:33       ` [PATCH v9 20/21] stash: optimize `get_untracked_files()` and `check_changes()` Paul-Sebastian Ungureanu
2018-09-25 22:33       ` [PATCH v9 21/21] stash: replace all `write-tree` child processes with API calls Paul-Sebastian Ungureanu
2018-09-26 18:37       ` [PATCH v9 00/21] Convert "git stash" to C builtin Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADzBBBaO3em0kcebL5kiE1JxSEsea2OFrzyRUgfEDjrwV6fxsw@mail.gmail.com \
    --to=ungureanupaulsebastian@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=t.gummerer@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).