#!/bin/bash # -*- coding: utf-8 -*- # Timestamp: "2026-01-19 (ywatanabe)" # File: ./scripts/shell/modules/process_archive.sh # Description: Archive compiled documents with git-based naming (timestamp + commit hash) THIS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" LOG_PATH="$THIS_DIR/.$(basename "$0").log" echo >"$LOG_PATH" GRAY='\033[0;90m' GREEN='\033[0;32m' YELLOW='\033[0;33m' RED='\033[0;31m' NC='\033[0m' echo_info() { echo -e "${GRAY}INFO: $1${NC}"; } log_info() { if [ "${SCITEX_LOG_LEVEL:-1}" -ge 2 ]; then echo -e " \033[0;90m→ $1\033[0m" fi } echo_success() { echo -e "${GREEN}SUCC: $1${NC}"; } echo_warning() { echo -e "${YELLOW}WARN: $1${NC}"; } echo_error() { echo -e "${RED}ERRO: $1${NC}"; } # Load configuration # shellcheck source=../../../config/load_config.sh source ./config/load_config.sh "$SCITEX_WRITER_DOC_TYPE" touch "$LOG_PATH" >/dev/null 2>&1 echo log_info "Running ${BASH_SOURCE[0]}..." # Check if working directory is clean (no uncommitted changes) is_git_clean() { if ! git rev-parse --git-dir >/dev/null 2>&1; then return 1 # Not a git repo fi if ! git rev-parse HEAD >/dev/null 2>&1; then return 1 # No commits yet fi # Check for uncommitted changes (staged or unstaged) git diff --quiet HEAD -- 2>/dev/null && git diff --cached --quiet HEAD -- 2>/dev/null } # Get git-based identifier: YYYYMMDD-HHMMSS_abc1234 get_git_identifier() { local timestamp timestamp=$(date +%Y%m%d-%H%M%S) local hash if git rev-parse --git-dir >/dev/null 2>&1; then hash=$(git rev-parse --short=7 HEAD 2>/dev/null) if [ -z "$hash" ]; then hash="nocommit" fi else hash="nogit" fi echo "${timestamp}_${hash}" } # Store a file to archive with git-based naming store_file() { local file=$1 local extension=$2 local git_id=$3 local filename filename=$(basename "${file%.*}") if [ ! -f "$file" ]; then log_info "File not found: $file" return 0 fi # Handle diff files: manuscript_diff -> manuscript_YYYYMMDD-HHMMSS_abc1234_diff if [[ "$filename" =~ _diff$ ]]; then local doc_base="${filename%_diff}" local archived_name="${doc_base}_${git_id}_diff" else local archived_name="${filename}_${git_id}" fi local archive_path="${SCITEX_WRITER_VERSIONS_DIR}/${archived_name}.${extension}" log_info "Archiving: $file -> $archive_path" cp "$file" "$archive_path" # Also keep a "current" copy without timestamp for easy access local current_path="${SCITEX_WRITER_VERSIONS_DIR}/${filename}.${extension}" cp "$file" "$current_path" } process_archive() { mkdir -p "$SCITEX_WRITER_VERSIONS_DIR" # Only archive on clean commits if ! is_git_clean; then echo_warning " Skipping archive (uncommitted changes detected)" echo_warning " Commit your changes to create an archive snapshot" return 0 fi local git_id git_id=$(get_git_identifier) echo_success " Archive identifier: $git_id" # Archive compiled files store_file "$SCITEX_WRITER_COMPILED_PDF" "pdf" "$git_id" store_file "$SCITEX_WRITER_COMPILED_TEX" "tex" "$git_id" store_file "$SCITEX_WRITER_DIFF_PDF" "pdf" "$git_id" store_file "$SCITEX_WRITER_DIFF_TEX" "tex" "$git_id" echo_success " Files archived to: $SCITEX_WRITER_VERSIONS_DIR" } process_archive # EOF