git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Thomas Gummerer <t.gummerer@gmail.com>
To: Paul-Sebastian Ungureanu <ungureanupaulsebastian@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [GSoC][PATCH v7 18/26] stash: convert push to builtin
Date: Sat, 18 Aug 2018 16:36:04 +0100	[thread overview]
Message-ID: <20180818153604.GB11326@hank.intra.tgummerer.com> (raw)
In-Reply-To: <b41bff3b5188ac014f9cb5024e535d6804ef1834.1533753605.git.ungureanupaulsebastian@gmail.com>

On 08/08, Paul-Sebastian Ungureanu wrote:
> Add stash push to the helper.
> ---

This (and the previous two and I think most subsequent patches) are
missing your sign-off.

>  builtin/stash--helper.c | 209 ++++++++++++++++++++++++++++++++++++++++
>  git-stash.sh            |   6 +-
>  2 files changed, 213 insertions(+), 2 deletions(-)
> 
> diff --git a/builtin/stash--helper.c b/builtin/stash--helper.c
> index f905d3908..c26cad3d5 100644
> --- a/builtin/stash--helper.c
> +++ b/builtin/stash--helper.c
> @@ -23,6 +23,9 @@ static const char * const git_stash_helper_usage[] = {
>  	N_("git stash--helper clear"),
>  	N_("git stash--helper store [-m|--message <message>] [-q|--quiet] <commit>"),
>  	N_("git stash--helper create [<message>]"),
> +	N_("git stash--helper [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
> +	   "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
> +	   "          [--] [<pathspec>...]]"),
>  	NULL
>  };
>  
> @@ -71,6 +74,13 @@ static const char * const git_stash_helper_create_usage[] = {
>  	NULL
>  };
>  
> +static const char * const git_stash_helper_push_usage[] = {
> +	N_("git stash--helper [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
> +	   "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
> +	   "          [--] [<pathspec>...]]"),
> +	NULL
> +};
> +
>  static const char *ref_stash = "refs/stash";
>  static int quiet;
>  static struct strbuf stash_index_path = STRBUF_INIT;
> @@ -1210,6 +1220,203 @@ static int create_stash(int argc, const char **argv, const char *prefix)
>  	return ret < 0;
>  }
>  
> +static int do_push_stash(int argc, const char **argv, const char *prefix,
> +			 int keep_index, int patch_mode, int include_untracked,
> +			 int quiet, const char *stash_msg)
> +{
> +	int ret = 0;
> +	struct pathspec ps;
> +	struct stash_info info;
> +	if (patch_mode && keep_index == -1)
> +		keep_index = 1;
> +
> +	if (patch_mode && include_untracked) {
> +		fprintf_ln(stderr, "Can't use --patch and --include-untracked or --all at the same time");

This should be marked for translation.  Similar for the messages
below.  I noticed this in a previous patch as well, so it may be worth
reviewing all the output, and checking that it's going to the right
stream and is marked for translation.

> +		return -1;
> +	}
> +
> +	parse_pathspec(&ps, 0, PATHSPEC_PREFER_FULL, prefix, argv);
> +
> +	if (read_cache() < 0)
> +		die(_("index file corrupt"));
> +
> +	if (!include_untracked && ps.nr) {
> +		int i;
> +		char *ps_matched = xcalloc(ps.nr, 1);
> +
> +		for (i = 0; i < active_nr; ++i) {
> +			const struct cache_entry *ce = active_cache[i];
> +			if (!ce_path_match(ce, &ps, ps_matched))
> +				continue;
> +		}
> +
> +		if (report_path_error(ps_matched, &ps, prefix)) {
> +			fprintf_ln(stderr, "Did you forget to 'git add'?");
> +			return -1;
> +		}
> +	}
> +
> +	read_cache_preload(NULL);

Instead of doing a 'read_cache' before and 'read_cache_preload(NULL)'
here, we could just use 'read_cache_preload(NULL)' above.
'read_cache' does return early if the index has already been read, so
there's no big harm in doing this twice, but just having one call is
still neater I think.

It would make the command slightly slower in the error case above, but
I doubt that's worth worrying about.

> +	if (refresh_cache(REFRESH_QUIET))
> +		return -1;
> +
> +	if (!check_changes(argv, include_untracked, prefix)) {
> +		fprintf_ln(stdout, "No local changes to save");
> +		return 0;
> +	}
> +
> +	if (!reflog_exists(ref_stash) && do_clear_stash()) {
> +		fprintf_ln(stderr, "Cannot initialize stash");
> +		return -1;
> +	}
> +
> +	if ((ret = do_create_stash(argc, argv, prefix, &stash_msg,
> +				   include_untracked, patch_mode, &info)))
> +		return ret;

Should this be 'return ret < 0'?  'ret == 1' means there are no
changes, for which we currently get a 0 exit code.  Though on second
thought that can't happen, because we already have 'check_changes'
above.  Why do we want the 'ret' variable here?

Something I notice here is that we are passing 'argc' and 'argv'
around a lot.  We passed that through parse-options already, and it
seems to me that we're mostly left with pathspecs here, rather than
'argv'.  It looks to me like we could just parse the pathspecs in the
callers (which we do in some places, but maybe not in all of them) and
then pass 'struct pathspec' around instead of the leftover argv, which
is easier to understand, and gives all these functions a neater/easier
to understand interface.

Also looking at 'do_create_stash', the 'argc' argument seems to be
unused?  I failed to notice that earlier obviously, but we should get
rid of that unused argument.

> +
> +	if (do_store_stash(oid_to_hex(&info.w_commit), stash_msg, 1)) {
> +		fprintf(stderr, "Cannot save the current status");
> +		return -1;
> +	}
> +
> +	fprintf(stdout, "Saved working directory and index state %s", stash_msg);
> +
> +	if (!patch_mode) {
> +		if (include_untracked && ps.nr == 0) {
> +			struct child_process cp = CHILD_PROCESS_INIT;
> +
> +			cp.git_cmd = 1;
> +			argv_array_pushl(&cp.args, "clean", "--force",
> +					 "--quiet", "-d", NULL);
> +			if (include_untracked == 2)
> +				argv_array_push(&cp.args, "-x");
> +			if (run_command(&cp))
> +				return -1;
> +		}
> +		if (argc != 0) {

We use 'ps.nr' in the check above, and 'argc' here.  I think we should
consistently use 'ps.nr'.

> +			int i;
> +			struct child_process cp1 = CHILD_PROCESS_INIT;
> +			struct child_process cp2 = CHILD_PROCESS_INIT;
> +			struct child_process cp3 = CHILD_PROCESS_INIT;
> +			struct strbuf out = STRBUF_INIT;
> +
> +			cp1.git_cmd = 1;
> +			argv_array_push(&cp1.args, "add");
> +			if (!include_untracked)
> +				argv_array_push(&cp1.args, "-u");
> +			if (include_untracked == 2)
> +				argv_array_push(&cp1.args, "--force");
> +			argv_array_push(&cp1.args, "--");
> +			for (i = 0; i < ps.nr; ++i)
> +				argv_array_push(&cp1.args, ps.items[i].match);

Since we're doing this 'argv_array_push' with pathspec elements a few
times already (and may do it even more often if the code is being
refactored to pass 'struct pathspec' around), would it be worth
factoring this out as a tiny helper function?

> +			if (run_command(&cp1))
> +				return -1;
> +
> +			cp2.git_cmd = 1;
> +			argv_array_pushl(&cp2.args, "diff-index", "-p",
> +					 "--cached", "--binary", "HEAD", "--",
> +					 NULL);
> +			for (i = 0; i < ps.nr; ++i)
> +				argv_array_push(&cp2.args, ps.items[i].match);
> +			if (pipe_command(&cp2, NULL, 0, &out, 0, NULL, 0))
> +				return -1;
> +
> +			cp3.git_cmd = 1;
> +			argv_array_pushl(&cp3.args, "apply", "--index", "-R",
> +					 NULL);
> +			if (pipe_command(&cp3, out.buf, out.len, NULL, 0, NULL,
> +					 0))
> +				return -1;
> +		} else {
> +			struct child_process cp = CHILD_PROCESS_INIT;
> +			cp.git_cmd = 1;
> +			argv_array_pushl(&cp.args, "reset", "--hard", "-q",
> +					 NULL);
> +			if (run_command(&cp))
> +				return -1;
> +		}
> +
> +		if (keep_index == 1 && !is_null_oid(&info.i_tree)) {
> +			int i;
> +			struct child_process cp1 = CHILD_PROCESS_INIT;
> +			struct child_process cp2 = CHILD_PROCESS_INIT;
> +			struct strbuf out = STRBUF_INIT;
> +
> +			if (reset_tree(&info.i_tree, 0, 1))
> +				return -1;
> +
> +			cp1.git_cmd = 1;
> +			argv_array_pushl(&cp1.args, "ls-files", "-z",
> +					 "--modified", "--", NULL);
> +			for (i = 0; i < ps.nr; ++i)
> +				argv_array_push(&cp1.args, ps.items[i].match);
> +			if (pipe_command(&cp1, NULL, 0, &out, 0, NULL, 0))
> +				return -1;
> +
> +			cp2.git_cmd = 1;
> +			argv_array_pushl(&cp2.args, "checkout-index", "-z",
> +					 "--force", "--stdin", NULL);
> +			if (pipe_command(&cp2, out.buf, out.len, NULL, 0, NULL,
> +					 0))
> +				return -1;
> +		}
> +	} else {
> +		struct child_process cp = CHILD_PROCESS_INIT;
> +
> +		cp.git_cmd = 1;
> +		argv_array_pushl(&cp.args, "apply", "-R", NULL);
> +
> +		if (pipe_command(&cp, patch.buf, patch.len, NULL, 0, NULL, 0)) {
> +			fprintf_ln(stderr, "Cannot remove worktree changes");
> +			return -1;
> +		}
> +
> +		if (keep_index < 1) {
> +			int i;
> +			struct child_process cp = CHILD_PROCESS_INIT;
> +
> +			cp.git_cmd = 1;
> +			argv_array_pushl(&cp.args, "reset", "-q", "--", NULL);
> +			for (i = 0; i < ps.nr; ++i)
> +				argv_array_push(&cp.args, ps.items[i].match);
> +			if (run_command(&cp))
> +				return -1;
> +		}
> +	}
> +	return 0;
> +}
> +
> +static int push_stash(int argc, const char **argv, const char *prefix)
> +{
> +	int keep_index = -1;
> +	int patch_mode = 0;
> +	int include_untracked = 0;
> +	int quiet = 0;
> +	const char *stash_msg = NULL;
> +	struct option options[] = {
> +		OPT_SET_INT('k', "keep-index", &keep_index,
> +			N_("keep index"), 1),
> +		OPT_BOOL('p', "patch", &patch_mode,
> +			N_("stash in patch mode")),
> +		OPT_BOOL('q', "quiet", &quiet,
> +			N_("quiet mode")),

We should be able to use OPT__QUIET here.

> +		OPT_BOOL('u', "include-untracked", &include_untracked,
> +			 N_("include untracked files in stash")),
> +		OPT_SET_INT('a', "all", &include_untracked,
> +			    N_("include ignore files"), 2),
> +		OPT_STRING('m', "message", &stash_msg, N_("message"),
> +			 N_("stash message")),
> +		OPT_END()
> +	};
> +
> +	argc = parse_options(argc, argv, prefix, options,
> +			     git_stash_helper_push_usage,
> +			     0);
> +
> +	return do_push_stash(argc, argv, prefix, keep_index, patch_mode,
> +			     include_untracked, quiet, stash_msg);
> +}
> +
>  int cmd_stash__helper(int argc, const char **argv, const char *prefix)
>  {
>  	pid_t pid = getpid();
> @@ -1248,6 +1455,8 @@ int cmd_stash__helper(int argc, const char **argv, const char *prefix)
>  		return !!store_stash(argc, argv, prefix);
>  	else if (!strcmp(argv[0], "create"))
>  		return !!create_stash(argc, argv, prefix);
> +	else if (!strcmp(argv[0], "push"))
> +		return !!push_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 ab06e4ffb..c3146f62a 100755
> --- a/git-stash.sh
> +++ b/git-stash.sh
> @@ -412,7 +412,8 @@ save)
>  	;;
>  push)
>  	shift
> -	push_stash "$@"
> +	cd "$START_DIR"
> +	git stash--helper push "$@"
>  	;;
>  apply)
>  	shift
> @@ -448,7 +449,8 @@ branch)
>  *)
>  	case $# in
>  	0)
> -		push_stash &&
> +		cd "$START_DIR"
> +		git stash--helper push &&
>  		say "$(gettext "(To restore them type \"git stash apply\")")"
>  		;;
>  	*)
> -- 
> 2.18.0.573.g56500d98f
> 

  reply	other threads:[~2018-08-18 15:36 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
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 [this message]
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=20180818153604.GB11326@hank.intra.tgummerer.com \
    --to=t.gummerer@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=ungureanupaulsebastian@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).