Junio C Hamano wrote:
> Ramkumar Ramachandra <[email protected]> writes:
>
>> @@ -1786,6 +1786,11 @@ pull.rebase::
>> of merging the default branch from the default remote when "git
>> pull" is run. See "branch.<name>.rebase" for setting this on a
>> per-branch basis.
>> +
>> +pull.autostash::
>> + When true, automatically stash all changes before attempting to
>> + merge/rebase, and pop the stash after a successful
>> + merge/rebase.
>> +
>> *NOTE*: this is a possibly dangerous operation; do *not* use
>> it unless you understand the implications (see linkgit:git-rebase[1]
>
> Is autosquash a possibly dangerous operation?
Oops. I must admit I was in a bit of a hurry with the documentation.
I was eager to send out the series seeing that the tests were passing.
>> @@ -196,7 +203,8 @@ test true = "$rebase" && {
>> then
>> die "$(gettext "updating an unborn branch with changes
>> added to the index")"
>> fi
>> - else
>> + elif test "$autostash" = false
>> + then
>> require_clean_work_tree "pull with rebase" "Please commit or
>> stash them."
>> fi
>
> A safety net, after you run "git stash", to validate that the
> added "git stash" indeed made the working tree clean, is necessary
> below, but there does not seem to be any.
Um, isn't that part of the "git stash" testsuite?
>> oldremoteref= &&
>> @@ -213,6 +221,12 @@ test true = "$rebase" && {
>> fi
>> done
>> }
>> +
>> +stash_required () {
>> + ! (git diff-files --quiet --ignore-submodules &&
>> + git diff-index --quiet --cached HEAD --ignore-submodules)
>> +}
>> +
>> orig_head=$(git rev-parse -q --verify HEAD)
>> git fetch $verbosity $progress $dry_run $recurse_submodules
>> --update-head-ok "$@" || exit 1
>> test -z "$dry_run" || exit 0
>> @@ -288,4 +302,12 @@ true)
>> eval="$eval \"\$merge_name\" HEAD $merge_head"
>> ;;
>> esac
>> -eval "exec $eval"
>> +
>> +if test "$autostash" = true && stash_required
>> +then
>> + git stash
>> + eval "$eval"
>> + test $? = 0 && git stash pop
>> +else
>> + eval "exec $eval"
>> +fi
>
> Delaying to run "git stash" as much as possible is fine, but with
> the above, can the user tell if something was stashed and she has
> to "stash pop" once she is done helping the command to resolve the
> conflicts, or she shouldn't run "stash pop" after she is done
> (because if nothing is stashed at this point, that "pop" will pop an
> unrelated stash)?
I could easily tell, from the "git pull" output: if conflict, then
stash hasn't been applied. Otherwise, yes. Should we print a message
guarded by an advice variable?
> What protects the "git stash" from failing and how is its error
> handled?
Oh, this is my stupidity. I should've just &&-chained the git stash,
eval $eval, and git stash pop.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html