#   Licensed to the Apache Software Foundation (ASF) under one
#   or more contributor license agreements.  See the NOTICE file
#   distributed with this work for additional information
#   regarding copyright ownership.  The ASF licenses this file
#   to you under the Apache License, Version 2.0 (the
#   "License"); you may not use this file except in compliance
#   with the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

# Order is important. The last matching pattern has the most precedence.
# A component can have more than one owner!

# These owners will be the default owners for everything in the repo.
*                           @bryancall

# The new order "src" tree
src/shared/*                @SolidWallOfCode
src/traffic_cache_tool/*    @SolidWallOfCode
src/traffic_crashlog/*      @zwoop
src/traffic_ctl/*           @zwoop
src/traffic_layout/*        @zwoop
src/traffic_logcat/*        @zwoop
src/traffic_logstats/*      @zwoop
src/traffic_manager/*       @zwoop
src/traffic_quic/*          @maskit
src/traffic_server/*        @zwoop
src/traffic_top/*           @bryancall
src/traffic_via/*           @zwoop
src/traffic_wccp/*          @SolidWallOfCode
src/tscore/*                @SolidWallOfCode @zwoop
src/wccp/*                  @SolidWallOfCode

# Include tree
include/*                   @bryan_call
include/tscpp/*             @SolidWallOfCode
include/wccp/*              @SolidWallOfCode
include/shared/*            @SolidWallOfCode @zwoop
include/tscore/*            @SolidWallOfCode @zwoop
include/ts/*                @zwoop

# iocore src
tscore/*                    @bryan_call
tscore/aio/*                @bryan_call
tscore/cache/*              @SolidWallOfCode
tscore/dns/*                @SolidWallOfCode
tscore/eventsystem/*        @bryan_call
tscore/hostdb/*             @SolidWallOfCode
tscore/net/*                @bryan_call
tscore/utils/*              @bryan_call

# Old lib tree
lib/records/*               @zwoop
lib/perl/*                  @zwoop
lib/yamlcpp/*               @bryancall

# The proxy tree, where all flavor of HTTP lives
proxy/*                     @zwoop
proxy/hdrs/*                @SolidWallOfCode
proxy/http/*                @zwoop
proxy/http2/*               @masaori335
proxy/http3/*               @maskit @masaori335
proxy/logging/*             @zwoop
proxy/private/*             @zwoop
proxy/shared/*              @zwoop

# Test tree
tests/*                     @SolidWallOfCode
tests/include/*             @SolidWallOfCode
tests/gold_tests/*          @SolidWallOfCode
tests/tools/*               @SolidWallOfCode
tests/unit_tests/*          @SolidWallOfCode

# The manager source
mgmt/*                      @zwoop @bryancall

# Various plugins
plugins/*                   @zwoop
plugins/cachekey/*          @gtenev

# Example plugins / code
example/*                   @SolidWallOfCode

# Tools tree
tools/*                     @bryancall @zwoop

# CI tools
ci/*                        @zwoop

# Documentation
doc/*                       @SolidWallOfCode @mlibbey
