#!/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 's/internal\/trace/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; DO NOT EDIT.\n\n//go:build go1.21'

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

# Restore known files.
git checkout gen.bash flightrecorder.go flightrecorder_test.go
