Обновить projdump.sh

Use TXT type. Fuck the MD (AI fucked up)
This commit is contained in:
2026-03-03 18:12:39 +07:00
parent 7a51403a6a
commit 51a38bbeba

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# projdump.sh - dump project structure and source code into a single Markdown file # projdump.sh - дамп структуры и кода в один чистый .txt файл для ИИ
set -euo pipefail set -euo pipefail
@@ -8,9 +8,7 @@ usage() {
Использование: $0 <директория> Использование: $0 <директория>
Создаёт один файл: Создаёт один файл:
<basename>-dump.md — дерево проекта + содержимое файлов в Markdown <basename>-dump.txt — дерево проекта + содержимое файлов (без MD-разметки)
Игнорирует типичные артефакты сборки, кэши, IDE-файлы и зависимости.
Параметры: Параметры:
-h, --help Показать эту справку -h, --help Показать эту справку
@@ -33,10 +31,11 @@ TARGET_DIR="$(cd "$TARGET_DIR" && pwd)"
BASENAME=$(basename "$TARGET_DIR") BASENAME=$(basename "$TARGET_DIR")
if ! command -v tree >/dev/null 2>&1; then if ! command -v tree >/dev/null 2>&1; then
echo "Ошибка: требуется утилита 'tree'. Установите её (например, apt install tree)." >&2 echo "Ошибка: требуется утилита 'tree'." >&2
exit 1 exit 1
fi fi
# Список игнорирования (оставлен без изменений)
IGNORE_LIST=( IGNORE_LIST=(
"third_party" "3rd_party" "3rdparty" ".git" ".svn" ".hg" "node_modules" "third_party" "3rd_party" "3rdparty" ".git" ".svn" ".hg" "node_modules"
"__pycache__" "*.pyc" ".venv" "venv" "env" ".env" ".idea" ".vscode" ".vs" "__pycache__" "*.pyc" ".venv" "venv" "env" ".env" ".idea" ".vscode" ".vs"
@@ -53,7 +52,7 @@ IGNORE_LIST=(
"*.log" "logs" "tmp" "temp" ".terraform" ".tfstate" ".tfstate.backup" "*.tfvars" "*.log" "logs" "tmp" "temp" ".terraform" ".tfstate" ".tfstate.backup" "*.tfvars"
) )
# === Подготовка find-аргументов === # Подготовка аргументов для find
FIND_IGNORE_ARGS=() FIND_IGNORE_ARGS=()
for pat in "${IGNORE_LIST[@]}"; do for pat in "${IGNORE_LIST[@]}"; do
if [[ "$pat" == */* ]]; then if [[ "$pat" == */* ]]; then
@@ -65,7 +64,7 @@ done
FIND_CMD=(find "$TARGET_DIR" \( -false "${FIND_IGNORE_ARGS[@]}" \) -prune -o -type f -print0) FIND_CMD=(find "$TARGET_DIR" \( -false "${FIND_IGNORE_ARGS[@]}" \) -prune -o -type f -print0)
# === Подготовка шаблонов для tree === # Подготовка шаблонов для tree
TREE_IGNORE_PATTERNS="" TREE_IGNORE_PATTERNS=""
for pat in "${IGNORE_LIST[@]}"; do for pat in "${IGNORE_LIST[@]}"; do
base_pat="${pat%%/*}" base_pat="${pat%%/*}"
@@ -76,41 +75,29 @@ for pat in "${IGNORE_LIST[@]}"; do
fi fi
done done
OUTPUT_FILE="${BASENAME}-dump.md" OUTPUT_FILE="${BASENAME}-dump.txt"
{ {
echo "# PROJECT: $BASENAME" echo "==============================================================================="
echo "Generated on: $(date)" echo "PROJECT NAME: $BASENAME"
echo -e "\n## PROJECT STRUCTURE" echo "GENERATED ON: $(date)"
echo '```text' echo "==============================================================================="
echo -e "\n--- PROJECT STRUCTURE ---"
tree -n -I "$TREE_IGNORE_PATTERNS" "$TARGET_DIR" tree -n -I "$TREE_IGNORE_PATTERNS" "$TARGET_DIR"
echo '```' echo -e "\n==============================================================================="
echo -e "\n---\n" echo "SOURCE CODE CONTENTS"
echo "==============================================================================="
echo "## SOURCE CODE CONTENTS"
while IFS= read -r -d '' file; do while IFS= read -r -d '' file; do
# Пропускаем явно бинарные файлы по расширению, если нужно # Относительный путь для красоты
# Но пока просто оформляем контент rel_path="${file#$TARGET_DIR/}"
ext="${file##*.}" echo -e "\nFILE: $rel_path"
# Маппинг для расширений без которых ИИ грустит echo "-------------------------------------------------------------------------------"
case "$ext" in
h|hpp|c|cpp) lang="cpp" ;;
sh) lang="bash" ;;
py) lang="python" ;;
md) lang="markdown" ;;
*) lang="$ext" ;;
esac
# Если расширения нет
if [[ "$ext" == "$file" ]]; then lang="text"; fi
echo "### File: $file"
echo " \`\`\`$lang"
cat "$file" cat "$file"
echo -e "\n \`\`\`" echo -e "\n-------------------------------------------------------------------------------"
echo -e "\n---\n" echo "END OF FILE: $rel_path"
done < <("${FIND_CMD[@]}") done < <("${FIND_CMD[@]}")
} > "$OUTPUT_FILE" } > "$OUTPUT_FILE"
echo "Готово: $OUTPUT_FILE" echo "Готово: $OUTPUT_FILE"