THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

Ver código fonte

stash: optionally use the scripted version again

We recently converted the `git stash` command from Unix shell scripts
to builtins.

Let's end users a way out when they discover a bug in the
builtin command: `stash.useBuiltin`.

As the file name `git-stash` is already in use, let's rename the
scripted backend to `git-legacy-stash`.

To make the test suite pass with `stash.useBuiltin=false`, this commit
also backports rudimentary support for `-q` (but only *just* enough
to appease the test suite), and adds a super-ugly hack to force exit
code 129 for `git stash -h`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
tags/v2.22.0-rc0
Johannes Schindelin Junio C Hamano 8 meses atrás
pai
commit
90a462725e
6 arquivos alterados com 75 adições e 4 exclusões
  1. +1
    -0
      .gitignore
  2. +1
    -0
      Makefile
  3. +35
    -0
      builtin/stash.c
  4. +31
    -3
      git-legacy-stash.sh
  5. +1
    -0
      git-sh-setup.sh
  6. +6
    -1
      git.c

+ 1
- 0
.gitignore Ver arquivo

@@ -82,6 +82,7 @@
/git-interpret-trailers
/git-instaweb
/git-legacy-rebase
/git-legacy-stash
/git-log
/git-ls-files
/git-ls-remote


+ 1
- 0
Makefile Ver arquivo

@@ -617,6 +617,7 @@ SCRIPT_SH += git-merge-resolve.sh
SCRIPT_SH += git-mergetool.sh
SCRIPT_SH += git-quiltimport.sh
SCRIPT_SH += git-legacy-rebase.sh
SCRIPT_SH += git-legacy-stash.sh
SCRIPT_SH += git-remote-testgit.sh
SCRIPT_SH += git-request-pull.sh
SCRIPT_SH += git-submodule.sh


+ 35
- 0
builtin/stash.c Ver arquivo

@@ -13,6 +13,7 @@
#include "revision.h"
#include "log-tree.h"
#include "diffcore.h"
#include "exec-cmd.h"

#define INCLUDE_ALL_FILES 2

@@ -1510,6 +1511,26 @@ static int save_stash(int argc, const char **argv, const char *prefix)
return ret;
}

static int use_builtin_stash(void)
{
struct child_process cp = CHILD_PROCESS_INIT;
struct strbuf out = STRBUF_INIT;
int ret;

argv_array_pushl(&cp.args,
"config", "--bool", "stash.usebuiltin", NULL);
cp.git_cmd = 1;
if (capture_command(&cp, &out, 6)) {
strbuf_release(&out);
return 1;
}

strbuf_trim(&out);
ret = !strcmp("true", out.buf);
strbuf_release(&out);
return ret;
}

int cmd_stash(int argc, const char **argv, const char *prefix)
{
int i = -1;
@@ -1521,6 +1542,20 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
OPT_END()
};

if (!use_builtin_stash()) {
const char *path = mkpath("%s/git-legacy-stash",
git_exec_path());

if (sane_execvp(path, (char **)argv) < 0)
die_errno(_("could not exec %s"), path);
else
BUG("sane_execvp() returned???");
}

prefix = setup_git_directory();
trace_repo_setup(prefix);
setup_work_tree();

git_config(git_diff_basic_config, NULL);

argc = parse_options(argc, argv, prefix, options, git_stash_usage,


git-stash.sh → git-legacy-stash.sh Ver arquivo

@@ -80,6 +80,28 @@ clear_stash () {
fi
}

maybe_quiet () {
case "$1" in
--keep-stdout)
shift
if test -n "$GIT_QUIET"
then
eval "$@" 2>/dev/null
else
eval "$@"
fi
;;
*)
if test -n "$GIT_QUIET"
then
eval "$@" >/dev/null 2>&1
else
eval "$@"
fi
;;
esac
}

create_stash () {

prepare_fallback_ident
@@ -112,15 +134,18 @@ create_stash () {
done

git update-index -q --refresh
if no_changes "$@"
if maybe_quiet no_changes "$@"
then
exit 0
fi

# state of the base commit
if b_commit=$(git rev-parse --verify HEAD)
if b_commit=$(maybe_quiet --keep-stdout git rev-parse --verify HEAD)
then
head=$(git rev-list --oneline -n 1 HEAD --)
elif test -n "$GIT_QUIET"
then
exit 1
else
die "$(gettext "You do not have the initial commit yet")"
fi
@@ -315,7 +340,7 @@ push_stash () {
test -n "$untracked" || git ls-files --error-unmatch -- "$@" >/dev/null || exit 1

git update-index -q --refresh
if no_changes "$@"
if maybe_quiet no_changes "$@"
then
say "$(gettext "No local changes to save")"
exit 0
@@ -370,6 +395,9 @@ save_stash () {
while test $# != 0
do
case "$1" in
-q|--quiet)
GIT_QUIET=t
;;
--)
shift
break

+ 1
- 0
git-sh-setup.sh Ver arquivo

@@ -101,6 +101,7 @@ $LONG_USAGE")"
case "$1" in
-h)
echo "$LONG_USAGE"
case "$0" in *git-legacy-stash) exit 129;; esac
exit
esac
fi


+ 6
- 1
git.c Ver arquivo

@@ -554,7 +554,12 @@ static struct cmd_struct commands[] = {
{ "show-index", cmd_show_index },
{ "show-ref", cmd_show_ref, RUN_SETUP },
{ "stage", cmd_add, RUN_SETUP | NEED_WORK_TREE },
{ "stash", cmd_stash, RUN_SETUP | NEED_WORK_TREE },
/*
* NEEDSWORK: Until the builtin stash is thoroughly robust and no
* longer needs redirection to the stash shell script this is kept as
* is, then should be changed to RUN_SETUP | NEED_WORK_TREE
*/
{ "stash", cmd_stash },
{ "status", cmd_status, RUN_SETUP | NEED_WORK_TREE },
{ "stripspace", cmd_stripspace },
{ "submodule--helper", cmd_submodule__helper, RUN_SETUP | SUPPORT_SUPER_PREFIX | NO_PARSEOPT },


Carregando…
Cancelar
Salvar