| """Repository rule for Git autoconfiguration. |
| |
| `git_configure` depends on the following environment variables: |
| |
| * `PYTHON_BIN_PATH`: location of python binary. |
| """ |
| |
| _PYTHON_BIN_PATH = "PYTHON_BIN_PATH" |
| |
| def _fail(msg): |
| """Output failure message when auto configuration fails.""" |
| red = "\033[0;31m" |
| no_color = "\033[0m" |
| fail("%sGit Configuration Error:%s %s\n" % (red, no_color, msg)) |
| |
| def _get_python_bin(repository_ctx): |
| """Gets the python bin path.""" |
| python_bin = repository_ctx.os.environ.get(_PYTHON_BIN_PATH) |
| if python_bin != None: |
| return python_bin |
| python_bin_path = repository_ctx.which("python") |
| if python_bin_path != None: |
| return str(python_bin_path) |
| _fail("Cannot find python in PATH, please make sure " + |
| "python is installed and add its directory in PATH, or --define " + |
| "%s='/something/else'.\nPATH=%s" % ( |
| _PYTHON_BIN_PATH, |
| repository_ctx.os.environ.get("PATH", ""), |
| )) |
| |
| def _git_conf_impl(repository_ctx): |
| repository_ctx.template( |
| "BUILD", |
| Label("//third_party/git:BUILD.tpl"), |
| ) |
| |
| tensorflow_root_path = str(repository_ctx.path( |
| Label("@org_tensorflow//:BUILD"), |
| ))[:-len("BUILD")] |
| python_script_path = repository_ctx.path( |
| Label("@org_tensorflow//tensorflow/tools/git:gen_git_source.py"), |
| ) |
| generated_files_path = repository_ctx.path("gen") |
| |
| r = repository_ctx.execute( |
| ["test", "-f", "%s/.git/logs/HEAD" % tensorflow_root_path], |
| ) |
| if r.return_code == 0: |
| unused_var = repository_ctx.path(Label("//:.git/HEAD")) # pylint: disable=unused-variable |
| |
| result = repository_ctx.execute([ |
| _get_python_bin(repository_ctx), |
| python_script_path, |
| "--configure", |
| tensorflow_root_path, |
| "--gen_root_path", |
| generated_files_path, |
| ], quiet = False) |
| |
| if not result.return_code == 0: |
| _fail(result.stderr) |
| |
| git_configure = repository_rule( |
| implementation = _git_conf_impl, |
| environ = [ |
| _PYTHON_BIN_PATH, |
| ], |
| ) |