Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a268d59e authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Report reverse dependencies for dangling rules."

parents 5df87386 946fb672
Loading
Loading
Loading
Loading
+28 −6
Original line number Diff line number Diff line
@@ -50,10 +50,10 @@ func testForDanglingRules(ctx Context, config Config) {
	// Get a list of leaf nodes in the dependency graph from ninja
	executable := config.PrebuiltBuildTool("ninja")

	args := []string{}
	args = append(args, config.NinjaArgs()...)
	args = append(args, "-f", config.CombinedNinjaFile())
	args = append(args, "-t", "targets", "rule")
	common_args := []string{}
	common_args = append(common_args, config.NinjaArgs()...)
	common_args = append(common_args, "-f", config.CombinedNinjaFile())
	args := append(common_args, "-t", "targets", "rule")

	cmd := Command(ctx, config, "ninja", executable, args...)
	stdout, err := cmd.StdoutPipe()
@@ -96,9 +96,31 @@ func testForDanglingRules(ctx Context, config Config) {
		sb := &strings.Builder{}
		title := "Dependencies in out found with no rule to create them:"
		fmt.Fprintln(sb, title)
		for _, dep := range danglingRulesList {
			fmt.Fprintln(sb, "  ", dep)

		report_lines := 1
		for i, dep := range danglingRulesList {
			if report_lines > 20 {
				fmt.Fprintf(sb, "  ... and %d more\n", len(danglingRulesList)-i)
				break
			}
			// It's helpful to see the reverse dependencies. ninja -t query is the
			// best tool we got for that. Its output starts with the dependency
			// itself.
			query_cmd := Command(ctx, config, "ninja", executable,
				append(common_args, "-t", "query", dep)...)
			query_stdout, err := query_cmd.StdoutPipe()
			if err != nil {
				ctx.Fatal(err)
			}
			query_cmd.StartOrFatal()
			scanner := bufio.NewScanner(query_stdout)
			for scanner.Scan() {
				report_lines++
				fmt.Fprintln(sb, " ", scanner.Text())
			}
			query_cmd.WaitOrFatal()
		}

		ts.FinishAction(status.ActionResult{
			Action: action,
			Error:  fmt.Errorf(title),