From a531b78369e72edfd4f871eded283537d656740c Mon Sep 17 00:00:00 2001 From: Jens Johansen Date: Tue, 16 Mar 2021 08:54:15 +0000 Subject: [PATCH] [infra] Make worktrees work (again?) History: * Back in (pre June) 2018 worktrees in git just worked. * https://dart-review.googlesource.com/c/sdk/+/48091 made it not work. * https://github.com/dart-lang/sdk/issues/33619 was filed. * https://dart-review.googlesource.com/c/sdk/+/127485 was created to work around the problem. I don't know when it happened, but I can't make the above workaround work (at least not anymore) --- adding a `default_git_folder` to my `args.gn` has no effect. This CL builds on it and automatically sets the correct path based on a call to `git rev-parse --resolve-git-dir .git` which gives the correct dir for both worktrees and non-worktrees. Change-Id: I4dcf0445a44348621752fb88d4dab4c99c6ddd1d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/190522 Reviewed-by: Sigmund Cherem Reviewed-by: William Hesse Commit-Queue: Jens Johansen --- sdk_args.gni | 5 ++++- tools/get_dot_git_folder.py | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100755 tools/get_dot_git_folder.py diff --git a/sdk_args.gni b/sdk_args.gni index 2776011c854..7e974a5d0fe 100644 --- a/sdk_args.gni +++ b/sdk_args.gni @@ -18,7 +18,10 @@ declare_args() { # # to out/ReleaseX64/args.gn. The path above can be extracted from the `.git` # file under the git worktree folder. - default_git_folder = "$_dart_root/.git" + # The script run here should take care of everything automatically though. + default_git_folder = exec_script("$_dart_root/tools/get_dot_git_folder.py", + [ rebase_path("$_dart_root/.git") ], + "trim string") # Whether to enable the SDK hash check that will prevent loading a kernel # into a VM which was built with a different SDK. diff --git a/tools/get_dot_git_folder.py b/tools/get_dot_git_folder.py new file mode 100755 index 00000000000..5dabce263fe --- /dev/null +++ b/tools/get_dot_git_folder.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +# for details. All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. +# +# This python script is a wrapper around `git rev-parse --resolve-git-dir`. +# This is used for the build system to work with git worktrees. + +import sys +import subprocess + + +def main(): + if len(sys.argv) != 2: + raise Exception('Expects exactly 1 argument.') + + return subprocess.call( + ['git', 'rev-parse', '--resolve-git-dir', sys.argv[1]]) + + +if __name__ == '__main__': + sys.exit(main())