synapsecns/sanguine

View on GitHub
make/scripts/flatten.sh

Summary

Maintainability
Test Coverage
#!/usr/bin/env bash
# This script flattens Solidity contracts and saves them in ./flattened
# The existing content of ./flattened is removed
# This tool takes both globs and filenames as the list of arguments and flattens everything
# Usage: ./script/sh/flatten.sh contracts/**.sol contracts/client/TestClient.sol <...>

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

# Check if arguments were supplied
if [ $# -eq 0 ]; then
  echo -e "${RED}Error: provide globs/filenames of the contracts to flatten!${NC}"
  exit 1
fi

# First, we remove the existing flattened files
rm -rf ./flattened

# Track the amount of flattened files for the final report
count=0
# Then, we iterate over the supplied arguments
# If any argument was a glob, this will iterate over the files it specifies
for var in "$@"; do
  # Strip contract name "Abc.sol" from the path
  fn=$(basename "$var")
  # Flatten the file and save it in ./flattened
  # Make sure that flattened contracts base names are unique!
  forge flatten "$var" -o "./flattened/$fn"
  ((++count))
done

echo -e "${GREEN}Files flattened: $count${NC}"