File: apply-successful-rewrites.sh

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (48 lines) | stat: -rwxr-xr-x 1,300 bytes parent folder | download | duplicates (5)
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
#!/bin/bash

# Copyright 2025 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# An example script to apply successful Spanifier rewrites.
#
# Prerequisites:
# --------------
# Populate ~/scratch/patch_{}.{out,diff,pass,fail} files by running:
# //tools/clang/scripts/evaluate_patches.py
# with patch_limit = 9999

echo "" > output.txt
for f in ~/scratch/patch_*.pass
do
    # Extract index from patch_{index}.pass
    index=$(echo $f | sed 's/.*patch_\(.*\).pass/\1/')
    echo "Processing patch_$index"

    # Aggregate the replacements.
    cat ${f/.pass/.txt} >> output.txt

    # A new line to deal with the missing '\n' at the end of the file.
    echo "" >> output.txt
done

# The output contains lines with the format:
# r:::{0}:::{1}:::{2}:::{3}
# We need to sort numerically by {1}
# {0} is the file path
# {1} is the file offset
# {2} is the replacement length
# {3} is the replacement text

# We must sort by {1} numerically in descending order to avoid conflict when
# applying replacements.

# Use perl
perl -ane '
    $line = $_;
    @fields = split(/:::/, $line);
    print $fields[1] . " " . $line;
' output.txt \
  | sort -rn \
  | cut -d ' ' -f 2- \
  | ./tools/clang/scripts/apply_edits.py -p ./out/linux