blob: fd44d9a31e9948a0e105dc424d82dc80cef2d715 [file] [log] [blame]
// Copyright 2020 The Monogon Project Authors.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// localconfig modifies the project's IntelliJ config to include project-specific settings. This is usually done by
// checking in the .idea directory, but we do not want to do this: it conflicts with the Bazel plugin's way of
// conducting its workspace business, lacks backwards compatibility, and is a common source of spurious Git diffs,
// especially when the IDE/JDK/random plugins are updated and team members run different versions.
//
// Instead, we use the officially supported way of shipping IntelliJ Bazel project configs - a .bazelproject file that
// can be imported using the Bazel project import wizard, with local configs. We then use this tool to mangle the local
// configs to add additional custom configuration beyond run configurations. This avoids merge conflicts and allows us
// to intelligently handle schema changes.
//
package main
import (
"log"
"os"
"path"
"source.monogon.dev/intellij/localconfig/watchers"
)
func main() {
if len(os.Args) != 2 {
log.Fatal("usage: localconfig <project dir>")
}
projectDir := os.Args[1]
if _, err := os.Stat(path.Join(projectDir, ".ijwb")); err != nil {
log.Fatalf("invalid project dir: %v", err)
}
if err := watchers.RewriteConfig(projectDir); err != nil {
log.Fatal(err)
}
}