Browse Source

Only mirror apps which are installed

Potentially the number of installable apps could get large so mirroring them all could become very slow, especially on low power hardware
Bob Mottram 8 years ago
parent
commit
2b1f8a88bc
1 changed files with 51 additions and 15 deletions
  1. 51
    15
      src/freedombone-mirrors

+ 51
- 15
src/freedombone-mirrors View File

40
 
40
 
41
 # if this is blank then just use the default repos
41
 # if this is blank then just use the default repos
42
 FRIENDS_MIRRORS_SERVER=
42
 FRIENDS_MIRRORS_SERVER=
43
-REPOS=
43
+UTILS_REPOS=
44
+INSTALLED_APPS_REPOS=
44
 MY_MIRRORS_PASSWORD=
45
 MY_MIRRORS_PASSWORD=
45
 FRIENDS_MIRRORS_PASSWORD=
46
 FRIENDS_MIRRORS_PASSWORD=
46
 NEW_MIRRORS='no'
47
 NEW_MIRRORS='no'
51
     MAIN_COMMAND=/usr/bin/${PROJECT_NAME}
52
     MAIN_COMMAND=/usr/bin/${PROJECT_NAME}
52
 fi
53
 fi
53
 
54
 
54
-REPOS=($(cat ${MAIN_COMMAND} /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* /usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* | grep "_REPO=\"" | grep -v "(cat " | uniq -u | sed 's|${PROJECT_NAME}|'"${PROJECT_NAME}"'|g'))
55
+# local repos for utils
56
+UTILS_REPOS=($(cat ${MAIN_COMMAND} /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* /usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* | grep "_REPO=\"" | grep -v "(cat " | uniq -u | sed 's|${PROJECT_NAME}|'"${PROJECT_NAME}"'|g'))
55
 
57
 
56
 UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*
58
 UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*
57
 for f in $UTILS_FILES
59
 for f in $UTILS_FILES
58
 do
60
 do
59
-  source $f
61
+    source $f
60
 done
62
 done
61
 
63
 
62
 # obtain the mirrors password if it exists
64
 # obtain the mirrors password if it exists
116
     fi
118
     fi
117
 }
119
 }
118
 
120
 
119
-function update_repos_from_friend {
120
-    if [ ! $FRIENDS_MIRRORS_SERVER ]; then
121
-       return
122
-    fi
123
-    if [ ${#FRIENDS_MIRRORS_SERVER} -lt 2 ]; then
124
-        return
125
-    fi
121
+function update_installed_apps_repos {
122
+    INSTALLED_APPS_REPOS=()
123
+    FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*
126
 
124
 
125
+    function_check app_is_installed
126
+
127
+    # for all the app scripts
128
+    for filename in $FILES
129
+    do
130
+        app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
131
+        if [[ "$(app_is_installed ${app_name})" == "1" ]]; then
132
+            APP_REPOS=($(cat ${MAIN_COMMAND} $filename | grep "_REPO=\"" | grep -v "(cat " | uniq -u | sed 's|${PROJECT_NAME}|'"${PROJECT_NAME}"'|g'))
133
+            for line in "${APP_REPOS[@]}"
134
+            do
135
+                INSTALLED_APPS_REPOS+=("${line}")
136
+            done
137
+        fi
138
+    done
139
+}
140
+
141
+function update_repos_from_friend_base {
142
+    syncrepos=${1}
127
     new_repos=()
143
     new_repos=()
128
-    for line in "${REPOS[@]}"
144
+    for line in $syncrepos
129
     do
145
     do
130
         repo_name=$(echo "$line" | awk -F '=' '{print $1}')
146
         repo_name=$(echo "$line" | awk -F '=' '{print $1}')
131
         mirrors_name=$(echo "$repo_name" | sed "s|_REPO||g" | awk '{print tolower($0)}')
147
         mirrors_name=$(echo "$repo_name" | sed "s|_REPO||g" | awk '{print tolower($0)}')
132
-        #repo_url=$(echo "$line" | awk -F '=' '{print $2}'  | awk -F '"' '{print $2}')
133
         friends_repo_url="ssh://mirrors@${FRIENDS_MIRRORS_SERVER}:${FRIENDS_MIRRORS_SSH_PORT}/home/mirrors/${mirrors_name}"
148
         friends_repo_url="ssh://mirrors@${FRIENDS_MIRRORS_SERVER}:${FRIENDS_MIRRORS_SSH_PORT}/home/mirrors/${mirrors_name}"
134
         new_line="${repo_name}=\"${friends_repo_url}\""
149
         new_line="${repo_name}=\"${friends_repo_url}\""
135
         new_repos+=($new_line)
150
         new_repos+=($new_line)
136
     done
151
     done
137
-    REPOS=("${new_repos[@]}")
138
 }
152
 }
139
 
153
 
140
-function sync_mirrors_repos {
141
-    for line in "${REPOS[@]}"
154
+function update_repos_from_friend {
155
+    if [ ! $FRIENDS_MIRRORS_SERVER ]; then
156
+       return
157
+    fi
158
+    if [ ${#FRIENDS_MIRRORS_SERVER} -lt 2 ]; then
159
+        return
160
+    fi
161
+
162
+    update_repos_from_friend_base "${UTILS_REPOS[@]}"
163
+    UTILS_REPOS=("${new_repos[@]}")
164
+
165
+    update_repos_from_friend_base "${INSTALLED_APPS_REPOS[@]}"
166
+    INSTALLED_APPS_REPOS=("${new_repos[@]}")
167
+}
168
+
169
+function sync_mirrors_base {
170
+    syncrepos=${1}
171
+    for line in $syncrepos
142
     do
172
     do
143
         repo_name=$(echo "$line" | awk -F '=' '{print $1}')
173
         repo_name=$(echo "$line" | awk -F '=' '{print $1}')
144
         repo_url=$(echo "$line" | awk -F '=' '{print $2}'  | awk -F '"' '{print $2}')
174
         repo_url=$(echo "$line" | awk -F '=' '{print $2}'  | awk -F '"' '{print $2}')
172
     chown -R mirrors:mirrors /home/mirrors
202
     chown -R mirrors:mirrors /home/mirrors
173
 }
203
 }
174
 
204
 
205
+function sync_mirrors_repos {
206
+    sync_mirrors_base "${UTILS_REPOS[@]}"
207
+    sync_mirrors_base "${INSTALLED_APPS_REPOS[@]}"
208
+}
209
+
175
 while [[ $# > 1 ]]
210
 while [[ $# > 1 ]]
176
 do
211
 do
177
 key="$1"
212
 key="$1"
212
 
247
 
213
 create_mirrors_user
248
 create_mirrors_user
214
 enable_mirrors_via_onion
249
 enable_mirrors_via_onion
250
+update_installed_apps_repos
215
 update_repos_from_friend
251
 update_repos_from_friend
216
 sync_mirrors_repos
252
 sync_mirrors_repos
217
 
253