Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
A
aom-rav1e
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Xiph.Org
aom-rav1e
Commits
c88fc5b2
Commit
c88fc5b2
authored
13 years ago
by
John Koleszar
Committed by
Gerrit Code Review
13 years ago
Browse files
Options
Downloads
Plain Diff
Merge "FTFY: an automated style corrector"
parents
bf2c9030
cb265a49
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
tools/ftfy.sh
+123
-0
123 additions, 0 deletions
tools/ftfy.sh
tools/intersect-diffs.py
+189
-0
189 additions, 0 deletions
tools/intersect-diffs.py
with
312 additions
and
0 deletions
tools/ftfy.sh
0 → 100755
+
123
−
0
View file @
c88fc5b2
#!/bin/sh
self
=
"
$0
"
usage
()
{
cat
<<
EOF
>&2
Usage:
$self
[option]
This script applies a whitespace transformation to the commit at HEAD. If no
options are given, then the modified files are left in the working tree.
Options:
-n, --dry-run Shows a diff of the changes to be made.
--amend Squashes the changes into the commit at HEAD
--commit Creates a new commit containing only the whitespace changes
EOF
rm
-f
${
CLEAN_FILES
}
exit
1
}
log
()
{
echo
"
${
self
##*/
}
:
$@
"
>
&2
}
vpx_style
()
{
astyle
--style
=
bsd
--min-conditional-indent
=
0
--break-blocks
\
--pad-oper
--pad-header
--unpad-paren
\
--align-pointer
=
name
\
--indent-preprocessor
--convert-tabs
--indent-labels
\
--suffix
=
none
--quiet
"
$@
"
sed
-i
's/[[:space:]]\{1,\},/,/g'
"
$@
"
}
apply
()
{
patch
-p1
<
"
$1
"
}
commit
()
{
LAST_CHANGEID
=
$(
git show |
awk
'/Change-Id:/{print $2}'
)
if
[
-z
"
$LAST_CHANGEID
"
]
;
then
log
"HEAD doesn't have a Change-Id, unable to generate a new commit"
exit
1
fi
# Build a deterministic Change-Id from the parent's
NEW_CHANGEID
=
${
LAST_CHANGEID
}
-styled
NEW_CHANGEID
=
I
$(
echo
$NEW_CHANGEID
| git hash-object
--stdin
)
# Commit, preserving authorship from the parent commit.
git commit
-a
-C
HEAD
>
/dev/null
git commit
--amend
-F-
<<
EOF
Cosmetic: Fix whitespace in change
${
LAST_CHANGEID
:0:9
}
Change-Id:
${
NEW_CHANGEID
}
EOF
}
amend
()
{
git commit
-a
--amend
-C
HEAD
}
# Temporary files
ORIG_DIFF
=
orig.diff.
$$
MODIFIED_DIFF
=
modified.diff.
$$
FINAL_DIFF
=
final.diff.
$$
CLEAN_FILES
=
"
${
ORIG_DIFF
}
${
MODIFIED_DIFF
}
${
FINAL_DIFF
}
"
# Preconditions
[
$#
-lt
2
]
||
usage
if
!
git diff
--quiet
HEAD
;
then
log
"Working tree is dirty, commit your changes first"
exit
1
fi
# Need to be in the root
cd
"
$(
git rev-parse
--show-toplevel
)
"
# Collect the original diff
git show
>
"
${
ORIG_DIFF
}
"
# Apply the style guide on the modified files and collect its diff
for
f
in
$(
git diff HEAD^
--name-only
|
grep
'\.[ch]$'
)
;
do
case
"
$f
"
in
third_party/
*
)
continue
;;
nestegg/
*
)
continue
;;
esac
vpx_style
"
$f
"
done
git diff
--no-color
--no-ext-diff
>
"
${
MODIFIED_DIFF
}
"
# Intersect the two diffs
$(
dirname
${
self
}
)
/intersect-diffs.py
\
"
${
ORIG_DIFF
}
"
"
${
MODIFIED_DIFF
}
"
>
"
${
FINAL_DIFF
}
"
INTERSECT_RESULT
=
$?
git reset
--hard
>
/dev/null
if
[
$INTERSECT_RESULT
-eq
0
]
;
then
# Handle options
if
[
-n
"
$1
"
]
;
then
case
"
$1
"
in
-h
|
--help
)
usage
;;
-n
|
--dry-run
)
cat
"
${
FINAL_DIFF
}
"
;;
--commit
)
apply
"
${
FINAL_DIFF
}
"
;
commit
;;
--amend
)
apply
"
${
FINAL_DIFF
}
"
;
amend
;;
*
)
usage
;;
esac
else
apply
"
${
FINAL_DIFF
}
"
if
!
git diff
--quiet
;
then
log
"Formatting changes applied, verify and commit."
log
"See also: http://www.webmproject.org/code/contribute/conventions/"
git diff
--stat
fi
fi
fi
rm
-f
${
CLEAN_FILES
}
This diff is collapsed.
Click to expand it.
tools/intersect-diffs.py
0 → 100755
+
189
−
0
View file @
c88fc5b2
#!/usr/bin/env python
## Copyright (c) 2012 The WebM project authors. All Rights Reserved.
##
## Use of this source code is governed by a BSD-style license
## that can be found in the LICENSE file in the root of the source
## tree. An additional intellectual property rights grant can be found
## in the file PATENTS. All contributing project authors may
## be found in the AUTHORS file in the root of the source tree.
##
"""
Calculates the
"
intersection
"
of two unified diffs.
Given two diffs, A and B, it finds all hunks in B that had non-context lines
in A and prints them to stdout. This is useful to determine the hunks in B that
are relevant to A. The resulting file can be applied with patch(1) on top of A.
"""
__author__
=
"
jkoleszar@google.com
"
import
re
import
sys
class
DiffLines
(
object
):
"""
A container for one half of a diff.
"""
def
__init__
(
self
,
filename
,
offset
,
length
):
self
.
filename
=
filename
self
.
offset
=
offset
self
.
length
=
length
self
.
lines
=
[]
self
.
delta_line_nums
=
[]
def
Append
(
self
,
line
):
l
=
len
(
self
.
lines
)
if
line
[
0
]
!=
"
"
:
self
.
delta_line_nums
.
append
(
self
.
offset
+
l
)
self
.
lines
.
append
(
line
[
1
:])
assert
l
+
1
<=
self
.
length
def
Complete
(
self
):
return
len
(
self
.
lines
)
==
self
.
length
def
__contains__
(
self
,
item
):
return
item
>=
self
.
offset
and
item
<=
self
.
offset
+
self
.
length
-
1
class
DiffHunk
(
object
):
"""
A container for one diff hunk, consisting of two DiffLines.
"""
def
__init__
(
self
,
header
,
file_a
,
file_b
,
start_a
,
len_a
,
start_b
,
len_b
):
self
.
header
=
header
self
.
left
=
DiffLines
(
file_a
,
start_a
,
len_a
)
self
.
right
=
DiffLines
(
file_b
,
start_b
,
len_b
)
self
.
lines
=
[]
def
Append
(
self
,
line
):
"""
Adds a line to the DiffHunk and its DiffLines children.
"""
if
line
[
0
]
==
"
-
"
:
self
.
left
.
Append
(
line
)
elif
line
[
0
]
==
"
+
"
:
self
.
right
.
Append
(
line
)
elif
line
[
0
]
==
"
"
:
self
.
left
.
Append
(
line
)
self
.
right
.
Append
(
line
)
else
:
assert
False
,
(
"
Unrecognized character at start of diff line
"
"
%r
"
%
line
[
0
])
self
.
lines
.
append
(
line
)
def
Complete
(
self
):
return
self
.
left
.
Complete
()
and
self
.
right
.
Complete
()
def
__repr__
(
self
):
return
"
DiffHunk(%s, %s, len %d)
"
%
(
self
.
left
.
filename
,
self
.
right
.
filename
,
max
(
self
.
left
.
length
,
self
.
right
.
length
))
def
ParseDiffHunks
(
stream
):
"""
Walk a file-like object, yielding DiffHunks as they
'
re parsed.
"""
file_regex
=
re
.
compile
(
r
"
(\+\+\+|---) (\S+)
"
)
range_regex
=
re
.
compile
(
r
"
@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))?
"
)
hunk
=
None
while
True
:
line
=
stream
.
readline
()
if
not
line
:
break
if
hunk
is
None
:
# Parse file names
diff_file
=
file_regex
.
match
(
line
)
if
diff_file
:
if
line
.
startswith
(
"
---
"
):
a_line
=
line
a
=
diff_file
.
group
(
2
)
continue
if
line
.
startswith
(
"
+++
"
):
b_line
=
line
b
=
diff_file
.
group
(
2
)
continue
# Parse offset/lengths
diffrange
=
range_regex
.
match
(
line
)
if
diffrange
:
if
diffrange
.
group
(
2
):
start_a
=
int
(
diffrange
.
group
(
1
))
len_a
=
int
(
diffrange
.
group
(
3
))
else
:
start_a
=
1
len_a
=
int
(
diffrange
.
group
(
1
))
if
diffrange
.
group
(
5
):
start_b
=
int
(
diffrange
.
group
(
4
))
len_b
=
int
(
diffrange
.
group
(
6
))
else
:
start_b
=
1
len_b
=
int
(
diffrange
.
group
(
4
))
header
=
[
a_line
,
b_line
,
line
]
hunk
=
DiffHunk
(
header
,
a
,
b
,
start_a
,
len_a
,
start_b
,
len_b
)
else
:
# Add the current line to the hunk
hunk
.
Append
(
line
)
# See if the whole hunk has been parsed. If so, yield it and prepare
# for the next hunk.
if
hunk
.
Complete
():
yield
hunk
hunk
=
None
# Partial hunks are a parse error
assert
hunk
is
None
def
FormatDiffHunks
(
hunks
):
"""
Re-serialize a list of DiffHunks.
"""
r
=
[]
last_header
=
None
for
hunk
in
hunks
:
this_header
=
hunk
.
header
[
0
:
2
]
if
last_header
!=
this_header
:
r
.
extend
(
hunk
.
header
)
last_header
=
this_header
else
:
r
.
extend
(
hunk
.
header
[
2
])
r
.
extend
(
hunk
.
lines
)
r
.
append
(
"
\n
"
)
return
""
.
join
(
r
)
def
ZipHunks
(
rhs_hunks
,
lhs_hunks
):
"""
Join two hunk lists on filename.
"""
for
rhs_hunk
in
rhs_hunks
:
rhs_file
=
rhs_hunk
.
right
.
filename
.
split
(
"
/
"
)[
1
:]
for
lhs_hunk
in
lhs_hunks
:
lhs_file
=
lhs_hunk
.
left
.
filename
.
split
(
"
/
"
)[
1
:]
if
lhs_file
!=
rhs_file
:
continue
yield
(
rhs_hunk
,
lhs_hunk
)
def
main
():
old_hunks
=
[
x
for
x
in
ParseDiffHunks
(
open
(
sys
.
argv
[
1
],
"
r
"
))]
new_hunks
=
[
x
for
x
in
ParseDiffHunks
(
open
(
sys
.
argv
[
2
],
"
r
"
))]
out_hunks
=
[]
# Join the right hand side of the older diff with the left hand side of the
# newer diff.
for
old_hunk
,
new_hunk
in
ZipHunks
(
old_hunks
,
new_hunks
):
if
new_hunk
in
out_hunks
:
continue
old_lines
=
old_hunk
.
right
new_lines
=
new_hunk
.
left
# Determine if this hunk overlaps any non-context line from the other
for
i
in
old_lines
.
delta_line_nums
:
if
i
in
new_lines
:
out_hunks
.
append
(
new_hunk
)
break
if
out_hunks
:
print
FormatDiffHunks
(
out_hunks
)
else
:
sys
.
exit
(
1
)
if
__name__
==
"
__main__
"
:
main
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment