-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathminget.sh
102 lines (89 loc) · 3.12 KB
/
minget.sh
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
#!/bin/bash
# MinGW-Get Packages Helper 2014.8.8
# Copyright (c) 2012, 2013 Renato Silva
# GNU GPLv2 licensed
if [[ "$1" = "-h" || "$1" = "--help" ]]; then
echo "Usage: $(basename "$0") [pattern [--full]]"
echo " $(basename "$0") [pattern [index [action]]]"
echo "Without arguments, will output the same as mingw-get list."
exit
fi
get_component_version() {
component_version=$(mingw-get show "$1-$2" | grep '^Installed Version' | awk -F' ' '{print $2}')
}
# List packages
if [[ -z "$1" ]]; then
mingw-get list
exit
fi
# Extra argument
if [[ -n "$4" ]] || [[ -n "$3" && "$2" = "--full" ]]; then
[[ -n "$4" ]] && shift
echo "Extra argument: $3"
exit
fi
# Full search
if [[ "$2" = "--full" ]]; then
mingw-get list | grep --color -C4 "$1"
exit
fi
# Invalid index
if [[ -n "$2" && ! "$2" =~ "^[0-9]+$" ]]; then
echo "Invalid index: $2"
exit
fi
# Name search
packages=($(mingw-get list | grep ^Package | grep -i "$1" | sed -E s/"Package: (\S*).*"/"\\1"/))
if [[ -z "$2" ]]; then
count="0"
for package in "${packages[@]}"; do
count=$((count + 1))
printf '%#3d %s\n' "$count" "$package" | grep -i --color "$1"
done
exit
fi
# Action by index
action="$3"
[[ -z "$action" ]] && action="this:installed"
count="0"
for package in "${packages[@]}"; do
count=$((count + 1))
if [[ "$count" == "$2" ]]; then
# Execute specified action
if [[ "$action" != "show" && "$action" != "this:installed" ]]; then
mingw-get "$action" "$package"
exit
fi
package_info=$(mingw-get show "$package")
components=$(echo "$package_info" | grep '^Components' | sed s/"Components: "/""/)
IFS=", " read -a components <<< "$components"
# Show whether the package is installed
if [[ "$action" = "this:installed" ]]; then
installed=()
available=()
for component in "${components[@]}"; do
get_component_version "$package" "$component"
[[ "$component_version" != "none" ]] && installed+=("$component") || available+=("$component")
done
installed=$(echo "${installed[@]}" | sed "s/ /, /g")
available=$(echo "${available[@]}" | sed "s/ /, /g")
[[ -z "$installed" ]] && installed="none"
[[ -z "$available" ]] && available="none"
echo "Package: $package"
echo "Installed components: $installed"
echo "Available components: $available"
exit
fi
# Show package and component information
components_info=""
for component in "${components[@]}"; do
get_component_version "$package" "$component"
[[ "$component_version" != "none" ]] && component_info="installed: $component_version" || component_info="not installed"
component=$(printf "%-4s" "$component")
components_info="$components_info\n $component is $component_info"
done
echo "$package_info" | sed -E s/"^(Components:.*)$"/"\\1$components_info"/
exit
fi
done
echo "No package found at search index $2"