Skip to content

Commit

Permalink
trace: add script to generate experimental API from a Go checkout
Browse files Browse the repository at this point in the history
For golang/go#62627.

Change-Id: I48080a9e55ea3e5979a51f303a0c99de9218fd13
Reviewed-on: https://go-review.googlesource.com/c/exp/+/546737
LUCI-TryBot-Result: Go LUCI <[email protected]>
Reviewed-by: Michael Pratt <[email protected]>
  • Loading branch information
mknyszek committed Dec 6, 2023
1 parent 6522937 commit c4cbd9c
Showing 1 changed file with 78 additions and 0 deletions.
78 changes: 78 additions & 0 deletions trace/gen.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#!/usr/bin/env bash
# Copyright 2023 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# This script copies this directory to golang.org/x/exp/trace.
# Just point it at a Go commit or a local Go checkout.

set -e

if [ "$#" -ne 1 ]; then
echo 'gen.bash expects one argument: a go.googlesource.com/go commit hash to generate the package from or a path to a Go checkout'
exit 1
fi

# Determine the source.
if [ -d $1 ]; then
echo "assuming Go checkout at $1..."

# Select the Go checkout.
GODIR=$1
else
echo "using $1 as a commit hash..."

# Check out Go.
TMP=$(mktemp -d)
git -C $TMP clone https://go.googlesource.com/go
git -C $TMP/go checkout $1
GODIR=$TMP/go
fi

# Define src and dst.
SRC=$GODIR/src/internal/trace/v2
DST=$(dirname $0)

# Copy.
cp -r $SRC/* $DST
rm $DST/mkexp.bash

# Remove the trace_test.go file and the testprogs it invokes.
# This really tests the tracer, it's not necessary to it bring along
# The trace tests are also problematic because they fail to run on
# Go versions before tip. The testprog directory is problematic because
# of //go:build ignore, so we'd have to complicate the logic below to
# support it.
rm $DST/trace_test.go
rm -r $DST/testdata/testprog

# Remove mktests.go because its a //go:build ignore file, so it would
# complicate the logic below. This codebase isn't the source of truth
# anyway.
rm $DST/testdata/mktests.go

# Make some packages internal.
mv $DST/raw $DST/internal/raw
mv $DST/event $DST/internal/event
mv $DST/version $DST/internal/version
mv $DST/testtrace $DST/internal/testtrace

# Move the debug commands out of testdata.
mv $DST/testdata/cmd $DST/cmd

# Fix up import paths.
find $DST -name '*.go' | xargs -- sed -i 's/internal\/trace\/v2/golang.org\/x\/exp\/trace/'
find $DST -name '*.go' | xargs -- sed -i 's/golang.org\/x\/exp\/trace\/raw/golang.org\/x\/exp\/trace\/internal\/raw/'
find $DST -name '*.go' | xargs -- sed -i 's/golang.org\/x\/exp\/trace\/event/golang.org\/x\/exp\/trace\/internal\/event/'
find $DST -name '*.go' | xargs -- sed -i 's/golang.org\/x\/exp\/trace\/event\/go122/golang.org\/x\/exp\/trace\/internal\/event\/go122/'
find $DST -name '*.go' | xargs -- sed -i 's/golang.org\/x\/exp\/trace\/version/golang.org\/x\/exp\/trace\/internal\/version/'
find $DST -name '*.go' | xargs -- sed -i 's/golang.org\/x\/exp\/trace\/testtrace/golang.org\/x\/exp\/trace\/internal\/testtrace/'
find $DST -name '*.go' | xargs -- sed -i 's/internal\/txtar/golang.org\/x\/tools\/txtar/'

# Add build tag for Go 1.21 and generated code comment.
find $DST -name '*.go' | xargs -- sed -i '/LICENSE file./a \
\
// Code generated by "gen.bash" from internal/trace/v2; DO NOT EDIT.\n\n//go:build go1.21'

# Format the files.
find $DST -name '*.go' | xargs -- gofmt -w -s

0 comments on commit c4cbd9c

Please sign in to comment.