<!--
   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.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>src</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <baseDirectory>${project.build.finalName}-src</baseDirectory>
  <fileSets>
    <fileSet>
      <directory>${project.basedir}</directory>
      <useDefaultExcludes>true</useDefaultExcludes>
      <excludes>
        <exclude>NOTICE*.txt</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.gitignore</exclude>
        <exclude>**/${project.build.directory}/**</exclude>
        <exclude>**/dependency-reduced-pom.xml</exclude>
        <exclude>**/*.log</exclude>
        <exclude>**/*.log.*</exclude>
        <exclude>**/*.rej</exclude>
        <exclude>**/*.classpath</exclude>
        <exclude>**/whirr-logo.ai</exclude>
        <exclude>services/voldemort/lib/*.jar</exclude>
        <exclude>.idea/**</exclude>
        <exclude>**/*.iml</exclude>
        <exclude>**/*.ipr</exclude>
        <exclude>**/*.iws</exclude>
        <exclude>bin/**</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>bin</directory>
      <outputDirectory>bin</outputDirectory>
      <includes>
        <include>**</include>
      </includes>
      <lineEnding>unix</lineEnding>
      <fileMode>0755</fileMode>
      <directoryMode>0755</directoryMode>
    </fileSet>
  </fileSets>
  <files>
    <file>
      <source>NOTICE-src.txt</source>
      <destName>NOTICE.txt</destName>
    </file>
  </files>
</assembly>
