Merge branch 'jc/stash-create'

* jc/stash-create:
  git-stash: Fix listing stashes
  git-merge: no reason to use cpio anymore
  Revert "rebase: allow starting from a dirty tree."
  rebase: allow starting from a dirty tree.
  stash: implement "stash create"
This commit is contained in:
Junio C Hamano 2007-11-14 14:05:47 -08:00
commit 5e389c430d
2 changed files with 31 additions and 14 deletions

View File

@ -28,20 +28,19 @@ allow_trivial_merge=t
dropsave() {
rm -f -- "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/MERGE_MSG" \
"$GIT_DIR/MERGE_SAVE" || exit 1
"$GIT_DIR/MERGE_STASH" || exit 1
}
savestate() {
# Stash away any local modifications.
git diff-index -z --name-only $head |
cpio -0 -o >"$GIT_DIR/MERGE_SAVE"
git stash create >"$GIT_DIR/MERGE_STASH"
}
restorestate() {
if test -f "$GIT_DIR/MERGE_SAVE"
if test -f "$GIT_DIR/MERGE_STASH"
then
git reset --hard $head >/dev/null
cpio -iuv <"$GIT_DIR/MERGE_SAVE"
git stash apply $(cat "$GIT_DIR/MERGE_STASH")
git update-index --refresh >/dev/null
fi
}
@ -437,7 +436,7 @@ case "$use_strategies" in
single_strategy=no
;;
*)
rm -f "$GIT_DIR/MERGE_SAVE"
rm -f "$GIT_DIR/MERGE_STASH"
single_strategy=yes
;;
esac

View File

@ -21,23 +21,17 @@ no_changes () {
clear_stash () {
if current=$(git rev-parse --verify $ref_stash 2>/dev/null)
then
git update-ref -d refs/stash $current
git update-ref -d $ref_stash $current
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)
@ -84,6 +78,23 @@ 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"
# Make sure the reflog for stash is kept.
: >>"$GIT_DIR/logs/$ref_stash"
git update-ref -m "$stash_msg" $ref_stash $w_commit ||
die "Cannot save the current status"
@ -202,6 +213,13 @@ apply)
clear)
clear_stash
;;
create)
if test $# -gt 0 && test "$1" = create
then
shift
fi
create_stash "$*" && echo "$w_commit"
;;
help | usage)
usage
;;