allow Nix builds by not calling git in isGitRepo for Nimble (#23515)

Because `isGitRepo()` call requires `/bin/sh` it will always fail when
building Nim in a Nix build sandbox, and the check doesn't even make
sense if Nix already provides Nimble source code.

Since for Nimble `allowBundled` is set to `true` this effectlvely does
not change behavior for normal builds, but does avoid ugly hacks when
building in Nix which lacks `/bin/sh` and fails to call `git`.

Reference:
*
https://github.com/status-im/nimbus-eth2/pull/6180#discussion_r1570237858

Signed-off-by: Jakub Sokołowski <jakub@status.im>
(cherry picked from commit d6823f4776)
This commit is contained in:
Jakub
2024-04-18 12:25:19 +02:00
committed by narimiran
parent c696ec92db
commit fd64402e47

View File

@@ -4,7 +4,7 @@ internal API for now, API subject to change
# xxx move other git utilities here; candidate for stdlib.
import std/[os, osproc, strutils, tempfiles]
import std/[os, paths, osproc, strutils, tempfiles]
when defined(nimPreviewSlimSystem):
import std/[assertions, syncio]
@@ -32,15 +32,8 @@ template retryCall*(maxRetry = 3, backoffDuration = 1.0, call: untyped): bool =
result
proc isGitRepo*(dir: string): bool =
## This command is used to get the relative path to the root of the repository.
## Using this, we can verify whether a folder is a git repository by checking
## whether the command success and if the output is empty.
let (output, status) = execCmdEx("git rev-parse --show-cdup", workingDir = dir)
# On Windows there will be a trailing newline on success, remove it.
# The value of a successful call typically won't have a whitespace (it's
# usually a series of ../), so we know that it's safe to unconditionally
# remove trailing whitespaces from the result.
result = status == 0 and output.strip() == ""
## Avoid calling git since it depends on /bin/sh existing and fails in Nix.
return fileExists(dir/".git/HEAD")
proc diffFiles*(path1, path2: string): tuple[output: string, same: bool] =
## Returns a human readable diff of files `path1`, `path2`, the exact form of