|  | @@ -43,13 +43,14 @@ class GuardValidator(object):
 | 
	
		
			
				|  |  |      def __init__(self):
 | 
	
		
			
				|  |  |          self.ifndef_re = re.compile(r'#ifndef ([A-Z][A-Z_1-9]*)')
 | 
	
		
			
				|  |  |          self.define_re = re.compile(r'#define ([A-Z][A-Z_1-9]*)')
 | 
	
		
			
				|  |  | -        self.endif_c_re = re.compile(
 | 
	
		
			
				|  |  | +        self.endif_c_core_re = re.compile(
 | 
	
		
			
				|  |  |              r'#endif /\* (?: *\\\n *)?([A-Z][A-Z_1-9]*) (?:\\\n *)?\*/$')
 | 
	
		
			
				|  |  | -        self.endif_cpp_re = re.compile(r'#endif  // ([A-Z][A-Z_1-9]*)')
 | 
	
		
			
				|  |  | +        self.endif_re = re.compile(r'#endif  // ([A-Z][A-Z_1-9]*)')
 | 
	
		
			
				|  |  |          self.failed = False
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def fail(self, fpath, regexp, fcontents, match_txt, correct, fix):
 | 
	
		
			
				|  |  | -        cpp_header = 'grpc++' in fpath or 'grpcpp' in fpath
 | 
	
		
			
				|  |  | +        c_core_header = 'include' in fpath and not ('grpc++' in fpath or
 | 
	
		
			
				|  |  | +                                                    'grpcpp' in fpath)
 | 
	
		
			
				|  |  |          self.failed = True
 | 
	
		
			
				|  |  |          invalid_guards_msg_template = (
 | 
	
		
			
				|  |  |              '{0}: Missing preprocessor guards (RE {1}). '
 | 
	
	
		
			
				|  | @@ -58,7 +59,8 @@ class GuardValidator(object):
 | 
	
		
			
				|  |  |              '#define {2}\n'
 | 
	
		
			
				|  |  |              '...\n'
 | 
	
		
			
				|  |  |              '... epic code ...\n'
 | 
	
		
			
				|  |  | -            '...\n') + ('#endif  // {2}' if cpp_header else '#endif /* {2} */')
 | 
	
		
			
				|  |  | +            '...\n') + ('#endif /* {2} */'
 | 
	
		
			
				|  |  | +                        if c_core_header else '#endif  // {2}')
 | 
	
		
			
				|  |  |          if not match_txt:
 | 
	
		
			
				|  |  |              print invalid_guards_msg_template.format(fpath, regexp.pattern,
 | 
	
		
			
				|  |  |                                                       build_valid_guard(fpath))
 | 
	
	
		
			
				|  | @@ -79,7 +81,8 @@ class GuardValidator(object):
 | 
	
		
			
				|  |  |          return fcontents
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def check(self, fpath, fix):
 | 
	
		
			
				|  |  | -        cpp_header = 'grpc++' in fpath or 'grpcpp' in fpath
 | 
	
		
			
				|  |  | +        c_core_header = 'include' in fpath and not ('grpc++' in fpath or
 | 
	
		
			
				|  |  | +                                                    'grpcpp' in fpath)
 | 
	
		
			
				|  |  |          valid_guard = build_valid_guard(fpath)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          fcontents = load(fpath)
 | 
	
	
		
			
				|  | @@ -120,22 +123,27 @@ class GuardValidator(object):
 | 
	
		
			
				|  |  |              if fix: save(fpath, fcontents)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          # Is there a properly commented #endif?
 | 
	
		
			
				|  |  | -        endif_re = self.endif_cpp_re if cpp_header else self.endif_c_re
 | 
	
		
			
				|  |  |          flines = fcontents.rstrip().splitlines()
 | 
	
		
			
				|  |  | -        match = endif_re.search('\n'.join(flines[-3:]))
 | 
	
		
			
				|  |  | +        match = self.endif_c_core_re.search('\n'.join(flines[-3:]))
 | 
	
		
			
				|  |  | +        if not match and not c_core_header:
 | 
	
		
			
				|  |  | +            match = self.endif_re.search('\n'.join(flines[-3:]))
 | 
	
		
			
				|  |  |          if not match:
 | 
	
		
			
				|  |  |              # No endif. Check if we have the last line as just '#endif' and if so
 | 
	
		
			
				|  |  |              # replace it with a properly commented one.
 | 
	
		
			
				|  |  |              if flines[-1] == '#endif':
 | 
	
		
			
				|  |  | -                flines[-1] = ('#endif' +
 | 
	
		
			
				|  |  | -                              ('  // {}\n'.format(valid_guard) if cpp_header
 | 
	
		
			
				|  |  | -                               else ' /* {} */\n'.format(valid_guard)))
 | 
	
		
			
				|  |  | +                flines[-1] = (
 | 
	
		
			
				|  |  | +                    '#endif' +
 | 
	
		
			
				|  |  | +                    (' /* {} */\n'.format(valid_guard)
 | 
	
		
			
				|  |  | +                     if c_core_header else '  // {}\n'.format(valid_guard)))
 | 
	
		
			
				|  |  |                  if fix:
 | 
	
		
			
				|  |  |                      fcontents = '\n'.join(flines)
 | 
	
		
			
				|  |  |                      save(fpath, fcontents)
 | 
	
		
			
				|  |  |              else:
 | 
	
		
			
				|  |  |                  # something else is wrong, bail out
 | 
	
		
			
				|  |  | -                self.fail(fpath, endif_re, flines[-1], '', '', False)
 | 
	
		
			
				|  |  | +                self.fail(
 | 
	
		
			
				|  |  | +                    fpath,
 | 
	
		
			
				|  |  | +                    self.endif_c_core_re if c_core_header else self.endif_re,
 | 
	
		
			
				|  |  | +                    flines[-1], '', '', False)
 | 
	
		
			
				|  |  |          elif match.group(1) != running_guard:
 | 
	
		
			
				|  |  |              # Is the #endif guard the same as the #ifndef and #define guards?
 | 
	
		
			
				|  |  |              fcontents = self.fail(fpath, endif_re, fcontents, match.group(1),
 | 
	
	
		
			
				|  | @@ -155,18 +163,6 @@ argp.add_argument('-f', '--fix', default=False, action='store_true')
 | 
	
		
			
				|  |  |  argp.add_argument('--precommit', default=False, action='store_true')
 | 
	
		
			
				|  |  |  args = argp.parse_args()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -KNOWN_BAD = set([
 | 
	
		
			
				|  |  | -    'src/core/ext/filters/client_channel/health/health.pb.h',
 | 
	
		
			
				|  |  | -    'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
 | 
	
		
			
				|  |  | -    'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h',
 | 
	
		
			
				|  |  | -    'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h',
 | 
	
		
			
				|  |  | -    'src/core/tsi/alts/handshaker/altscontext.pb.h',
 | 
	
		
			
				|  |  | -    'src/core/tsi/alts/handshaker/handshaker.pb.h',
 | 
	
		
			
				|  |  | -    'src/core/tsi/alts/handshaker/transport_security_common.pb.h',
 | 
	
		
			
				|  |  | -    'include/grpc++/ext/reflection.grpc.pb.h',
 | 
	
		
			
				|  |  | -    'include/grpc++/ext/reflection.pb.h',
 | 
	
		
			
				|  |  | -])
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  grep_filter = r"grep -E '^(include|src/core)/.*\.h$'"
 | 
	
		
			
				|  |  |  if args.precommit:
 | 
	
		
			
				|  |  |      git_command = 'git diff --name-only HEAD'
 | 
	
	
		
			
				|  | @@ -189,7 +185,6 @@ except subprocess.CalledProcessError:
 | 
	
		
			
				|  |  |  validator = GuardValidator()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  for filename in filename_list:
 | 
	
		
			
				|  |  | -    if filename in KNOWN_BAD: continue
 | 
	
		
			
				|  |  |      # Skip check for upb generated code.
 | 
	
		
			
				|  |  |      if filename.endswith('.upb.h') or filename.endswith('.upb.c'):
 | 
	
		
			
				|  |  |          continue
 |