R/git-sitrep.R

Defines functions git_sitrep

Documented in git_sitrep

#' Git Situation Report
#'
#' Get a situation report of the current git repository.
#'
#' @return `NULL` ... invisibly.
#'
#' @export
git_sitrep <- function() {
  if ( is_git() ) {
    cat("Using Git version: ", slug_color(git_version(), "\033[34m"), "\n\n", sep = "")
    cat("Current branch: ", slug_color(git_current_br(), "\033[32m"), "\n", sep = "")
    cat("Default branch: ", slug_color(git_default_br(), "\033[36m"), "\n", sep = "")

    cat("\nRepo status:\n")
    gss()

    cat("\nBranches:\n")
    gba()

    br <- git_current_br()
    be <- git("rev-list", "--count", paste0(br, "..@{upstream}"),
              echo_cmd = FALSE)$stdout
    ah <- git("rev-list", "--count", paste0("@{upstream}..", br),
              echo_cmd = FALSE)$stdout
    remote <- git("remote", "show", echo_cmd = FALSE)$stdout

    cat("\nLocal status:\n")
    if ( ah == "0" && be == "0" ) {
      done("OK")
    }
    if ( ah > "0" ) {
      cat("Your local branch", slug_color(br),
          "is ahead of", slug_color(paste0(remote, "/", br), "\033[34m"),
          "by", ah, "commit(s).\n")
    }
    if ( be > "0" ) {
      cat("Your local branch", slug_color(br),
          "is behind", slug_color(paste0(remote, "/", br), "\033[34m"),
          "by", be, "commit(s).\n")
    }

    cat("\nUpstream remotes: ", slug_color(remote, "\033[33m"), "\n", sep = "")
    br_verb <- git("branch", "-vv", echo_cmd = FALSE)$stdout
    if ( not_interactive() ) {
      cat(br_verb, sep = "\n")
    } else {
      br_verb |>
        gsub(pattern = "(^\\* [[:alnum:]|_-]+ )", replacement = "\033[32m\\1\033[0m") |>
        gsub(pattern = "(origin/[[:alnum:]|_-]+)", replacement = "\033[34m\\1\033[0m") |>
        cat(sep = "\n")
    }

    cat("\nCommit log: ", slug_color(br, "\033[32m"), "\n", sep = "")
    glog(5L)
  } else {
    invisible(NULL)
  }
}

Try the gitr package in your browser

Any scripts or data that you put into this service are public.

gitr documentation built on April 13, 2025, 1:08 a.m.