# Given the path to a .git directory this function prints a human-readable name
# for the git action in progress (e.g. "merge") or returns 1.
function fish_print_git_action --argument-names git_dir
    if test -z "$git_dir"
        if not command -sq git
            return 1
        end
        if not set git_dir (command git rev-parse --git-dir 2>/dev/null)
            return 1
        end
    end

    for action_dir in "$git_dir/rebase-apply" "$git_dir/rebase"
        if test -d "$action_dir"
            if test -f "$action_dir/rebasing"
                echo -n rebase
            else if test -f "$action_dir/applying"
                echo -n apply
            else
                echo -n rebase/apply
            end
            return 0
        end
    end

    for action_dir in "$git_dir/rebase-merge/interactive" "$git_dir/.dotest-merge/interactive"
        if test -f "$action_dir"
            echo -n rebase-interactive
            return 0
        end
    end

    for action_dir in "$git_dir/rebase-merge" "$git_dir/.dotest-merge"
        if test -d "$action_dir"
            echo -n rebase-merge
            return 0
        end
    end

    if test -f "$git_dir/MERGE_HEAD"
        echo -n merge
        return 0
    end

    if test -f "$git_dir/CHERRY_PICK_HEAD"
        if test -d "$git_dir/sequencer"
            set cherry_pick_sequence_formatted cherry-pick-sequence
            echo -n cherry-pick-sequence
        else
            set cherry_pick_formatted cherry-pick
            echo -n cherry-pick
        end
        return 0
    end

    if test -f "$git_dir/REVERT_HEAD"
        if test -d "$git_dir/sequencer"
            echo -n revert-sequence
        else
            echo -n revert
        end
        return 0
    end

    if test -f "$git_dir/BISECT_LOG"
        echo -n bisect
        return 0
    end

    return 1
end
