Ported bin/find-unusedheaders.pl to Python

Also fixed bug which prevented .cxx and .hxx files listing

Change-Id: I67adc7c52ab5f2f1222e0756cd0087c8d9be102f
Reviewed-on: https://gerrit.libreoffice.org/38640
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
This commit is contained in:
Arkadiy Illarionov 2017-06-10 22:24:32 +03:00 committed by Samuel Mehrbrodt
parent 379196bf95
commit 63a7df3c07
3 changed files with 49 additions and 50 deletions

View file

@ -399,7 +399,7 @@ findunusedcode:
@$(SRCDIR)/bin/findunusedcode $(SRCDIR) $(MAKE)
findunusedheaders:
$(SRCDIR)/bin/find-unusedheaders.pl
$(SRCDIR)/bin/find-unusedheaders.py
symbols:
rm -fr $(WORKDIR)/symbols/

View file

@ -1,49 +0,0 @@
#!/usr/bin/env perl
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
#
use strict;
use warnings;
use File::Find qw(finddepth);
use File::Basename;
# Find dirs in:
# workdir/Dep/CxxObject/
# workdir/Dep/CObject
#
# Concat these files and compare them with the output of
# `git ls-tree HEAD -r --name-only` and report files in the git ls-tree that aren't in the first.
my @files;
my $tmp;
my %data = ();
# define a wanted function
sub wanted {
return if($_ eq '.' || $_ eq '..' || -d $_);
$tmp = basename($File::Find::name);
# remove file extension ( .o )
$tmp =~ s/\.[^.]*$//;
$data{$tmp} = $File::Find::name;
}
finddepth(\&wanted, 'workdir/Dep/CxxObject');
finddepth(\&wanted, 'workdir/Dep/CObject');
my @gitfiles = `git ls-tree HEAD -r --name-only`;
# loop over found gitfiles
foreach my $file (@gitfiles){
if($file =~ /\.[hxx|h|c|cxx]$/){
$tmp = basename($file);
$tmp =~ s/\.[^.]*$//;
chomp($tmp);
if(!exists($data{$tmp})){
print $file;
}
}
}

48
bin/find-unusedheaders.py Executable file
View file

@ -0,0 +1,48 @@
#!/usr/bin/env python3
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""
Find dirs in:
workdir/Dep/CObject
workdir/Dep/CxxObject
Concat these files and compare them with the output of
`git ls-tree HEAD -r --name-only` and report files in the git ls-tree that aren't in the first.
"""
import os
import subprocess
def get_files_dict_recursively(directory):
data = {}
for root, _, files in os.walk(directory, topdown=False):
for f in files:
basename = os.path.splitext(f)[0]
data[basename] = os.path.join(root, f)
return data
def main():
data = {}
for d in ('workdir/Dep/CObject', 'workdir/Dep/CxxObject'):
tmp = get_files_dict_recursively(d)
data.update(tmp)
gitfiles = subprocess.check_output(['git', 'ls-tree', 'HEAD', '-r', '--name-only']).decode('utf-8').split('\n')
for f in gitfiles:
ext = os.path.splitext(f)[1]
if ext[1:] in ('c', 'cxx', 'h', 'hxx'):
tmp = os.path.basename(f)
tmp = os.path.splitext(tmp)[0]
if tmp not in data:
print(f)
if __name__ == '__main__':
main()