blob: 8aa037f1b7f88638c67ba587894f86c8058ccaf0 [file]
#!/usr/bin/env python3
# Copyright 2026 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Sets up jj for a Chromium checkout."""
import logging
import os
import pathlib
import shutil
import subprocess
import sys
from util import run_command
from util import run_jj
def main():
script_dir = pathlib.Path(__file__).resolve().parent
repo_root = script_dir.parent.parent
os.chdir(repo_root)
if not (repo_root / '.jj').is_dir():
run_jj(['git', 'init', '--colocate', '.'])
# Link the shared jj config into the repo.
config_path = pathlib.Path(
run_jj(
['config', 'path', '--repo'], stdout=subprocess.PIPE, text=True
).stdout.strip()
)
config_path.unlink(missing_ok=True)
config_source = (script_dir / 'config.toml').resolve()
try:
config_path.symlink_to(config_source)
except OSError:
shutil.copy2(str(config_source), str(config_path))
logging.warning(
'Could not create symlink; copied config.toml instead. Future changes '
'to tools/jj/config.toml will need to be re-copied manually.'
)
if sys.platform == 'win32':
logging.warning(
'On Windows, symlinks require Developer Mode to be enabled or '
'administrator privileges.'
)
# Ensure that jj snapshots the current commit so it doesn't get lost
# with git switch.
run_jj(['new'])
# Fix issues with line endings. See go/jj-in-chromium.
run_command(['git', 'config', 'core.autocrlf', 'false'])
run_command(['git', 'switch', 'origin/main', '--detach'])
run_jj(['abandon'])
run_command(['git', 'add', '-A'])
print(
'Reminder: If you haven\'t already, we recommend joining '
'https://groups.google.com/g/chromium-jj-users'
)
if __name__ == '__main__':
main()