FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
java-code-format/scripts/google-java-format-diff.py at master · pandening/java-code-format · GitHub
pandening
/
java-code-format
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
2
Code
Issues
0
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
java-code-format
/
scripts
/
google-java-format-diff.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
121 lines (106 loc) · 4.24 KB
Breadcrumbs
java-code-format
/
scripts
/
google-java-format-diff.py
Copy path
File metadata and controls
executable file
·
121 lines (106 loc) · 4.24 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python2.7
#
#===- google-java-format-diff.py - google-java-format Diff Reformatter -----===#
#
# The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
#===------------------------------------------------------------------------===#
"""
google-java-format Diff Reformatter
============================
This script reads input from a unified diff and reformats all the changed
lines. This is useful to reformat all the lines touched by a specific patch.
Example usage for git/svn users:
git diff -U0 HEAD^ | google-java-format-diff.py -p1 -i
svn diff --diff-cmd=diff -x-U0 | google-java-format-diff.py -i
"""
import
argparse
import
difflib
import
re
import
string
import
subprocess
import
StringIO
import
sys
from
distutils
.
spawn
import
find_executable
binary
=
find_executable
(
'google-java-format'
)
or
'/usr/bin/google-java-format'
def
main
():
parser
=
argparse
.
ArgumentParser
(
description
=
'Reformat changed lines in diff. Without -i '
'option just output the diff that would be '
'introduced.'
)
parser
.
add_argument
(
'-i'
,
action
=
'store_true'
,
default
=
False
,
help
=
'apply edits to files instead of displaying a diff'
)
parser
.
add_argument
(
'-p'
,
metavar
=
'NUM'
,
default
=
0
,
help
=
'strip the smallest prefix containing P slashes'
)
parser
.
add_argument
(
'-regex'
,
metavar
=
'PATTERN'
,
default
=
None
,
help
=
'custom pattern selecting file paths to reformat '
'(case sensitive, overrides -iregex)'
)
parser
.
add_argument
(
'-iregex'
,
metavar
=
'PATTERN'
,
default
=
r'.*\.java'
,
help
=
'custom pattern selecting file paths to reformat '
'(case insensitive, overridden by -regex)'
)
parser
.
add_argument
(
'-v'
,
'--verbose'
,
action
=
'store_true'
,
help
=
'be more verbose, ineffective without -i'
)
parser
.
add_argument
(
'-a'
,
'--aosp'
,
action
=
'store_true'
,
help
=
'use AOSP style instead of Google Style (4-space indentation)'
)
parser
.
add_argument
(
'--skip-sorting-imports'
,
action
=
'store_true'
,
help
=
'do not fix the import order'
)
args
=
parser
.
parse_args
()
# Extract changed lines for each file.
filename
=
None
lines_by_file
=
{}
for
line
in
sys
.
stdin
:
match
=
re
.
search
(
'^\+\+\+\ (.*?/){%s}(\S*)'
%
args
.
p
,
line
)
if
match
:
filename
=
match
.
group
(
2
)
if
filename
==
None
:
continue
if
args
.
regex
is
not
None
:
if
not
re
.
match
(
'^%s$'
%
args
.
regex
,
filename
):
continue
else
:
if
not
re
.
match
(
'^%s$'
%
args
.
iregex
,
filename
,
re
.
IGNORECASE
):
continue
match
=
re
.
search
(
'^@@.*\+(\d+)(,(\d+))?'
,
line
)
if
match
:
start_line
=
int
(
match
.
group
(
1
))
line_count
=
1
if
match
.
group
(
3
):
line_count
=
int
(
match
.
group
(
3
))
if
line_count
==
0
:
continue
end_line
=
start_line
+
line_count
-
1
;
lines_by_file
.
setdefault
(
filename
, []).
extend
(
[
'-lines'
,
str
(
start_line
)
+
':'
+
str
(
end_line
)])
# Reformat files containing changes in place.
for
filename
,
lines
in
lines_by_file
.
iteritems
():
if
args
.
i
and
args
.
verbose
:
print
'Formatting'
,
filename
command
=
[
binary
]
if
args
.
i
:
command
.
append
(
'-i'
)
if
args
.
aosp
:
command
.
append
(
'--aosp'
)
if
args
.
skip_sorting_imports
:
command
.
append
(
'--skip-sorting-imports'
)
command
.
extend
(
lines
)
command
.
append
(
filename
)
p
=
subprocess
.
Popen
(
command
,
stdout
=
subprocess
.
PIPE
,
stderr
=
None
,
stdin
=
subprocess
.
PIPE
)
stdout
,
stderr
=
p
.
communicate
()
if
p
.
returncode
!=
0
:
sys
.
exit
(
p
.
returncode
);
if
not
args
.
i
:
with
open
(
filename
)
as
f
:
code
=
f
.
readlines
()
formatted_code
=
StringIO
.
StringIO
(
stdout
).
readlines
()
diff
=
difflib
.
unified_diff
(
code
,
formatted_code
,
filename
,
filename
,
'(before formatting)'
,
'(after formatting)'
)
diff_string
=
string
.
join
(
diff
,
''
)
if
len
(
diff_string
)
>
0
:
sys
.
stdout
.
write
(
diff_string
)
if
__name__
==
'__main__'
:
main
()
Back
|
FazBrowse Home
|
New Git URL