Обновить projdump.sh
Use TXT type. Fuck the MD (AI fucked up)
This commit is contained in:
55
projdump.sh
55
projdump.sh
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user