Skip to content

Update test-gen-support from master #679

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Mar 22, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions scripts/cpplint.py
Original file line number Diff line number Diff line change
Expand Up @@ -1145,6 +1145,7 @@ def RepositoryName(self):
os.path.exists(os.path.join(current_dir, ".hg")) or
os.path.exists(os.path.join(current_dir, ".svn"))):
root_dir = current_dir
break;
current_dir = os.path.dirname(current_dir)

if (os.path.exists(os.path.join(root_dir, ".git")) or
Expand Down
19 changes: 10 additions & 9 deletions scripts/filter_lint_by_diff.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
print >>sys.stderr, "Usage: filter_lint_by_diff.py diff.patch repository_root_directory < cpplint_warnings.txt"
sys.exit(1)

added_lines = set()
repository_root = sys.argv[2]

diff = unidiff.PatchSet.from_filename(sys.argv[1])
for diff_file in diff:
# Create a set of all the files and the specific lines within that file that are in the diff
added_lines = set()
for diff_file in unidiff.PatchSet.from_filename(sys.argv[1]):
filename = diff_file.target_file
# Skip files deleted in the tip (b side of the diff):
if filename == "/dev/null":
Expand All @@ -25,11 +25,12 @@
if diff_line.line_type == "+":
added_lines.add((filename, diff_line.target_line_no))

for l in sys.stdin:
bits = l.split(":")
if len(bits) < 3:
# Print the lines that are in the set
for line in sys.stdin:
line_parts = line.split(":")
if len(line_parts) < 3:
continue
filename = os.path.join(repository_root, bits[0])
linenum = int(bits[1])
filename = os.path.join(repository_root, line_parts[0])
linenum = int(line_parts[1])
if (filename, linenum) in added_lines:
sys.stdout.write(l)
sys.stdout.write(line)
11 changes: 9 additions & 2 deletions scripts/run_lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
set -e

script_folder=`dirname $0`
absolute_repository_root=`readlink -f $script_folder/..`
absolute_repository_root=`git rev-parse --show-toplevel`

if [[ "$#" -gt 2 ]]
then
Expand All @@ -20,6 +20,13 @@ then
exit 1
fi

if ! [[ -e $script_folder/filter_lint_by_diff.py ]]
then
echo "Lint filter script could not be found in the $script_folder directory"
echo "Ensure filter_lint_by_diff.py is inside the $script_folder directory then run again"
exit 1
fi

if [[ "$#" -gt 0 ]]
then
git_start=$1
Expand Down Expand Up @@ -62,7 +69,7 @@ for file in $diff_files; do

# Run the linting script and filter:
# The errors from the linter go to STDERR so must be redirected to STDOUT
result=`$script_folder/cpplint.py $file 2>&1 | $script_folder/filter_lint_by_diff.py $diff_file $absolute_repository_root`
result=`$script_folder/cpplint.py $file 2>&1 >/dev/null | $script_folder/filter_lint_by_diff.py $diff_file $absolute_repository_root`

# Providing some errors were relevant we print them out
if [ "$result" ]
Expand Down
63 changes: 41 additions & 22 deletions src/util/file_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,12 @@ Date: January 2012
#include <io.h>
#include <windows.h>
#include <direct.h>
#include <util/unicode.h>
#define chdir _chdir
#define popen _popen
#define pclose _pclose
#else
#include <cstring>
#endif

#include "file_util.h"
Expand Down Expand Up @@ -79,42 +82,58 @@ Function: delete_directory

\*******************************************************************/

void delete_directory(const std::string &path)
{
#ifdef _WIN32

std::string pattern=path+"\\*";
#ifdef _WIN32

void delete_directory_utf16(const std::wstring &path)
{
std::wstring pattern=path + L"\\*";
// NOLINTNEXTLINE(readability/identifiers)
struct _finddata_t info;

intptr_t handle=_findfirst(pattern.c_str(), &info);

if(handle!=-1)
struct _wfinddata_t info;
intptr_t hFile=_wfindfirst(pattern.c_str(), &info);
if(hFile!=-1)
{
unlink(info.name);

while(_findnext(handle, &info)!=-1)
unlink(info.name);
do
{
if(wcscmp(info.name, L".")==0 || wcscmp(info.name, L"..")==0)
continue;
std::wstring sub_path=path+L"\\"+info.name;
if(info.attrib & _A_SUBDIR)
delete_directory_utf16(sub_path);
else
DeleteFileW(sub_path.c_str());
}
while(_wfindnext(hFile, &info)==0);
_findclose(hFile);
RemoveDirectoryW(path.c_str());
}
}

#else
#endif

void delete_directory(const std::string &path)
{
#ifdef _WIN32
delete_directory_utf16(utf8_to_utf16_little_endian(path));
#else
DIR *dir=opendir(path.c_str());

if(dir!=NULL)
{
struct dirent *ent;

while((ent=readdir(dir))!=NULL)
remove((path+"/"+ent->d_name).c_str());

{
// Needed for Alpine Linux
if(strcmp(ent->d_name, ".")==0 || strcmp(ent->d_name, "..")==0)
continue;
std::string sub_path=path+"/"+ent->d_name;
if(ent->d_type==DT_DIR)
delete_directory(sub_path);
else
remove(sub_path.c_str());
}
closedir(dir);
}

#endif

rmdir(path.c_str());
#endif
}

/*******************************************************************\
Expand Down