summaryrefslogtreecommitdiffstats
path: root/modules/ports/ports
blob: ab443535cd20616aa43d7d13c1203dd236ab8d18 (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#!/bin/bash
#
#  ports
# 
#  Copyright (c) 2002-2004 Per Liden
# 
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 
#  USA.
#

VERSION="1.9-rbjbbot"
PORTS_DIR="./"

check_ports_dir() {
	if [ ! -d "$PORTS_DIR" ]; then
		echo "$COMMAND: directory '$PORTS_DIR' not found"
		exit 1
	fi
}

update_ports() {
	#if [ "`id -u`" != "0" ]; then
		#echo "$COMMAND: only root can update ports"
		#exit 1
	#fi

	shopt -s nullglob
	export PORTS_DIR

	if [ "$OPT_COLLECTIONS" ]; then
		# Update selected collections
		for collection in $OPT_COLLECTIONS; do
			collection_exists=no
			for file in ./$collection.*; do
				collection_exists=yes
			done
			if [ "$collection_exists" = "yes" ]; then
				for driver in ./drivers/*; do
					if [ -x $driver ]; then
						suffix=`basename $driver`
						file=./$collection.$suffix
						if [ -f $file ]; then
							$driver $file
						fi
					fi
				done
			else
				echo "$COMMAND: collection '$collection' not found"
			fi
		done
	else
		# Update all collections
		for driver in ./drivers/*; do
			if [ -x $driver ]; then
				suffix=`basename $driver`
				for file in ./*.$suffix; do
					$driver $file
				done
			fi
		done
		
		if [ ! "$driver" ]; then
			echo "$COMMAND: no driver(s) installed"
		fi
	fi
}

list_ports() {
	cd $PORTS_DIR && find . -name Pkgfile -follow -printf "%h\n" | sed 's|^./||g' | sort
}

list_differences_at_exit() {
	rm $installed_list $ports_list $output $output_sorted &> /dev/null
}

list_differences() {
	installed_list=`mktemp` || exit 1
	ports_list=`mktemp` || exit 1
	output=`mktemp` || exit 1
	output_sorted=`mktemp` || exit 1
	found_diff="no"
	
	trap list_differences_at_exit EXIT
	
	pkginfo -i >> $installed_list
	ports -l >> $ports_list
	
	for package in `cat $installed_list | gawk '{ print $1 }'`; do
		installed_version=`cat $installed_list | grep "^$package " | gawk '{ print $2 }'`
		port_list=`cat $ports_list | grep "/$package\$"`
		for port in $port_list; do
			port_version=`cd $PORTS_DIR/$port; . Pkgfile; echo $version-$release`
			if [ "$installed_version" != "$port_version" ]; then
				echo "${port%/*} $package $port_version $installed_version" >> $output
				found_diff="yes"
			fi
		done
	done
	
	if [ "$found_diff" = "yes" ]; then
		echo "Collection Name Port Installed" >> $output_sorted
		sort $output >> $output_sorted
		column -t $output_sorted
	else
		echo "No differences found"
	fi
}

print_try_help() {
	echo "Try '$COMMAND --help' for more information."
}

print_help() {
	echo "usage: $COMMAND [options] [collection ...]"
	echo "options:"
	echo "   -u, --update    update ports"
	echo "   -l, --list      list ports"
	echo "   -d, --diff      list version differences"
	echo "   -v, --version   print version and exit"
	echo "   -h, --help      print help and exit"
}

parse_options() {
	OPT_MODE=""
	OPT_COLLECTIONS=""
	
	for OPT in "$@"; do
		case $OPT in
			-u|--update)
				OPT_MODE="update" ;;
			-l|--list)
				OPT_MODE="list" ;;
			-d|--diff)
				OPT_MODE="diff" ;;
			-v|--version)
				echo "$COMMAND $VERSION"
				exit 0 ;;
			-h|--help)
				print_help
				exit 0 ;;
			-*)
				echo "$COMMAND: invalid option $OPT"
				print_try_help
				exit 1 ;;
			*)
				OPT_COLLECTIONS="$OPT_COLLECTIONS $OPT" ;;
        esac
    done
}

main() {
	parse_options "$@"

	if [ "$OPT_MODE" = "update" ]; then
		check_ports_dir
		update_ports
	elif [ "$OPT_MODE" = "list" ]; then
		check_ports_dir
		list_ports
	elif [ "$OPT_MODE" = "diff" ]; then
		check_ports_dir
		list_differences
	else
		echo "$COMMAND: option missing"
		print_try_help
		exit 1
	fi

	exit 0
}

COMMAND=`basename $0`

main "$@"

# End of file