summaryrefslogtreecommitdiffstats
path: root/krebs/5pkgs/simple/git-preview.nix
blob: d6c9579a738a10d5a39e853c1bf55f6fc3e7c549 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{ coreutils, git, writeDashBin }:

writeDashBin "git-preview" ''
  set -efu
  head_commit=$(${git}/bin/git log -1 --format=%H)
  merge_commit=$1; shift
  merge_message='Merge for git-preview'
  preview_dir=$(${coreutils}/bin/mktemp --tmpdir -d git-preview.XXXXXXXX)
  preview_branch=$(${coreutils}/bin/basename "$preview_dir")
  ${git}/bin/git worktree add -b "$preview_branch" "$preview_dir" >/dev/null
  ${git}/bin/git -C "$preview_dir" checkout "$head_commit"
  ${git}/bin/git -C "$preview_dir" merge -m "$merge_message" "$merge_commit"
  ${git}/bin/git -C "$preview_dir" diff "$head_commit.." "$@" &
  ${git}/bin/git branch -fd "$preview_branch"
  ${coreutils}/bin/rm -fR "$preview_dir"
  wait
''