
# 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.



===========The Dist Deployment Structure==========="
The DataSketche base directories in https://dist.apache.org/repos/dist/ are:"
 - dev/incubator/datasketches/"
 - release/incubator/datasketches/"

 Each of these two directories contain a KEYS file, which is where you must have your GPG public key stored."

After graduation the base directories will be the same but without the incubator level."

For both the dev and the release branches, the root contains sub-directories for each of "
the datasketches-X repositories as follows:"
 - characterization/"
 - core/"
 - cpp/"
 - hive/"
 - memory/"
 - pig/"
 - postgresql/"
 - vector/"

Below these sub=directories is a level of leaf directories that define a particular release or release candidate."

Finally the leaf directories contain the zip and signature files for a release or release candidate."
The full tree will look something like this example:"
  dist/"
    dev/"
      incubator/"
        datasketches/"
          KEYS"
          memory/"
            0.12.3-incubating-RC1/"
              apache-datasketches-memory-0.12.3-incubating-src.zip"
              apache-datasketches-memory-0.12.3-incubating-src.zip.asc"
              apache-datasketches-memory-0.12.3-incubating-src.zip.sha512"
          etc."
