<!--
   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.3"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  <id>ozone-src</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>true</includeBaseDirectory>
  <files>
    <file>
      <source>pom.ozone.xml</source>
      <outputDirectory>/</outputDirectory>
      <destName>pom.xml</destName>
    </file>
    <file>
      <source>hadoop-ozone/dist/src/main/license/src/LICENSE.txt</source>
      <outputDirectory>/</outputDirectory>
    </file>
    <file>
      <source>hadoop-ozone/dist/src/main/license/src/NOTICE.txt</source>
      <outputDirectory>/</outputDirectory>
    </file>
    <file>
      <source> hadoop-ozone/dist/src/main/license/src/licenses/LICENSE-angular-nvd3.txt</source>
      <outputDirectory>/licenses</outputDirectory>
    </file>
    <file>
      <source>hadoop-ozone/dist/src/main/license/src/licenses/LICENSE-angular.txt</source>
      <outputDirectory>/licenses</outputDirectory>
    </file>
    <file>
      <source>hadoop-ozone/dist/src/main/license/src/licenses/LICENSE-d3.txt</source>
      <outputDirectory>/licenses</outputDirectory>
    </file>
    <file>
      <source>hadoop-ozone/dist/src/main/license/src/licenses/LICENSE-nvd3.txt</source>
      <outputDirectory>/licenses</outputDirectory>
    </file>
    <file>
      <source>hadoop-ozone/dist/src/main/license/src/licenses/LICENSE-jquery.txt</source>
      <outputDirectory>/licenses</outputDirectory>
    </file>
  </files>
  <fileSets>
    <fileSet>
      <directory>.</directory>
      <includes>
        <include>pom.ozone.xml</include>
        <include>README.txt</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>hadoop-hdds</directory>
      <useDefaultExcludes>true</useDefaultExcludes>
      <excludes>
        <exclude>**/.classpath</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.settings</exclude>
        <exclude>**/*.iml</exclude>
        <exclude>**/target/**</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>hadoop-ozone</directory>
      <useDefaultExcludes>true</useDefaultExcludes>
      <excludes>
        <exclude>**/ozone-recon-web/build/**</exclude>
        <exclude>**/ozone-recon-web/node_modules/**</exclude>
        <exclude>**/.classpath</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.settings</exclude>
        <exclude>**/*.iml</exclude>
        <exclude>**/target/**</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>hadoop-ozone/dist/src/main/license/src</directory>
      <includes>
        <include>**/*.txt</include>
      </includes>

    </fileSet>
  </fileSets>
</assembly>
