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