summaryrefslogtreecommitdiff
path: root/multibuild
blob: acf5330488bcdc7871e64530f50cee722e726b49 (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
#!/bin/sh

b="$(echo -n -e '\033[1m')"
B="$(echo -n -e '\033[22m')"
r="$(echo -n -e '\033[31m')"
g="$(echo -n -e '\033[32m')"
c="$(echo -n -e '\033[33m')"
e="$(echo -n -e '\033[0m')"

ignore() { }
MULTI_CONTINUE=false
[ -r .cleanbuildrc ] && . ./.cleanbuildrc

[ -d mbuild ] || mkdir mbuild

end_pkg()
{
	result=fail
	[ $ret -eq 0 ] && result=ok
	mv mbuild/start.$package mbuild/$result.$package
}

get_pkg()
{
	list="$1"
	package=""
	[ -r $list ] || return
	while read pkg info; do
		if [ ! -r mbuild/ok.$pkg ] && [ ! -r mbuild/fail.$pkg ] \
				&& [ ! -r mbuild/start.$pkg ]; then
			package="$pkg"
			touch mbuild/start.$package
			break
		fi
	done < $list
}


next_pkg()
{
	get_pkg blist

	[ -n "$package" ] && return

	get_pkg blist2

	if [ -z "$package" ]; then
		echo "${c}Nothing to build${e}"
		exit
	fi
}

./clean "$@"
package=
next_pkg
build="cleanbuild"
while true; do
	time ./$build "$@" $package
	ret=$?

	OLDPWD="$PWD"
	cd $HOME/rpm/packages/$package
	DIFF="$(cvs -z3 diff -u $package.spec)"
	echo "$DIFF" | colordiff
	cd $OLDPWD

	if [ $ret -eq 0 ]; then
		COLOR="$g"
	else
		COLOR="$r"
	fi
	echo "$COLOR$package build finished with exit status $ret$e"

	if $MULTI_CONTINUE && [ $ret -eq 0 -a -z "$DIFF" ]; then
		echo "Nothing changed: continuing\n"
		./clean "$@"
		end_pkg
		exec $0 "$@"
		exit
	fi

	MULTI_CONTINUE=false

	while true; do
		echo
		echo -n "${c}clean ${b}r${B}ebuild," "re${b}b${B}uild," \
			"${b}i${B}nstall," "${b}a${B}ddbr," \
			"${b}v${B}im," "${b}c${B}i," \
			"${b}l${B}og," "${b}N${B}ext ?${e} "

		read ans
		case "x$ans" in
			x[rR])
				build="cleanbuild"
				;;
			x[bB])
				build="build"
				;;
			x[iI])
				echo -n "${c}install>${e} "
				read pkg
				./install "$@" $pkg
				echo "pkg installed with exit status $?"
				continue
				;;
			x[aA])
				echo -n "${c}br>${e} "
				read pkg
				./install "$@" $pkg
				echo "pkg installed with exit status $?"
				[ $? == 0 ] && ./addbr $package $pkg "requested"
				continue
				;;
			x[vV])
				vim $HOME/rpm/packages/$package/$package.spec
				continue
				;;
			x[cC])
				cd $HOME/rpm/packages/
				./ci $package
				cd -
				continue
				;;
			x[lL])
				vim buildlogs/$package
				continue
				;;
			xN)
				./clean "$@"
				end_pkg
				exec $0 "$@"
				exit
				;;
			xn)
				echo "upper case N required"
				continue
				;;
			x[qQ])
				./clean "$@"
				end_pkg
				exit
				;;
			*)
				continue
				;;
		esac
		break
	done
done

# vim: ts=4:sw=4