<!--

    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
  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>src</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>true</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>../..</directory>
      <useDefaultExcludes>true</useDefaultExcludes>
      <includes>
        <include>**/README.md</include>
        <include>**/LICENSE</include>
        <include>**/NOTICE</include>
        <include>**/pom.xml</include>
        <include>**/src/**</include>
        <include>**/pulsar-client-cpp/**</include>
        <include>**/pulsar-client-go/**</include>
        <include>**/pulsar-function-go/**</include>
        <include>**/conf/**</include>
        <include>**/bin/**</include>
        <include>**/*.txt</include>
        <include>pulsar-common/*.sh</include>
        <include>docker/**</include>
        <include>dashboard/**</include>
        <include>deployment/**</include>
      </includes>
      <excludes>
        <exclude>.git/**</exclude>
        <exclude>**/*.nar</exclude>
        <exclude>**/.terraform/**</exclude>
        <exclude>**/.gitignore</exclude>
        <exclude>**/.svn</exclude>
        <exclude>**/*.iws</exclude>
        <exclude>**/*.ipr</exclude>
        <exclude>**/*.iml</exclude>
        <exclude>**/*.cbp</exclude>
        <exclude>**/*.pyc</exclude>
        <exclude>**/.classpath</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.settings</exclude>
        <exclude>**/target/**</exclude>
        <exclude>**/CMakeFiles/**</exclude>
        <exclude>**/CMakeCache.txt</exclude>
        <exclude>**/cmake_install.cmake</exclude>
        <exclude>pulsar-client-cpp/**/Makefile</exclude>
        <exclude>pulsar-client-cpp/tests/main</exclude>
        <exclude>pulsar-client-cpp/examples/SampleAsyncProducer</exclude>
        <exclude>pulsar-client-cpp/examples/SampleConsumer</exclude>
        <exclude>pulsar-client-cpp/examples/SampleConsumerListener</exclude>
        <exclude>pulsar-client-cpp/examples/SampleProducer</exclude>
        <exclude>pulsar-client-cpp/perf/perfProducer</exclude>
        <exclude>pulsar-client-cpp/perf/perfConsumer</exclude>

        <exclude>**/python/dist/**</exclude>
        <exclude>**/pulsar-client-cpp/pkg/rpm/RPMS/**</exclude>
        <exclude>**/pulsar-client-cpp/pkg/rpm/SOURCES/**</exclude>
        <exclude>**/python/wheelhouse/**</exclude>
        <exclude>**/python/MANIFEST</exclude>
        <exclude>**/*.egg-info/**</exclude>
        <!-- until the code that does this is fixed -->
        <exclude>**/*.log</exclude>
        <exclude>**/build/**</exclude>
        <exclude>**/file:/**</exclude>
        <exclude>**/SecurityAuth.audit*</exclude>
        <exclude>**/site/**</exclude>
        <exclude>**/site2/**</exclude>
        <exclude>**/.idea/**</exclude>
        <exclude>**/*.a</exclude>
        <exclude>**/*.so</exclude>
        <exclude>**/*.so.*</exclude>
        <exclude>**/*.dylib</exclude>
      </excludes>
    </fileSet>
  </fileSets>
</assembly>
