blob: a2ebcdcc8f32176bde0a8b419bfbf5a1a09d01e8 [file]
/-
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 Leanpkg.LeanVersion
namespace Leanpkg
def upstreamGitBranch :=
"master"
def gitdefaultRevision : Option String → String
| none => upstreamGitBranch
| some branch => branch
def gitParseRevision (gitRepoDir : String) (rev : String) : IO String := do
let rev ← IO.Process.run {cmd := "git", args := #["rev-parse", "-q", "--verify", rev], cwd := gitRepoDir}
rev.trim -- remove newline at end
def gitHeadRevision (gitRepoDir : String) : IO String :=
gitParseRevision gitRepoDir "HEAD"
def gitParseOriginRevision (gitRepoDir : String) (rev : String) : IO String :=
(gitParseRevision gitRepoDir $ "origin/" ++ rev) <|> gitParseRevision gitRepoDir rev
<|> throw (IO.userError s!"cannot find revision {rev} in repository {gitRepoDir}")
def gitLatestOriginRevision (gitRepoDir : String) (branch : Option String) : IO String := do
discard <| IO.Process.run {cmd := "git", args := #["fetch"], cwd := gitRepoDir}
gitParseOriginRevision gitRepoDir (gitdefaultRevision branch)
def gitRevisionExists (gitRepoDir : String) (rev : String) : IO Bool := do
try
discard <| gitParseRevision gitRepoDir (rev ++ "^{commit}")
true
catch _ => false
end Leanpkg