123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import std/[os, uri, strformat, strutils]
- import std/private/gitutils
- when defined(nimPreviewSlimSystem):
- import std/assertions
- proc exec(cmd: string) =
- echo "deps.cmd: " & cmd
- let status = execShellCmd(cmd)
- doAssert status == 0, cmd
- proc execRetry(cmd: string) =
- let ok = retryCall(call = block:
- let status = execShellCmd(cmd)
- let result = status == 0
- if not result:
- echo fmt"failed command: '{cmd}', status: {status}"
- result)
- doAssert ok, cmd
- proc cloneDependency*(destDirBase: string, url: string, commit = commitHead,
- appendRepoName = true, allowBundled = false) =
- let destDirBase = destDirBase.absolutePath
- let p = url.parseUri.path
- let name = p.splitFile.name
- var destDir = destDirBase
- if appendRepoName: destDir = destDir / name
- let quotedDestDir = destDir.quoteShell
- if not dirExists(destDir):
- # note: old code used `destDir / .git` but that wouldn't prevent git clone
- # from failing
- execRetry fmt"git clone -q {url} {quotedDestDir}"
- if isGitRepo(destDir):
- let oldDir = getCurrentDir()
- setCurrentDir(destDir)
- try:
- execRetry "git fetch -q"
- exec fmt"git checkout -q {commit}"
- finally:
- setCurrentDir(oldDir)
- elif allowBundled:
- discard "this dependency was bundled with Nim, don't do anything"
- else:
- quit "FAILURE: " & destdir & " already exists but is not a git repo"
|