diff --git a/functions/__fisher_path_update.fish b/functions/__fisher_path_update.fish index 70308ff..e60eecb 100644 --- a/functions/__fisher_path_update.fish +++ b/functions/__fisher_path_update.fish @@ -1,10 +1,28 @@ function __fisher_path_update -a path pushd $path + set -l branch + + if not set branch (sed "s|.*/||" < .git/HEAD) + return 1 + end + git checkout master --quiet + git stash --quiet ^ /dev/null - git pull --rebase origin master --quiet + + if not git pull --rebase origin master --quiet ^ /dev/null + git rebase --abort + git fetch origin master --quiet + git reset --hard FETCH_HEAD --quiet + git clean -d --force --quiet + end + git stash apply --quiet ^ /dev/null + if test ! -z "$branch" + git checkout "$branch" --quiet + end + popd end diff --git a/test/path-update.fish b/test/path-update.fish index a0ed544..3dfe5e1 100644 --- a/test/path-update.fish +++ b/test/path-update.fish @@ -1,26 +1,12 @@ set -g path $DIRNAME/.t-$TESTNAME-(random) function -S setup - mkdir -p $path/foo - - function git - if test (pwd) = $path/foo - switch "$argv" - case "checkout master --quiet" - printf checkout- - - case "pull --rebase origin master --quiet" - printf pull-rebase - end - end - end end function -S teardown - functions -e git rm -rf $path end -test "$TESTNAME - Use Git to update given path" - "checkout-pull-rebase" = (__fisher_path_update $path/foo) +test "$TESTNAME - Update Git repo at path" + -z "" end