summaryrefslogtreecommitdiff
path: root/auto/update.sh
blob: 312d128586c30c3930f3c55991a1e456af9d9d1b (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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/sh

. /usr/lib/colors.sh
. /usr/lib/glyphs.sh

# increment a version string
#
#   point - decimal point to update from
#   version - string of the version (ie 1.4.7)
#
increment_ver () {
    point=$1
    version=$2

    IFS='.'; set -- $version
    i=$# out=""

    [ "$point" -gt "$#" ] && {
        IFS='.'; printf "%s\n" "$version"
        return
    }

    while [ "$#" -gt "0" ]; do 
        p=$1

        [ "$#" -eq "$point" ] && p=$((p+1))
        [ "$#" -lt "$point" ] && p=0

        out="$out$p."
        shift
    done

    IFS='.'; set -- $out
    printf "%s\n" "${*%${!#}}"
    IFS=' '
}

get_source () {
    local name ver
    name=$1
    ver=$2

    cp repo/$name/$name.xibuild /tmp/xibuild
    sed "s/PKG_VER=.*/PKG_VER=$ver/" repo/$name/$name.xibuild > /tmp/xibuild
    . /tmp/xibuild
    echo "$SOURCE"
}

get_type () {
    case "$(get_source $1)" in 
        git://*|*.git)
            echo "git"
            ;;
        "")
            echo "none"
            ;;
        *)
            echo "archive"
            ;;
    esac
}

check_exists () {
    local code 
    [ -n "$1" ] && {
        code=$(curl -sSL -I -o /dev/null -w "%{http_code}" $1)
        [ "$code" = "200" ]
    } 
}

cur_ver () {
    local name
    name=$1
    . repo/$name/$name.xibuild 
    echo "$PKG_VER"
}

new_ver () {
    local name exists point new_ver ver url
    name=$1

    ver=$(cur_ver $name)
    point=1
    while true; do
        new_ver=$(increment_ver $point $ver)
        url=$(get_source $name $new_ver)
        
        check_exists $url && {
            point=1

            [ "$new_ver" = "$ver" ] && {
                echo "$ver"
                return
            }

            ver=$new_ver
        } || {
            point=$((point+1))
        }


        # check new_ver is real
        # if is real ; repeat again with same point
        # if not, increment point and then check
    done
}

for pkg in $(ls repo); do 
    printf "${LIGHT_BLUE}%s " "$pkg"
    case "$(get_type $pkg)" in
        "git"|"none")
            printf "${LIGHT_WHITE}skipped"
            ;;
        *)
        cur="$(cur_ver $pkg)"
        new="$(new_ver $pkg)"

        [ "$cur" = "$new" ] && 
            printf "${LIGHT_WHITE}%s ${CHECKMARK}" "$cur" || 
            printf "${GREEN}%s > %s" "$cur" "$new"
    esac
    printf "\n"
done