7
7
# ## VARIABLES ###
8
8
# ################
9
9
10
- date_YYYYMMDDHHMMSS=$( date +%Y%m%d%H%M%S) # Get the current date in YYYYMMDD format
11
-
12
10
XDG_DATA_HOME=${XDG_DATA_HOME:- $HOME / .local/ share}
13
11
XDG_CONFIG_HOME=${XDG_CONFIG_HOME:- $HOME / .config}
14
12
13
+ date_YYYYMMDDHHMMSS=$( date +%Y%m%d%H%M%S) # Get the current date in YYYYMMDD format
14
+
15
+ froster_data_dir=${XDG_DATA_HOME} /froster
16
+ froster_all_data_backups=${XDG_DATA_HOME} /froster_backups
17
+ froster_data_backup_dir=${froster_all_data_backups} /froster_${date_YYYYMMDDHHMMSS} .bak
18
+
19
+ froster_config_dir=${XDG_CONFIG_HOME} /froster
20
+ froster_all_config_backups=${XDG_CONFIG_HOME} /froster_backups
21
+ froster_config_backup_dir=${froster_all_config_backups} /froster_${date_YYYYMMDDHHMMSS} .bak
22
+
15
23
# ####################
16
24
# ## ERROR HANDLER ###
17
25
# ####################
@@ -20,32 +28,22 @@ XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-$HOME/.config}
20
28
trap ' catch $? $BASH_COMMAND' EXIT
21
29
22
30
catch () {
23
- if [ " $1 " != " 0" ]; then
24
- # error handling goes here
25
31
26
- if [[ $( command -v pipx) ]]; then
27
- if pipx list | grep ' froster' > /dev/null 2>&1 ; then
28
- echo " Uninstalling froster..."
29
- pipx uninstall froster > /dev/null 2>&1
30
- echo " ...uninstalled"
31
- fi
32
- fi
32
+ if [ " $1 " != " 0" ]; then
33
+ echo -e " \nError: $2 : Installation failed!\n"
33
34
34
35
# Restore (if any) backed up froster config files
35
- if [[ -d ${XDG_CONFIG_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak ]]; then
36
- mv -f ${XDG_CONFIG_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak ${XDG_CONFIG_HOME} /froster > /dev/null 2>&1
36
+ if [[ -d ${froster_config_backup_dir} ]]; then
37
+ mv -f ${froster_config_backup_dir} ${froster_config_dir} > /dev/null 2>&1
37
38
fi
38
39
39
40
# Restore (if any) backed up froster data files
40
- if [[ -d ${XDG_DATA_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak ]]; then
41
- mv -f ${XDG_DATA_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak ${XDG_DATA_HOME} /froster > /dev/null 2>&1
41
+ if [[ -d ${froster_data_backup_dir} ]]; then
42
+ mv -f ${froster_data_backup_dir} ${froster_data_dir} > /dev/null 2>&1
42
43
fi
43
44
44
45
rm -rf ${pwalk_path} > /dev/null 2>&1
45
46
rm -rf rclone-current-linux-* .zip rclone-v* / > /dev/null 2>&1
46
-
47
- echo
48
- echo " Installation failed!"
49
47
fi
50
48
}
51
49
@@ -71,7 +69,6 @@ spinner() {
71
69
fi
72
70
}
73
71
74
-
75
72
# ################
76
73
# ## FUNCTIONS ###
77
74
# ################
@@ -213,79 +210,46 @@ check_dependencies() {
213
210
# Backup older installations (if any) but keep the froster-archive.json and config.ini files
214
211
backup_old_installation () {
215
212
216
- # Back up (if any) older froster data files
217
- if [[ -d ${XDG_DATA_HOME} /froster ]]; then
213
+ # Make sure we did not left any backup files from previous updates.
214
+ # Move all backups to the data or config backup directories
215
+ mkdir -p ${froster_all_data_backups}
216
+ mkdir -p ${froster_all_config_backups}
217
+ find ${XDG_DATA_HOME} -maxdepth 1 -type d -name " froster_*.bak" -print0 | xargs -0 -I {} mv {} $froster_all_data_backups
218
+ find ${XDG_CONFIG_HOME} -maxdepth 1 -type d -name " froster_*.bak" -print0 | xargs -0 -I {} mv {} $froster_all_config_backups
218
219
219
- backup=true
220
220
221
- echo
222
- echo " Backing up older froster installation..."
221
+ # Back up (if any) older froster data files
222
+ if [[ -d ${froster_data_dir} ]]; then
223
+
224
+ echo -e " \nBacking Froster data folder ..."
223
225
224
226
# Copy the froster directory to froster_YYYYMMDD.bak
225
- cp -rf ${XDG_DATA_HOME} /froster ${XDG_DATA_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak
227
+ cp -rf ${froster_data_dir} ${froster_data_backup_dir}
226
228
227
- echo " Data back up at ${XDG_DATA_HOME} /froster_${date_YYYYMMDDHHMMSS} .bak"
229
+ echo " source: ${froster_data_dir} "
230
+ echo " destination: ${froster_data_backup_dir} "
231
+
232
+ echo " ...data backed up"
228
233
fi
229
234
230
235
# Back up (if any) older froster configurations
231
- if [[ -d ${XDG_CONFIG_HOME} /froster ]]; then
236
+ if [[ -d ${froster_config_dir} ]]; then
232
237
233
- if [ " $backup " != " true" ]; then
234
- echo
235
- echo " Backing up older froster installation..."
236
- fi
238
+ echo -e " \nBacking Froster config folder ..."
237
239
238
- backup=true
240
+ echo " source: ${froster_config_dir} "
241
+ echo " destination: ${froster_config_backup_dir} "
239
242
240
243
# Move the froster config directory to froster.bak
241
- cp -rf ${XDG_CONFIG_HOME} /froster ${XDG_CONFIG_HOME} /froster_${date_YYYYMMDDHHMMSS} .bak
242
-
243
- echo " Config back up at ${XDG_CONFIG_HOME} /froster_${date_YYYYMMDDHHMMSS} .bak"
244
- fi
245
-
246
- if [ " $backup " = " true" ]; then
247
- echo " ...older froster installation backed up"
248
- fi
249
-
250
- # Check if froster is already installed, if so uninstall it
251
- if which froster > /dev/null 2>&1 ; then
252
- echo
253
- echo " Uninstalling existing froster installation..."
254
-
255
- if pipx list | grep froster > /dev/null 2>&1 ; then
256
- pipx uninstall froster > /dev/null 2>&1 &
257
- spinner $!
258
- fi
244
+ cp -rf ${froster_config_dir} ${froster_config_backup_dir}
259
245
260
- echo " ...froster uninstalled "
246
+ echo " ...config backed up "
261
247
fi
262
-
263
- # Keep the froster-archives.json file (if any)
264
- if [[ -f ${XDG_DATA_HOME} /froster_${date_YYYYMMDDHHMMSS} .bak/froster-archives.json ]]; then
265
- echo
266
- echo " Restoring Froster archives json data from backup..."
267
-
268
- # Create the froster directory if it does not exist
269
- mkdir -p ${XDG_DATA_HOME} /froster
270
-
271
- # Copy the froster-archives.json file to the data directory
272
- cp -f ${XDG_DATA_HOME} /froster_${date_YYYYMMDDHHMMSS} .bak/froster-archives.json ${XDG_DATA_HOME} /froster/froster-archives.json
273
-
274
- echo " ...restored"
275
- fi
276
-
277
- # Remove old files
278
- rm -rf ${XDG_DATA_HOME} /froster
279
- rm -rf ${XDG_CONFIG_HOME} /froster
280
- rm -f ${HOME} /.local/bin/froster
281
- rm -f ${HOME} /.local/bin/froster.py
282
- rm -f ${HOME} /.local/bin/s3-restore.py
283
248
}
284
249
285
250
install_pipx () {
286
251
287
- echo
288
- echo " Installing pipx..."
252
+ echo -e " \nInstalling pipx..."
289
253
290
254
# Check if pipx is installed
291
255
if [[ -z $( command -v pipx) ]]; then
@@ -306,67 +270,72 @@ install_pipx() {
306
270
else
307
271
echo " ...pipx already installed"
308
272
309
- echo
310
- echo " Upgrading pipx..."
273
+ echo -e " \nUpgrading pipx..."
311
274
pipx upgrade pipx > /dev/null 2>&1 &
312
275
spinner $!
313
276
echo " ...pipx upgraded"
314
277
315
- echo
316
- echo " Ensuring path for pipx..."
278
+ echo -e " \nEnsuring path for pipx..."
317
279
pipx ensurepath > /dev/null 2>&1
318
280
echo " ...path ensured"
319
281
fi
320
282
321
283
# Check if PIPX_BIN_DIR is set and not empty, otherwise default to ~/.local/bin
322
284
PIPX_BIN_DIR=" ${PIPX_BIN_DIR:- $HOME / .local/ bin} "
323
- echo
324
- echo " Adding $PIPX_BIN_DIR to PATH for this installation session"
285
+ echo -e " \nAdding $PIPX_BIN_DIR to PATH for this installation session"
325
286
export PATH=" $PATH :$PIPX_BIN_DIR "
326
287
}
327
288
328
289
install_froster () {
329
290
330
- echo
331
- echo " Installing latest version of froster..."
291
+ echo -e " \nRemoving old froster files..."
292
+ rm -rf ${froster_data_dir}
293
+ rm -rf ${froster_config_dir}
294
+ rm -f ${HOME} /.local/bin/froster
295
+ rm -f ${HOME} /.local/bin/froster.py
296
+ rm -f ${HOME} /.local/bin/s3-restore.py
297
+ echo " ...old froster files removed"
332
298
333
299
if [ " $LOCAL_INSTALL " = " true" ]; then
334
- echo " Installing from the current directory in --editable mode"
300
+ echo -e " \nInstalling Froster from the current directory in --editable mode... "
335
301
pip install -e . > /dev/null 2>&1 &
336
302
spinner $!
303
+ echo " ...Froster installed"
337
304
else
338
- echo " Installing from PyPi package repository"
305
+ if pipx list | grep froster > /dev/null 2>&1 ; then
306
+ echo -e " \nUninstalling old Froster..."
307
+ pipx uninstall froster > /dev/null 2>&1
308
+ echo " ...old Froster uninstalled"
309
+ fi
310
+
311
+ echo -e " \nInstalling Froster from PyPi package repository"
339
312
pipx install froster > /dev/null 2>&1 &
340
313
spinner $!
314
+ echo " ...Froster installed"
341
315
fi
342
316
343
- echo " Installation path: $( which froster) "
344
-
345
317
# Keep the config.ini file (if any)
346
- if [[ -f ${XDG_CONFIG_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak /config.ini ]]; then
318
+ if [[ -f ${froster_config_backup_dir} /config.ini ]]; then
347
319
# Create the froster directory if it does not exist
348
- mkdir -p ${XDG_CONFIG_HOME} /froster
320
+ mkdir -p ${froster_config_dir}
349
321
350
322
# Copy the config file to the data directory
351
- cp -f ${XDG_CONFIG_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak/ config.ini ${XDG_CONFIG_HOME} /froster/config.ini
323
+ cp -f ${froster_config_backup_dir} / config.ini ${froster_config_dir}
352
324
fi
353
325
354
326
# Keep the froster-archives.json file (if any)
355
- if [[ -f ${XDG_CONFIG_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak /froster-archives.json ]]; then
327
+ if [[ -f ${froster_data_backup_dir} /froster-archives.json ]]; then
356
328
# Create the froster directory if it does not exist
357
- mkdir -p ${XDG_DATA_HOME} /froster
329
+ mkdir -p ${froster_data_dir}
358
330
359
331
# Copy the froster-archives.json file to the data directory
360
- cp -f ${XDG_CONFIG_HOME} /froster_ ${date_YYYYMMDDHHMMSS} .bak/ froster-archives.json ${XDG_DATA_HOME} /froster/froster-archives.json
332
+ cp -f ${froster_data_backup_dir} / froster-archives.json ${froster_data_dir}
361
333
fi
362
-
363
- echo " ...froster installed"
364
334
}
365
335
366
336
install_pwalk () {
367
337
368
- echo
369
- echo " Installing third-party dependency: pwalk... "
338
+ echo -e " \nInstalling third-party dependency: pwalk... "
370
339
371
340
# Variables of pwalk third-party tool froster is using
372
341
pwalk_commit=1df438e9345487b9c51d1eea3c93611e9198f173 # update this commit when new pwalk version released
@@ -404,8 +373,7 @@ install_pwalk() {
404
373
# Install rclone
405
374
install_rclone () {
406
375
407
- echo
408
- echo " Installing third-party dependency: rclone... "
376
+ echo -e " \nInstalling third-party dependency: rclone... "
409
377
410
378
# Check the architecture of the system
411
379
arch=$( uname -m)
@@ -479,12 +447,11 @@ install_rclone
479
447
version=$( froster -v | awk ' {print $2}' )
480
448
481
449
# Print success message
482
- echo
483
- echo " froster $version has been successfully installed!"
484
- echo
450
+ echo -e " \n\nSUCCESS!"
451
+
452
+ echo -e " \nFroster version: $version "
453
+ echo -e " Installation path: $( which froster) "
485
454
486
455
# Print post-installation instructions
487
- echo
488
- echo " You will need to open a new terminal or refresh your current terminal session by running command:"
489
- echo " source ~/.bashrc"
490
- echo
456
+ echo -e " \n\nYou will need to open a new terminal or refresh your current terminal session by running command:"
457
+ echo -e " source ~/.bashrc\n"
0 commit comments