utils: checkstyle.py: Add header add checker
Add a commit checker that ensures that all header files added to the libcamera includes (public or internal) are accompanied by a corresponding update of the meson.build file in the same directory. Here's the output of the new checker when run against a commit that forgot to update meson.build. $ ./utils/checkstyle.pyb3383da79f
---------------------------------------------------------------------------------b3383da79f
libcamera: buffer: Create a MappedBuffer --------------------------------------------------------------------------------- Header include/libcamera/internal/buffer.h added without corresponding update to include/libcamera/internal/meson.build --- 1 potential issue detected, please review In theory we could extend the checker to cover .cpp files too, but the issue will be quite noticeable as meson won't build the file if meson.build isn't updated. Header files are more tricky as problems would only occur at when installing the headers (for public headers), or would result in race conditions in the build. Both of those issues are harder to catch. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
bf7981f2bc
commit
8fffab46b8
1 changed files with 44 additions and 0 deletions
|
@ -320,6 +320,50 @@ class CommitIssue(object):
|
|||
self.msg = msg
|
||||
|
||||
|
||||
class HeaderAddChecker(CommitChecker):
|
||||
@classmethod
|
||||
def check(cls, commit, top_level):
|
||||
issues = []
|
||||
|
||||
meson_files = [f for f in commit.files('M')
|
||||
if os.path.basename(f) == 'meson.build']
|
||||
|
||||
for filename in commit.files('A'):
|
||||
if not filename.startswith('include/libcamera/') or \
|
||||
not filename.endswith('.h'):
|
||||
continue
|
||||
|
||||
meson = os.path.dirname(filename) + '/meson.build'
|
||||
header = os.path.basename(filename)
|
||||
|
||||
issue = CommitIssue('Header %s added without corresponding update to %s' %
|
||||
(filename, meson))
|
||||
|
||||
if meson not in meson_files:
|
||||
issues.append(issue)
|
||||
continue
|
||||
|
||||
diff = commit.get_diff(top_level, meson)
|
||||
found = False
|
||||
|
||||
for hunk in diff:
|
||||
for line in hunk.lines:
|
||||
if line[0] != '+':
|
||||
continue
|
||||
|
||||
if line.find("'%s'" % header) != -1:
|
||||
found = True
|
||||
break
|
||||
|
||||
if found:
|
||||
break
|
||||
|
||||
if not found:
|
||||
issues.append(issue)
|
||||
|
||||
return issues
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Style Checkers
|
||||
#
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue