Просмотр исходного кода

Maintain an error log rather than stop for packages

There's a *lot* of packages. It's better to maintain
a log of failures rather than having to restart all
the time.
Loïc Hoguin 10 лет назад
Родитель
Сommit
947eac7733
1 измененных файлов с 39 добавлено и 19 удалено
  1. 39 19
      test/Makefile

+ 39 - 19
test/Makefile

@@ -48,7 +48,7 @@ all: clean app ct eunit tests-cover docs pkgs
 	$i '+---------------------+'
 
 clean:
-	$t rm -rf app1 $(ERLANG_MK_TMP)
+	$t rm -rf app1 pkgs.log $(ERLANG_MK_TMP)
 
 app: app1
 	$i "app: Testing the 'app' target."
@@ -233,29 +233,49 @@ pkg-$(1): pkg-$(1)-clean pkg-$(1)-app1
 		"include erlang.mk" \
 		> app1/Makefile
 	cp ../packages.v2.tsv app1/.erlang.mk.packages.v2
-	$t $(MAKE) -C app1
-	$t $(MAKE) -C app1
-	if [ `find -type f -name erl_crash.dump` ]; then exit 33; fi
-	erl +A0 -noinput -boot start_clean -pa app1/deps/*/ebin -eval " \
-		Apps = [list_to_atom(App) || \"app1/deps/\" ++ App <- filelib:wildcard(\"app1/deps/*\")], \
-		[begin \
-			io:format(\"Loading application ~p~n\", [App]), \
-			case application:load(App) of \
-				{error, _} -> ok; \
-				ok -> \
-					{ok, Mods} = application:get_key(App, modules), \
-					[try io:format(\"  Loading module ~p~n\", [Mod]), \
-						{module, Mod} = code:load_file(Mod) \
-					catch C:R -> timer:sleep(500), erlang:C(R) \
-					end || Mod <- Mods] \
-			end \
-		end || App <- Apps], \
-		halt()."
+	$t \
+	$(MAKE) -C app1; if [ $$$$? -ne 0 ]; then \
+		echo "$(1): make error" >> pkgs.log; \
+	else \
+		$(MAKE) -C app1; if [ $$$$? -ne 0 ]; then \
+			echo "$(1): re-make error" >> pkgs.log; \
+		else \
+			find -type f -name erl_crash.dump; if [ $$$$? -ne 0 ]; then \
+				echo "$(1): erl_crash.dump found" >> pkgs.log; \
+			else \
+				erl +A0 -noinput -boot start_clean -pa app1/deps/*/ebin -eval " \
+						Apps = [list_to_atom(App) || \"app1/deps/\" ++ App \
+							<- filelib:wildcard(\"app1/deps/*\")], \
+						[begin \
+							io:format(\"Loading application ~p~n\", [App]), \
+							case application:load(App) of \
+								{error, _} -> ok; \
+								ok -> \
+									{ok, Mods} = application:get_key(App, modules), \
+									[try io:format(\"  Loading module ~p~n\", [Mod]), \
+										{module, Mod} = code:load_file(Mod) \
+									catch C:R -> timer:sleep(500), erlang:C(R) \
+									end || Mod <- Mods] \
+							end \
+						end || App <- Apps], \
+						halt()."; if [ $$$$? -ne 0 ]; then \
+					echo "$(1): load error" >> pkgs.log; \
+				fi \
+			fi \
+		fi \
+	fi
 endef
 
 $(foreach pkg,$(shell awk '{print $$1}' ../packages.v2.tsv),$(eval $(call pkg_test_target,$(pkg))))
 
 pkgs: $(foreach pkg,$(shell awk '{print $$1}' ../packages.v2.tsv),pkg-$(pkg))
+	@if [ -f pkgs.log ]; then \
+		echo "+-------------------------------+"; \
+		echo "| ERRORS WHILE TESTING PACKAGES |"; \
+		echo "+-------------------------------+"; \
+		cat pkgs.log; \
+		exit 33; \
+	fi
 
 # Test application used for testing.
 app1: