diff --git a/pkgs/development/python-modules/wandb/default.nix b/pkgs/development/python-modules/wandb/default.nix index 615b4e64aa4c..44b85624cf3f 100644 --- a/pkgs/development/python-modules/wandb/default.nix +++ b/pkgs/development/python-modules/wandb/default.nix @@ -32,6 +32,7 @@ , setproctitle , setuptools , shortuuid +, substituteAll , tqdm }: @@ -49,6 +50,13 @@ buildPythonPackage rec { hash = "sha256-ZY7nTj93piTEeHhW+H+nQ+ws2dDmmY6u3p7uz296PbA="; }; + patches = [ + (substituteAll { + src = ./hardcode-git-path.patch; + git = "${lib.getBin git}/bin/git"; + }) + ]; + # setuptools is necessary since pkg_resources is required at runtime. propagatedBuildInputs = [ click @@ -67,16 +75,6 @@ buildPythonPackage rec { shortuuid ]; - # wandb expects git to be in PATH. See https://gist.github.com/samuela/57aeee710e41ab2bf361b7ed8fbbeabf - # for the error message, and an example usage here: https://github.com/wandb/client/blob/d5f655b7ca7e3eac2f3a67a84bc5c2a664a31baf/wandb/sdk/internal/meta.py#L128. - # See https://github.com/NixOS/nixpkgs/pull/164176#discussion_r828801621 as to - # why we don't put it in propagatedBuildInputs. Note that this is difficult to - # test offline due to https://github.com/wandb/client/issues/3519. - postInstall = '' - mkdir -p $out/bin - ln -s ${git}/bin/git $out/bin/git - ''; - preCheck = '' export HOME=$(mktemp -d) ''; diff --git a/pkgs/development/python-modules/wandb/hardcode-git-path.patch b/pkgs/development/python-modules/wandb/hardcode-git-path.patch new file mode 100644 index 000000000000..6d91add9d383 --- /dev/null +++ b/pkgs/development/python-modules/wandb/hardcode-git-path.patch @@ -0,0 +1,83 @@ +diff --git a/functional_tests/kfp/wandb_probe.py b/functional_tests/kfp/wandb_probe.py +index 82fadfe1..25c1454c 100644 +--- a/functional_tests/kfp/wandb_probe.py ++++ b/functional_tests/kfp/wandb_probe.py +@@ -5,7 +5,7 @@ import subprocess + def wandb_probe_package(): + if not os.environ.get("WB_PROBE_PACKAGE"): + return +- s, o = subprocess.getstatusoutput("git rev-parse HEAD") ++ s, o = subprocess.getstatusoutput("@git@ rev-parse HEAD") + if s: + return + wandb_local = f"git+https://github.com/wandb/client.git@{o}#egg=wandb" +diff --git a/wandb/cli/cli.py b/wandb/cli/cli.py +index 5767e61c..56009fec 100644 +--- a/wandb/cli/cli.py ++++ b/wandb/cli/cli.py +@@ -1745,7 +1745,7 @@ def restore(ctx, run, no_git, branch, project, entity): + commit, json_config, patch_content, metadata = api.run_config( + project, run=run, entity=entity + ) +- repo = metadata.get("git", {}).get("repo") ++ repo = metadata.get("@git@", {}).get("repo") + image = metadata.get("docker") + restore_message = ( + """`wandb restore` needs to be run from the same git repository as the original run. +@@ -1764,7 +1764,7 @@ Run `git clone %s` and restore from there or pass the --no-git flag.""" + + if commit and api.git.enabled: + wandb.termlog(f"Fetching origin and finding commit: {commit}") +- subprocess.check_call(["git", "fetch", "--all"]) ++ subprocess.check_call(["@git@", "fetch", "--all"]) + try: + api.git.repo.commit(commit) + except ValueError: +@@ -1818,7 +1818,7 @@ Run `git clone %s` and restore from there or pass the --no-git flag.""" + # --reject is necessary or else this fails any time a binary file + # occurs in the diff + exit_code = subprocess.call( +- ["git", "apply", "--reject", patch_rel_path], cwd=root ++ ["@git@", "apply", "--reject", patch_rel_path], cwd=root + ) + if exit_code == 0: + wandb.termlog("Applied patch") +diff --git a/wandb/sdk/internal/internal_api.py b/wandb/sdk/internal/internal_api.py +index 612220b9..b761bfbd 100644 +--- a/wandb/sdk/internal/internal_api.py ++++ b/wandb/sdk/internal/internal_api.py +@@ -660,7 +660,7 @@ class Api: + ) + patch = BytesIO() + if self.git.dirty: +- self.git.repo.git.execute(["git", "diff"], output_stream=patch) ++ self.git.repo.git.execute(["@git@", "diff"], output_stream=patch) + patch.seek(0) + cwd = "." + if self.git.enabled: +diff --git a/wandb/sdk/internal/meta.py b/wandb/sdk/internal/meta.py +index 6c53f750..c385951a 100644 +--- a/wandb/sdk/internal/meta.py ++++ b/wandb/sdk/internal/meta.py +@@ -125,7 +125,7 @@ class Meta: + logger.debug("save patches") + try: + root = self._git.root +- diff_args = ["git", "diff"] ++ diff_args = ["@git@", "diff"] + if self._git.has_submodule_diff: + diff_args.append("--submodule=diff") + +diff --git a/wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py b/wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py +index 614df9f5..38db460b 100644 +--- a/wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py ++++ b/wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py +@@ -67,7 +67,7 @@ def get_git_changeset(): + repo_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + try: + git_log = subprocess.Popen( +- 'git log --pretty=format:%ct --quiet -1 HEAD', ++ '@git@ log --pretty=format:%ct --quiet -1 HEAD', + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + shell=True, cwd=repo_dir, universal_newlines=True, + )