aboutsummaryrefslogtreecommitdiff
path: root/cgit-backup.sh
blob: 276dce57ccbf624f539fb0241379978ba02cb68b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

cgit="https://cgit.heqnx.com"

mkdir -p repos

repos=$(curl -sSL "${cgit}" | grep -o "<a href='/[^']*/'>" | sed -E "s/^<a href='([^']*)'>/\1/" | sort -u)

while IFS= read -r repo_path; do
    repo_name=$(basename "${repo_path}")
    repo_url="${cgit}${repo_path}"
    repo_dir="repos/${repo_name}"

    printf "%s\n" "[inf] processing ${repo_url}"

    if test -d "${repo_dir}"; then
        if test -d "${repo_dir}/.git.bak"; then
            printf "%s\n" "[inf] restoring .git from .git.bak for ${repo_name}"
            mv "${repo_dir}/.git.bak" "${repo_dir}/.git"
        fi
        printf "%s\n" "[inf] fetching updates for ${repo_name}"
        git -C "${repo_dir}" fetch origin
        git -C "${repo_dir}" reset --hard origin/HEAD
    else
        printf "%s\n" "[inf] cloning ${repo_name}"
        git -C repos clone "${repo_url}"
    fi

    if test -d "${repo_dir}/.git"; then
        printf "%s\n" "[inf] moving .git to .git.bak for ${repo_name}"
        mv "${repo_dir}/.git" "${repo_dir}/.git.bak"
    fi

done <<< "${repos}"