# List branches with upstream, last commit date and subject
def gb [] {
  ^git for-each-ref --format "%(refname:short)\t%(upstream:short)\t%(creatordate:relative)\t%(subject)" refs/heads
  | lines
  | each {|l|
      let p = $l | split row "\t"
      {
        branch:   $p.0
        upstream: (if ($p.1 | is-empty) { null } else { $p.1 })
        date:     $p.2
        subject:  $p.3
      }
  }
}

# Git log as a table — default 20 entries, pass n to change
def gl [n: int = 20] {
  ^git log --format "%H\t%as\t%an\t%s" -n $n
  | lines
  | each {|l|
      let p = $l | split row "\t"
      {
        hash:    ($p.0 | str substring 0..7)
        date:    $p.1
        author:  $p.2
        subject: $p.3
      }
  }
}

# Diff stats as a table (unstaged by default; --cached for staged)
def gd [--cached] {
  let flags = if $cached { [--cached] } else { [] }
  ^git diff --numstat ...$flags
  | lines
  | each {|l|
      let p = $l | split row "\t"
      {
        ins:  ($p.0 | into int)
        del:  ($p.1 | into int)
        file: $p.2
      }
  }
}
