Skip to content

Commit

Permalink
stash: implement "stash create"
Browse files Browse the repository at this point in the history
This subcommand creates a stash from the current state and writes out the
resulting commit object ID to the standard output, without updating the
stash ref nor resetting the tree.  It is intended to be used by scripts
to temporarily rewind the working tree to a clean state.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Sep 15, 2007
1 parent d3392f7 commit bc9e739
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions git-stash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,13 @@ clear_stash () {
fi
}

save_stash () {
create_stash () {
stash_msg="$1"

if no_changes
then
echo >&2 'No local changes to save'
exit 0
fi
test -f "$GIT_DIR/logs/$ref_stash" ||
clear_stash || die "Cannot initialize stash"

# Make sure the reflog for stash is kept.
: >>"$GIT_DIR/logs/$ref_stash"

# state of the base commit
if b_commit=$(git rev-parse --verify HEAD)
Expand Down Expand Up @@ -84,7 +78,20 @@ save_stash () {
w_commit=$(printf '%s\n' "$stash_msg" |
git commit-tree $w_tree -p $b_commit -p $i_commit) ||
die "Cannot record working tree state"
}

save_stash () {
stash_msg="$1"

if no_changes
then
echo >&2 'No local changes to save'
exit 0
fi
test -f "$GIT_DIR/logs/$ref_stash" ||
clear_stash || die "Cannot initialize stash"

create_stash "$stash_msg"
git update-ref -m "$stash_msg" $ref_stash $w_commit ||
die "Cannot save the current status"
printf >&2 'Saved "%s"\n' "$stash_msg"
Expand Down Expand Up @@ -202,6 +209,13 @@ apply)
clear)
clear_stash
;;
create)
if test $# -gt 0 && test "$1" = create
then
shift
fi
create_stash "$*" && echo "$w_commit"
;;
help | usage)
usage
;;
Expand Down

0 comments on commit bc9e739

Please sign in to comment.