#!/usr/bin/env bash
#
# list_p4_files.sh
#
# Generates a combined file list from all Perforce depots.
# Iterates only one directory level deep to avoid memory spikes.
set -uo pipefail
OUTPUT_FILE="p4_file_list.txt"
TEMP_DIR=$(mktemp -d)
echo "Collecting Perforce file list. Temporary directory: $TEMP_DIR"
> "$OUTPUT_FILE"
###############################################
# 1. Get list of depots
###############################################
echo "Fetching depot list..."
depots=$(p4 -ztag -F %name% depots)
###############################################
# 2. For each depot, list top-level directories
###############################################
for depot in $depots; do
echo "Processing depot: $depot"
# Example depot name: //depot
depot_path="//${depot}"
# Get top-level directories under the depot
# Example output: //depot/foo/ //depot/bar/
toplevel_dirs=$(p4 -ztag dirs "${depot_path}/*" 2>/dev/null | awk '{print $3}')
for dir in $toplevel_dirs; do
echo " Scanning: $dir"
temp_file="$TEMP_DIR/$(echo "$dir" | sed 's/[^a-zA-Z0-9]/_/g').txt"
p4 -ztag -F %depotFile% files "$dir/..." > "$temp_file"
cat "$temp_file" >> "$OUTPUT_FILE"
done
done
echo "Final combined list written to: $OUTPUT_FILE"
echo "Cleaning up..."
rm -rf "$TEMP_DIR"
echo "Done."