lean4-htt/Leanpkg2/Git.lean
2021-05-29 08:54:48 -04:00

38 lines
1.3 KiB
Text

/-
Copyright (c) 2017 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Gabriel Ebner, Sebastian Ullrich
-/
import Leanpkg2.LeanVersion
open System
namespace Leanpkg2
def upstreamGitBranch :=
"master"
def gitdefaultRevision : Option String → String
| none => upstreamGitBranch
| some branch => branch
def gitParseRevision (gitRepo : FilePath) (rev : String) : IO String := do
let rev ← IO.Process.run {cmd := "git", args := #["rev-parse", "-q", "--verify", rev], cwd := gitRepo}
rev.trim -- remove newline at end
def gitHeadRevision (gitRepo : FilePath) : IO String :=
gitParseRevision gitRepo "HEAD"
def gitParseOriginRevision (gitRepo : FilePath) (rev : String) : IO String :=
(gitParseRevision gitRepo $ "origin/" ++ rev) <|> gitParseRevision gitRepo rev
<|> throw (IO.userError s!"cannot find revision {rev} in repository {gitRepo}")
def gitLatestOriginRevision (gitRepo : FilePath) (branch : Option String) : IO String := do
discard <| IO.Process.run {cmd := "git", args := #["fetch"], cwd := gitRepo}
gitParseOriginRevision gitRepo (gitdefaultRevision branch)
def gitRevisionExists (gitRepo : FilePath) (rev : String) : IO Bool := do
try
discard <| gitParseRevision gitRepo (rev ++ "^{commit}")
true
catch _ => false