<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<assembly>
    <id>src</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <baseDirectory>${project.parent.name}-${project.version}-src</baseDirectory>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>..</directory>
            <includes>
                <include>LICENCE.txt</include>
                <include>README.txt</include>
                <include>NOTICE.txt</include>
                <include>DISCLAIMER.txt</include>
            </includes>
            <useDefaultExcludes>true</useDefaultExcludes>
        </fileSet>
        <fileSet>
            <directory>..</directory>
            <excludes>
                <exclude>.git/**</exclude>
                <exclude>**/.gitignore</exclude>
                <exclude>**/.svn</exclude>
                <exclude>**/*.iws</exclude>
                <exclude>**/*.ipr</exclude>
                <exclude>**/*.iml</exclude>
                <exclude>**/.classpath</exclude>
                <exclude>**/.project</exclude>
                <exclude>**/.settings</exclude>
                <exclude>**/target/**</exclude>
                <exclude>.idea/**</exclude>
                <!-- until the code that does this is fixed -->
                <exclude>**/*.log</exclude>
                <exclude>**/build/**</exclude>
                <exclude>**/file:/**</exclude>
                <exclude>**/debugfiles.list</exclude>
                <exclude>**/debuglinks.list</exclude>
                <exclude>**/debugsources.list</exclude>
                <exclude>dev-support/ranger-docker/downloads/**</exclude>
                <exclude>dev-support/ranger-docker/dist/**</exclude>
                <exclude>intg/src/main/python/dist/**</exclude>
                <exclude>security-admin/src/main/webapp/react-webapp/dist/**</exclude>
            </excludes>
        </fileSet>
    </fileSets>
</assembly>
