File get-dependencies.sh of Package audiveris

#!/bin/bash
set -euo pipefail

# =========================
# Configurazione
# =========================
GRADLE_CACHE="$HOME/.gradle/caches/modules-2/files-2.1"
OUTPUT_DIR="./dependencies"
TMP_DIR="./.tmp-maven-download"
MAVEN_CENTRAL="https://repo1.maven.org/maven2"

# Pulizia
rm -rf "$OUTPUT_DIR" "$TMP_DIR"
mkdir -p "$OUTPUT_DIR" "$TMP_DIR"

echo "Trasformo la cache Gradle in repository Maven locale..."

# Copia artifact e pom nella struttura Maven
copy_artifacts() {
    local group="$1"
    local artifact="$2"
    local version="$3"
    local source_dir="$4"

    local dest_dir="$OUTPUT_DIR/${group//./\/}/$artifact/$version"
    mkdir -p "$dest_dir"

    # Ciclo tutte le cartelle hash
    for hash_dir in "$source_dir"/*; do
        # Ciclo tutti i file dentro la hash
        for f in "$hash_dir"/*; do
            if [[ "$f" =~ \.jar$ ]]; then
                # Copio il jar **con il nome originale**
                cp -n "$f" "$dest_dir/$(basename "$f")"
            elif [[ "$f" =~ \.pom$ ]]; then
                cp -n "$f" "$dest_dir/$artifact-$version.pom"
                download_parent "$f"
            fi
        done
    done
}

# Funzione ricorsiva per scaricare parent POM mancanti
download_parent() {
    local pom_file="$1"
    local parent_group=$(xmllint --xpath "string(//project/parent/groupId)" "$pom_file" 2>/dev/null || echo "")
    local parent_artifact=$(xmllint --xpath "string(//project/parent/artifactId)" "$pom_file" 2>/dev/null || echo "")
    local parent_version=$(xmllint --xpath "string(//project/parent/version)" "$pom_file" 2>/dev/null || echo "")

    if [[ -n "$parent_group" && -n "$parent_artifact" && -n "$parent_version" ]]; then
        # Percorso destinazione
        local dest_dir="$OUTPUT_DIR/${parent_group//./\/}/$parent_artifact/$parent_version"
        local dest_pom="$dest_dir/$parent_artifact-$parent_version.pom"

        if [[ ! -f "$dest_pom" ]]; then
            echo "Scarico parent POM: $parent_group:$parent_artifact:$parent_version"
            mkdir -p "$dest_dir"
            # Costruisci URL Maven Central
            url="$MAVEN_CENTRAL/${parent_group//./\/}/$parent_artifact/$parent_version/$parent_artifact-$parent_version.pom"
            curl -sSfL "$url" -o "$dest_pom" || echo "⚠️ Warning: parent POM $parent_group:$parent_artifact:$parent_version non trovato su Maven Central"
            # Ricorsione sul parent del parent
            download_parent "$dest_pom"
        fi
    fi
}

# Ciclo tutti gli artifact nella cache
find "$GRADLE_CACHE" -mindepth 3 -maxdepth 3 -type d | while read -r artifact_dir; do
    version=$(basename "$artifact_dir")
    artifact=$(basename "$(dirname "$artifact_dir")")
    group=$(basename "$(dirname "$(dirname "$artifact_dir")")")
    copy_artifacts "$group" "$artifact" "$version" "$artifact_dir"
done

echo "Tutti gli artifact e parent POM sono stati copiati in $OUTPUT_DIR"

# Creo tar.gz con la cartella dependencies
tar czf dependencies.tar.gz -C . dependencies
echo "Archivio dependencies.tar.gz creato con la cartella dependencies al suo interno."

#echo "✅ Repository Maven locale pronto per OBS e build offline"
openSUSE Build Service is sponsored by