Compare commits
1 Commits
master
...
proto/fix-
Author | SHA1 | Date |
---|---|---|
Adrien Vergé | 5cad95ba4b | 9 years ago |
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euf
|
||||||
|
|
||||||
|
DIR=$(dirname "$(readlink -f $0)")
|
||||||
|
|
||||||
|
fix_one_problem_in_file() {
|
||||||
|
local filename=$1
|
||||||
|
local error
|
||||||
|
error=$(yamllint -f parsable "$filename" | grep 'wrong indentation: expected' \
|
||||||
|
| head -n 1)
|
||||||
|
if [ -z "$error" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
local line=$(echo $error | cut -d: -f2)
|
||||||
|
local expected=$(echo $error | cut -d: -f5 | sed 's/.* expected //;s/ but found.*//')
|
||||||
|
local found=$(echo $error | cut -d: -f5 | sed 's/.*but found //;s/(inde.*//')
|
||||||
|
"$DIR/yaml-remove-indentation" "$filename" $line $expected $found
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
reformat_yaml() {
|
||||||
|
local in=$1
|
||||||
|
local out=$2
|
||||||
|
python -c 'import sys, yaml; yaml.dump(yaml.load(sys.stdin), sys.stdout)' <"$in" >"$out"
|
||||||
|
}
|
||||||
|
|
||||||
|
fix_one_file() {
|
||||||
|
local filename=$1
|
||||||
|
local backup=$(mktemp originalXXXXX)
|
||||||
|
cp "$filename" "$backup"
|
||||||
|
echo "FIXING $file"
|
||||||
|
while fix_one_problem_in_file "$filename"; do continue; done
|
||||||
|
echo "CHECKING $file"
|
||||||
|
local tmp_old=$(mktemp oldXXXXX)
|
||||||
|
local tmp_new=$(mktemp newXXXXX)
|
||||||
|
reformat_yaml "$backup" "$tmp_old"
|
||||||
|
reformat_yaml "$filename" "$tmp_new"
|
||||||
|
if ! diff -q "$tmp_old" "$tmp_new" &>/dev/null; then
|
||||||
|
echo "error: after reformating, the file contents is detected different."
|
||||||
|
echo "diff $backup $filename"
|
||||||
|
echo "diff $tmp_old $tmp_new"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm "$backup" "$tmp_old" "$tmp_new"
|
||||||
|
}
|
||||||
|
|
||||||
|
for file in "$@"; do
|
||||||
|
fix_one_file "$file"
|
||||||
|
done
|
@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
file = sys.argv[1]
|
||||||
|
line = int(sys.argv[2]) - 1
|
||||||
|
indent_expected = int(sys.argv[3])
|
||||||
|
indent_found = int(sys.argv[4])
|
||||||
|
|
||||||
|
with open(file) as f:
|
||||||
|
lines = f.readlines()
|
||||||
|
|
||||||
|
before = lines[:line]
|
||||||
|
|
||||||
|
is_a_list = lines[line].strip()[0] == '-'
|
||||||
|
|
||||||
|
i = line
|
||||||
|
while (i < len(lines) and
|
||||||
|
(lines[i].strip() == '' or
|
||||||
|
(not is_a_list and lines[i].startswith(indent_found * ' ')) or
|
||||||
|
(is_a_list and (lines[i].startswith(indent_found * ' ' + '-') or
|
||||||
|
lines[i].startswith(indent_found * ' ' + ' '))))):
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
contents = lines[line:i]
|
||||||
|
after = lines[i:]
|
||||||
|
|
||||||
|
new_contents = []
|
||||||
|
for line in contents:
|
||||||
|
if line.strip() != '':
|
||||||
|
line = (indent_expected * ' ') + line[indent_found:]
|
||||||
|
new_contents.append(line)
|
||||||
|
|
||||||
|
with open(file, 'w') as f:
|
||||||
|
f.write(''.join(before))
|
||||||
|
f.write(''.join(new_contents))
|
||||||
|
f.write(''.join(after))
|
Loading…
Reference in New Issue