You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
oh-my-fish/pkg/omf/functions/repo/omf.repo.pull.fish

60 lines
1.6 KiB
Fish

function omf.repo.pull -a repo_dir branch
function __omf.repo.git -V repo_dir
command git -C "$repo_dir" $argv
end
if test -z "$branch"
set branch (__omf.repo.git symbolic-ref -q --short HEAD)
end
set -l remote origin
if test (__omf.repo.git config --get remote.upstream.url)
set remote upstream
end
set initial_branch (__omf.repo.git symbolic-ref -q --short HEAD);
or return 1
set initial_revision (__omf.repo.git rev-parse -q --verify HEAD);
or return 1
# the refspec ensures that '$remote/$branch' gets updated
set -l refspec "refs/heads/$branch:refs/remotes/$remote/$branch"
__omf.repo.git fetch --quiet $remote $refspec;
or return 1
if test (__omf.repo.git rev-list --count "$branch"...FETCH_HEAD) -eq 0
return 2
end
if not __omf.repo.git diff --quiet
echo (omf::em)"Stashing your changes:"(omf::off)
__omf.repo.git status --short --untracked-files
__omf.repo.git stash save --include-untracked --quiet;
and set stashed
end
if test "$initial_branch" != "$branch"
__omf.repo.git checkout "$branch" --quiet
end
if not __omf.repo.git merge --ff-only --quiet FETCH_HEAD
__omf.repo.git checkout $initial_branch
__omf.repo.git reset --hard $initial_revision
set -q stashed; and __omf.repo.git stash pop
return 1
end
if test "$initial_branch" != "$branch"
__omf.repo.git checkout $initial_branch --quiet
end
if set -q stashed
__omf.repo.git stash pop --quiet
echo (omf::em)"Restored your changes:"(omf::off)
__omf.repo.git status --short --untracked-files
end
return 0
end