mirror of
https://github.com/tailscale/tailscale.git
synced 2026-09-15 15:29:33 -04:00
Be cacheable in git worktrees.
Revision to earlier b39ee0445d
Updates tailscale/corp#40359
Change-Id: Ib374d90bf6ee833caabaa3c159ec9f09d991aa41
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
// Copyright (c) Tailscale Inc & contributors
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package httpm
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestUsedConsistently(t *testing.T) {
|
|
dir, err := os.Getwd()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rootDir := filepath.Join(dir, "../..")
|
|
|
|
// Open the git index so Go's test cache tracks it as an input.
|
|
// The index file changes on git reset, checkout, pull, etc.,
|
|
// so the cache is properly invalidated when moving between commits.
|
|
// Ask git for the path because .git is a file in a git worktree. Opening
|
|
// only the index avoids recording the broader .git directory metadata.
|
|
indexCmd := exec.Command("git", "rev-parse", "--path-format=absolute", "--git-path", "index")
|
|
indexCmd.Dir = rootDir
|
|
indexOut, err := indexCmd.Output()
|
|
if err != nil {
|
|
t.Skipf("skipping test since git index cannot be found: %v", err)
|
|
}
|
|
indexPath := strings.TrimSpace(string(indexOut))
|
|
f, err := os.Open(indexPath)
|
|
if err != nil {
|
|
t.Fatalf("opening git index %q: %v", indexPath, err)
|
|
}
|
|
f.Close()
|
|
|
|
cmd := exec.Command("git", "grep", "-l", "-F", "http.Method")
|
|
cmd.Dir = rootDir
|
|
matches, _ := cmd.Output()
|
|
for fn := range strings.SplitSeq(strings.TrimSpace(string(matches)), "\n") {
|
|
if strings.HasPrefix(fn, "tempfork/") {
|
|
// Files under tempfork are vendored copies of upstream
|
|
// code that we want to keep as close to upstream as
|
|
// possible, so don't hold them to this rule.
|
|
continue
|
|
}
|
|
switch fn {
|
|
case "util/httpm/httpm.go", "util/httpm/httpm_test.go":
|
|
continue
|
|
}
|
|
t.Errorf("http.MethodFoo constant used in %s; use httpm.FOO instead", fn)
|
|
}
|
|
}
|