100 строки
3.3 KiB
Bash
Executable File
100 строки
3.3 KiB
Bash
Executable File
#!/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
|
|
DST=$(dirname $0)
|
|
|
|
# Copy.
|
|
rsync -av --delete $SRC/ $DST
|
|
|
|
# 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 the oldtrace testdata to avoid checking in new binary files.
|
|
# Remove oldtrace_test.go and internal/oldtrace/parser_test.go because
|
|
# they fail without this data.
|
|
rm -r $DST/internal/oldtrace/testdata
|
|
rm $DST/oldtrace_test.go
|
|
rm $DST/internal/oldtrace/parser_test.go
|
|
|
|
# Remove files that are only pertinent to cmd/trace.
|
|
rm $DST/export_test.go
|
|
rm $DST/gc*.go
|
|
rm $DST/mud*.go
|
|
rm $DST/summary*.go
|
|
rm -r $DST/traceviewer
|
|
|
|
# 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'.tmp' -e 's internal/trace golang.org/x/exp/trace '
|
|
find $DST -name '*.go' | xargs -- sed -i'.tmp' -e 's golang.org/x/exp/trace/raw golang.org/x/exp/trace/internal/raw '
|
|
find $DST -name '*.go' | xargs -- sed -i'.tmp' -e 's golang.org/x/exp/trace/event golang.org/x/exp/trace/internal/event '
|
|
find $DST -name '*.go' | xargs -- sed -i'.tmp' -e 's golang.org/x/exp/trace/event/go122 golang.org/x/exp/trace/internal/event/go122 '
|
|
find $DST -name '*.go' | xargs -- sed -i'.tmp' -e 's golang.org/x/exp/trace/version golang.org/x/exp/trace/internal/version '
|
|
find $DST -name '*.go' | xargs -- sed -i'.tmp' -e 's golang.org/x/exp/trace/testtrace golang.org/x/exp/trace/internal/testtrace '
|
|
find $DST -name '*.go' | xargs -- sed -i'.tmp' -e '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'.tmp' -e '/LICENSE file./a \
|
|
\
|
|
// Code generated by "gen.bash" from internal/trace; DO NOT EDIT.\
|
|
\
|
|
//go:build go1.21'
|
|
|
|
# Format the files.
|
|
find $DST -name '*.go' | xargs -- gofmt -w -s
|
|
|
|
# Delete sed backups
|
|
find $DST -name '*.go.tmp' -delete
|
|
|
|
# Restore known files.
|
|
git checkout gen.bash flightrecorder.go flightrecorder_test.go
|