# Important!
# Before adding yourself please make sure that your userid is listed at:
# https://github.com/orgs/apache/teams/hive-committers/members
# non-members can't be assigned for reviews - and the plugin will stop with an error!
---
# thrift changes
'**/*.thrift':
  - klcopp
# ddl changes
'**/ddl/**':
  - miklosgergely
# driver related changes
'**/ql/*@(Driver|Compiler|Executor)*.java':
  - miklosgergely
# schematool changes
'**/schematool/**':
  - miklosgergely
# metatool changes
'**/metatool/**':
  - miklosgergely
'**/tez/**/*.java':
  - abstractdog
'**/*Tez*java':
  - abstractdog
'**/*TopNKey*java':
  - kasakrisz
'**/*CardinalityPreserving*java':
  - kasakrisz
# llap stuff
'**/*Llap*java':
  - pgaref

